Terraform ๊ฐ๋
1. Terraform์ธ ๋ญ๊ฐ
Terraform์ HashiCorp์์ ๋ง๋ Infrastructure as Code(IaC) ๋๊ตฌ๋ก, ํด๋ผ์ฐ๋๋ ์จํ๋ ๋ฏธ์ค ์ธํ๋ผ๋ฅผ ์ฝ๋๋ก ์ ์ธํ์ฌ ์๋์ผ๋ก ํ๋ก๋น์ ๋•๊ด๋ฆฌํ ์ ์๊ฒ ํด์ค๋๋ค.
- ์ ์ธ์ (Declarative) ๊ตฌ์ฑ
- ์ฌ์ฉ์๋ "์ด๋ค(What)" ๋ฆฌ์์ค๋ฅผ ๋ง๋ค์ง HCL(HashiCorp Configuration Language) ๋๋ JSON์ผ๋ก ์ ์๋ง ํ๋ฉด, Terraform์ด "์ด๋ป๊ฒ(How)" ๋ง๋๋์ง๋ ๋ด๋ถ ๋ก์ง(plan/apply)์ ํตํด ์ฒ๋ฆฌํฉ๋๋ค.
- ๋ฉํฐ ํด๋ผ์ฐ๋•๋ฉํฐ ์๋น์ค ์ง์
- AWS•GCP•Azure ๊ฐ์ ์ฃผ์ ํผ๋ธ๋ฆญ ํด๋ผ์ฐ๋๋ ๋ฌผ๋ก , Kubernetes, Datadog, Cloudflare, SaaS ์๋น์ค์ ์ด๋ฅด๊ธฐ๊น์ง ์๋ฐฑ์ฌ ๊ฐ ํ๋ก๋ฐ์ด๋(provider)๋ฅผ ํ๋ฌ๊ทธ์ธ ๋ฐฉ์์ผ๋ก ์ ๊ณตํฉ๋๋ค.
- ๋ณ๊ฒฝ ๊ณํ(Plan)•์คํ(Apply)
- terraform init
- ํ์ฌ ๋๋ ํฐ๋ฆฌ๋ฅผ Terraform ์์ ๊ณต๊ฐ์ผ๋ก ์ด๊ธฐํํ๊ณ , ํ์ํ ํ๋ก๋ฐ์ด๋ ํ๋ฌ๊ทธ์ธ์ ๋ด๋ ค๋ฐ์ต๋๋ค.
- terraform plan
- ์ ์ธ๋ ๊ตฌ์ฑ๊ณผ ์ค์ ์ํ(State)๋ฅผ ๋น๊ตํด ์ด๋ค ๋ฆฌ์์ค๋ฅผ ์ถ๊ฐ•์์ •์ญ์ ํ ์ง ์์ธก(plan)์ ์ถ๋ ฅํฉ๋๋ค.
- terraform apply
- ์์์ ์์ฑ๋ ๊ณํ(plan)์ ์ค์ ๋ก ์คํํด ์ธํ๋ผ๋ฅผ ํ๋ก๋น์ ๋•์ ๋ฐ์ดํธํฉ๋๋ค.
- terraform init
- ์ํ ๊ด๋ฆฌ(State)
- terraform.tfstate ํ์ผ์ ํ์ฌ ์ธํ๋ผ ์ํ๋ฅผ ๊ธฐ๋กํ์ฌ, ์ดํ ๋ณ๊ฒฝ ์ ์ด๋ค ๋ถ๋ถ์ด ๋ฐ๋์ด์ผ ํ๋์ง ๊ณ์ฐํฉ๋๋ค. ์๊ฒฉ ๋ฒก์๋(S3, Terraform Cloud ๋ฑ)์ ์ ์ฅํ๋ฉด ํ ๋จ์ ํ์ ๊ณผ ์ ๊ธ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๋ชจ๋(Module)
- ์์ฃผ ์ฐ๋ ๋ฆฌ์์ค ๋ฌถ์์ ๋ชจ๋๋ก ์ ์ํด ์ฌ์์ฉ์ฑ๊ณผ ์ผ๊ด์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ๊ฐ๋จํ VPC ๊ตฌ์ฑ๋ถํฐ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์คํ๊น์ง, ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํํ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅํฉ๋๋ค.
2. ์ํฌํ๋ก์ฐ ์์
1. ๊ธฐ๋ณธ
# 1. ์ด๊ธฐํ
terraform init
# 2. ๋ณ๊ฒฝ ๋ด์ญ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
terraform plan -out=tplan
# 3. ์ ์ฉ
terraform apply tfplan
# 4. ์ ๋ฆฌ (๋ฆฌ์์ค ์ญ์ )
terraform destroy
2. ์์ฉ
# ์ต์ด Init (ํ๋กํ์ด๋•๋ชจ๋ ์ค์น)
terraform init
# ๋์ค์ ํ๋ก๋ฐ์ด๋๋ ๋ชจ๋์ด ์
๋ฐ์ดํธ๋์์ ๋
terraform init -upgrade
# ์ ์ฅํด ๋ ๊ณํ์ ๋ฐ๋ผ ์ธํ๋ผ๋ฅผ ์ค์ ๋ก ๋ณ๊ฒฝ(ํ๋ก๋น์ ๋/์
๋ฐ์ดํธ)ํฉ๋๋ค.
terraform apply -auto-approve -var-file=terraform.tfvars
# ํด๋น ๊ณผ์ ์ ์๋ฌต์ ์ผ๋ก Plan -> Apply ํ๋ฆ์ ๊ฐ์ง๋ค.
# ์๋ฌต์ Plan ์คํ
# apply ์ปค๋งจ๋๋ฅผ ์คํํ ๋ -out ํ๋๊ทธ ์์ด Plan ๋จ๊ณ๋ฅผ ํจ๊ป ์ํํฉ๋๋ค. -> ๋ฐ๋ก tfplan ํ์ผ์ ์ ์ฅํด ๋์ง ์์
# ์ด๋ ์์ฑ๋ "๊ณํ(plan)"์ ๋์คํฌ์ ํ์ผ๋ก ์ ์ฅ๋์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ ์์๋ง ๋ณด๊ด๋ฉ๋๋ค.
# ์๋ ์น์ธ & ์ ์ฉ
# ๊ณง๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ ์์ Plan์ -auto-approve ์ต์
์ผ๋ก ์น์ธํด ์ค์ ๋ฆฌ์์ค ๋ณ๊ฒฝ์ ์ํํฉ๋๋ค.
# terraform apply -auto-approve ๋ ์๋ฌต์ plan ํ ๊ณง๋ฐ๋ก ์คํํ๋ผ๋ ์๋ฏธ์ด๋ฉฐ, ์ค๊ฐ์ ์ฌ์ฉ์ ์
๋ ฅ์ ์๋ตํฉ๋๋ค.
# tfplan์ ์ฌ์ฉํ๋ค๋ฉด
# 1. plan & ์ ์ฅ
terraform plan -out=tfplan -var-file="terraform.tfvars"
# 2. Apply & ์๋ ์น์ธ
terraform apply -auto-approve tfplan
# tflan ํ์ผ์ ์ฐ๋ ์ด์ ๋ ๋ ๊ฐ์ง๊ฐ ์๋ค.
# ์์ ์ฑ ํ๋ณด : -out=tfplan ์ผ๋ก ๊ณํ์ ํ์ผ๋ก ์ ์ฅํด ๋๋ฉด, ์์ ๋ terraform show tfplan ์ผ๋ก ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ค์ ํ์ธํ ์ ์๋ค.
# ํ๋ก์ธ์ค ๋ถ๋ฆฌ : ํ ๋ฆฌ๋ทฐ ํ๋ก์ธ์ค, CI ๋จ๊ณ ๋ถ๋ฆฌ(Plan ๋จ๊ณ -> ์ฌ๋ ์น์ธ -> Apply ๋จ๊ณ) ๋ฑ์ ์ ๋ฆฌํฉ๋๋ค.
3. ์ฃผ์ ์ฅ์
- ๋ฒ์ ๊ด๋ฆฌ : ์ธํ๋ผ ๊ตฌ์ฑ ํ์ผ์ Git ๋ฑ์ผ๋ก ๊ด๋ฆฌํด ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ถ์
- ์๋ํ•์ผ๊ด์ฑ : ์ฌ๋ ์์ผ๋ก ํ๋ ๋ณต์กํ ์ค์ ์ ์ฝ๋ํํด ์ค์ ๊ฐ์
- ํ์ : ์๊ฒฉ ์ํ ๊ด๋ฆฌ•์ ๊ธ ๊ธฐ๋ฅ์ผ๋ก ์ฌ๋ฌ ๋ช ์ด ๋์์ ์์ ๊ฐ๋ฅ
- ํ์ฅ์ฑ : ํ๋ก๋ฐ์ด๋•๋ชจ๋์ ํตํด ๋ค์ํ ์๋น์ค์ ์์ฝ๊ฒ ์ ์ฉ
'DevSecOps > ํด๋ผ์ฐ๋(Cloud)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Terraform ๊ตฌ์ฑ ์์ (0) | 2025.05.31 |
---|---|
Zero Trust ๋? (1) | 2025.05.29 |
Okta ๋? (3) | 2025.05.29 |
Cloudflare ์ด๋? (1) | 2025.05.29 |
CNAPP ๋? (0) | 2025.05.29 |
๋๊ธ