๋ชฉ์ฐจ
ย Overall
ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ์ธํ๋ผ๋ฅผ ๊ตฌ์ฑํ ๋, ์๋ฒ ์ด๋ฏธ์ง๋ฅผ ๋งค๋ฒ ์๋์ผ๋ก ์ธํ
ํ๋ ๊ณผ์ ์ ์๊ฐ๋ ์ค๋ ๊ฑธ๋ฆฌ๊ณ ํ๊ฒฝ๋ณ ๋ถ์ผ์น ๋ฌธ์ ๋ ์์ฃผ ๋ฐ์ํ๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด HashiCorp์์ ๋ง๋ ๋๊ตฌ๊ฐ ๋ฐ๋ก Packer๋ค.
ย Packer
Packer๋ HashiCorp์์ ๊ฐ๋ฐํ ์คํ์์ค ๋๊ตฌ๋ก, ๋จ์ผ ๊ตฌ์ฑ ํ์ผ๋ก ์ฌ๋ฌ ํ๋ซํผ์ ๋์ผํ ๋จธ์ ์ด๋ฏธ์ง๋ฅผ ์๋์ผ๋ก ์์ฑํ ์ ์๊ฒ ํด์ค๋ค.
Packer๋ฅผ ์ฌ์ฉํ๋ฉด
โข
AWS, Azure, GCP, VMware, VirtualBox ๋ฑ ๋ค์ํ ํ๊ฒฝ์์ ๋์ผํ ์ค์ ์ ์ด๋ฏธ์ง๋ฅผ ์๋์ผ๋ก ๋น๋ํ ์ ์๊ณ ,
โข
๋น๋ ๊ณผ์ ์์ ์คํฌ๋ฆฝํธ๋ Ansible, Chef, Puppet ๋ฑ์ ์ด์ฉํด ํ์ํ ์ค์ ์ ๋ฏธ๋ฆฌ ์ ์ฉํ ์ ์๋ค.
์ฆ, ํ ๋ฒ์ ๋น๋ ์คํฌ๋ฆฝํธ๋ก ๊ฐ๋ฐ, ์คํ
์ด์ง, ํ๋ก๋์
ํ๊ฒฝ์ ์ผ๊ด๋๊ฒ ์ ์งํ ์ ์๋ค๋ ์ ์ด ํต์ฌ์ด๋ค.
๊ณผ๊ฑฐ์๋ Packer ์ค์ ํ์ผ๋ก JSON ํฌ๋งท์ ์ฌ์ฉํ์ง๋ง, ํ์ฌ๋ HCL2(HashiCorp Configuration Language v2)๊ฐ ํ์ค์ด๋ฉฐ JSON์ Deprecated ์ํ์ด๋ค.
JSON ํ
ํ๋ฆฟ์ด ์ฌ์ ํ ์ง์๋๊ธด ํ์ง๋ง, ์๋ก์ด ๊ธฐ๋ฅ๋ค์ JSON์ ๋ฐ๋ก ์ ์ฉ๋์ง ์์ ์ ์๋ค.
๋ฐ๋ผ์ ์๋ก์ด ํ๋ก์ ํธ์์๋ .pkr.hcl ํ์์ ํ์ผ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
JSON โ HCL2 ๋ณํ์ ๋ํ ๋ฌธ์๋ ์๋๋ฅผ ์ฐธ๊ณ ํ์:
ย Key features
์๋ํ (Automation)
โข
Packer๋ ๋จธ์ ์ด๋ฏธ์ง ์์ฑ ๊ณผ์ ์ ์์ ํ ์๋ํํ๋ค.
โข
์๋์ผ๋ก AMI๋ฅผ ๊ตฌ์ฑํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฐฐํฌ ์๋๊ฐ ๋นจ๋ผ์ง๊ณ , ํ๊ฒฝ ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์๋ค.
๋ณ๋ ฌ ๋น๋ (Parallel Builds)
โข
ํ๋์ ์ค์ ํ์ผ๋ก ์ฌ๋ฌ ํ๋ซํผ์ ์ด๋ฏธ์ง๋ฅผ ๋์์ ์์ฑํ ์ ์๋ค.
โข
์๋ฅผ ๋ค์ด, ๋์ผํ ๊ตฌ์ฑ์ AWS EC2์ GCP Compute Engine์ ๋ณ๋ ฌ๋ก ๋น๋ํ ์ ์๋ค.
์ฝ๋ ๊ธฐ๋ฐ ๊ด๋ฆฌ (Infrastructure as Code)
โข
Packer์ ์ค์ ํ์ผ์ HCL2(HashiCorp Configuration Language) ํ์์ผ๋ก ์์ฑ๋๋ค.
โข
๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋ฐ์ด๋๋ฉฐ, Git์ผ๋ก ๋ฒ์ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
โข
Terraform ๋ฑ ๋ค๋ฅธ HashiCorp ๋๊ตฌ์์ ํธํ์ฑ๋ ๋์ IaC ํ๊ฒฝ์ ๊ตฌ์ถํ๊ธฐ์ ์ ํฉํ๋ค.
ํ์ฅ์ฑ (Extensibility)
โข
Packer๋ ํ๋ฌ๊ทธ์ธ ๊ธฐ๋ฐ ์ํคํ
์ฒ๋ฅผ ๊ฐ์ง๋ค.
โข
์๋ก์ด ํ๋ซํผ, ๋น๋(Builder), ํ๋ก๋น์ ๋(Provisioner), ํฌ์คํธ ํ๋ก์ธ์(Post-Processor)๋ฅผ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์๋ค.
โข
๋ํ ์ปค๋ฎค๋ํฐ์์๋ ๋ค์ํ ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํ๊ณ ์๋ค.
๋ค๋ฅธ ๋๊ตฌ์์ ํตํฉ (Integration)
โข
Packer๋ HashiCorp ์ํ๊ณ์ ๊ฐ๋ ฅํ๊ฒ ํตํฉ๋๋ค.
โฆ
Terraform๊ณผ ์ฐ๋ํด, Packer๋ก ์์ฑํ ์ด๋ฏธ์ง๋ฅผ ์ธํ๋ผ ์ฝ๋ ๋ด์์ ์ง์ ์ฐธ์กฐํ ์ ์๋ค.
โฆ
Vault์ ํตํฉํด, ์ด๋ฏธ์ง ๋น๋ ์ ๋ฏผ๊ฐํ ์๊ฒฉ ์ฆ๋ช
์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ฃผ์
ํ ์ ์๋ค.
โข
์ด ๋๋ถ์ DevOps ํ์ดํ๋ผ์ธ ๋ด์์ CI/CD ์๋ํ์ ์ค์ํ ๊ตฌ์ฑ ์์๋ก ์์ฃผ ์ฌ์ฉ๋๋ค.
์ปค์คํฐ๋ง์ด์ง (Customization)
โข
์ด๋ฏธ์ง ๋น๋ ๊ณผ์ ์ค Shell Script, Ansible Playbook, Chef Recipe, Puppet Module ๋ฑ์ ์คํํ์ฌ
โข
์ด๋ฏธ์ง ๋ด๋ถ ํ๊ฒฝ์ ์ธ๋ฐํ๊ฒ ์กฐ์ ํ ์ ์๋ค.
โข
์๋ฅผ ๋ค์ด Jenkins, Docker, Nginx ๋ฑ์ ๋ฏธ๋ฆฌ ์ค์นํ AMI๋ฅผ ์๋์ผ๋ก ์์ฑํ ์ ์๋ค.
ย Installation
Packer๋ Homebrew๋ฅผ ํตํด ๊ฐ๋จํ ์ค์นํ ์ ์๋ค.
# 1. HashiCorp ์ ์ฅ์ ๋ฑ๋ก
brew tap hashicorp/tap
# 2. Packer ์ค์น
brew install hashicorp/tap/packer
# 3. Amazon ๊ด๋ จ ํ๋ฌ๊ทธ์ธ ์ค์น (AWS EC2 AMI ์์ฑ์ฉ)
# ์ฐธ๊ณ : plugin์ packer ์ฝ๋ ๋ด์์ ๊ด๋ฆฌํ ์ ์๊ธฐ์ ๋ฐ๋์ ์ค์นํด์ผ ํ๋ ์ฌํญ์ ์๋๋ค
packer plugins install github.com/hashicorp/amazon
Bash
๋ณต์ฌ
ย ๋ง๋ฌด๋ฆฌ
Packer๋ ๋จ์ํ ์ด๋ฏธ์ง๋ฅผ ์๋์ผ๋ก ๋ง๋๋ ๋๊ตฌ๊ฐ ์๋ ๋น๋ ์๋ํ, ํ๊ฒฝ ์ผ๊ด์ฑ, ์ธํ๋ผ ์ฝ๋ํ๋ฅผ ๋ชจ๋ ๊ตฌํํ ์ ์๋ ๊ฐ๋ ฅํ DevOps ๋๊ตฌ๋ค. Terraform๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ ์ ์๋ค.
Packer -> (AMI ์์ฑ) -> Terraform -> (EC2 Instance ๋ฐฐํฌ)
Plain Text
๋ณต์ฌ
Dev๋ถํฐ Prod๊น์ง ๋์ผํ ํ๊ฒฝ์ ์ ์งํ๊ธฐ ์ํด์ Packer๋ฅผ ๋์
ํ๋ ๊ฒ์ด ์ข๋ค.


