๐ Terraform 6์ผ์ฐจ: ์ ๋ฌธ์ ์ธ Terraform ํ๋ก์ ํธ ๊ตฌ์กฐ
Source: Dev.to
์ Terraform ํ์ผ์ ์กฐ์งํด์ผ ํ ๊น์?
์ด๋ณด์๋ ๋ชจ๋ ๊ฒ์ ํ๋์ ํ์ผ์ ๋ฃ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค:
- Providers
- Resources
- Variables
- Outputs
- Backend
- Locals
์ด๋ ์์ฃผ ์์ ํ๋ก์ ํธ์๋ง ํด๋น๋ฉ๋๋ค. ์ธํ๋ผ๊ฐ ์ฑ์ฅํจ์ ๋ฐ๋ผ ๋จ์ผ ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํต๋๋ค:
- โ ์ฝ๊ธฐ ์ด๋ ค์
- โ ์ ๋ฐ์ดํธ ์ด๋ ค์
- โ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ ์ฆ๊ฐ
- โ ํ ์์ ์ ๋ถ์ ํฉ
- โ ํ์ฅ ๋ถ๊ฐ๋ฅ
Dayโฏ6์์๋ ๋ฉํฐ ํ์ผ ์ ๊ทผ ๋ฐฉ์์ ์๊ฐํฉ๋๋ค. ์ด๋ ๋ชจ๋, ํ๊ฒฝ, ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ธํ๋ผ์ ๊ฐ์ ํฅํ ๊ฐ๋ ์ ๊ธฐ๋ฐ์ด ๋ฉ๋๋ค.
๊ถ์ฅ Terraform ํ๋ก์ ํธ ๊ตฌ์กฐ
Terraform์ ํ์ผ ์ด๋ฆ์ ๊ด๊ณ์์ด ๋ชจ๋ .tf ํ์ผ์ ์๋์ผ๋ก ๋ก๋ํฉ๋๋ค. ๊น๋ํ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
project/
โโโ main.tf # resources
โโโ variables.tf # input variables
โโโ outputs.tf # output declarations
โโโ providers.tf # provider configuration (AWS, etc.)
โโโ backend.tf # remote backend configuration
โโโ locals.tf # local reusable values
โโโ .gitignore # exclude sensitive/state files
โโโ terraform.tfvars # default variable values (optional)
ํต์ฌ ์ธ์ฌ์ดํธ
Terraform์ ํ์ผ ์์๋ ์ด๋ฆ์ ์ ๊ฒฝ ์ฐ์ง ์์ผ๋ฉฐ, ๋ด๋ถ์ ์ผ๋ก ๋ชจ๋ ๋ด์ฉ์ ๋ณํฉํฉ๋๋ค. ์์ ๊ฐ์ ๋ช
๋ช
๊ท์น์ ๊ฐ๋
์ฑ๊ณผ ํ์
์ ์ํ ๋ฒ ์คํธ ํ๋ํฐ์ค์
๋๋ค.
์ค์ต: Terraform ํ์ผ ๋ถํ
Dayโฏ6 ์ํ ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํด ๊ฐ์ฌ๋ ์ค์ ์ ์ ์ฉ ํ์ผ๋ก ์ด๋ํ๋ ๊ณผ์ ์ ๋ณด์ฌ์ฃผ์์ต๋๋ค.
backend.tf
terraform {
backend "s3" {
bucket = "my-terraform-backend"
key = "dev/terraform.tfstate"
region = "us-east-1"
}
}
providers.tf
provider "aws" {
region = var.region
}
- ์
๋ ฅ ๋ณ์ โ
variables.tf - ๋ก์ปฌ ๋ณ์ โ
locals.tf - ์ถ๋ ฅ๊ฐ โ
outputs.tf - ๋ฆฌ์์ค โ
main.tf
์ด๋ฌํ ๋ถ๋ฆฌ๋ก ํ๋ก์ ํธ๊ฐ ๊น๋ํด์ง๊ณ ์ค๋ฅ๋ฅผ ๋ ์ฝ๊ฒ ๊ฒฉ๋ฆฌํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ ๋ณด์: .gitignore ๋ง๋ค๊ธฐ
Terraform ์ํ ํ์ผ์ด๋ .terraform ๋๋ ํฐ๋ฆฌ๋ฅผ GitHub์ ์ปค๋ฐํ์ง ๋ง์ธ์.
.gitignore
.terraform/
terraform.tfstate
terraform.tfstate.backup
crash.log
*.tfvars
์?
- ์ํ ํ์ผ์๋ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ๋ค์ด ์์ต๋๋ค.
.terraformํด๋์๋ ํ๋ฌ๊ทธ์ธ ๋ฐ ๋ถํ์ํ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ฉ๋๋ค.- ๋ฐฑ์ ํ์ผ๊ณผ ํฌ๋์ ๋ก๊ทธ๋ ๋ด๋ถ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ ธ์ถ์ํฌ ์ ์์ต๋๋ค.
์ด๋ค์ ๋ฒ์ ๊ด๋ฆฌ์์ ์ ์ธํ๋ ๊ฒ์ ๋ณด์๊ณผ ๊น๋ํ ๋ ํฌ ํ์คํ ๋ฆฌ๋ฅผ ์ํด ํ์์ ๋๋ค.
์ค์ ํ๋ก์ ํธ๋ฅผ ์ํ ๊ณํ: ๊ธฐ๋ณธ์ ๋์ด
1. ํ๊ฒฝ ํด๋
environments/
โโโ dev/
โโโ stage/
โโโ prod/
๊ฐ ํ๊ฒฝ์ ์์ฒด main.tf, variables.tf, terraform.tfvars, ๊ทธ๋ฆฌ๊ณ ๋ฐฑ์๋ ๊ตฌ์ฑ์ ๊ฐ์ง ์ ์์ต๋๋ค.
2. ๋ชจ๋ ๊ธฐ๋ฐ ๊ตฌ์กฐ
modules/
โโโ networking/
โโโ compute/
โโโ security/
๋ชจ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด์ง๋ง ๋ ๊น์ ์ดํด๊ฐ ํ์ํฉ๋๋คโ์ด๋ ์ดํ ์ฑ๋ฆฐ์ง์์ ๋ค๋ฃน๋๋ค.
3. ๋จ์ผ ์ฝ๋๋ฒ ์ด์ค์ ๋ค์ค tfvars
terraform apply -var-file=dev.tfvars
terraform apply -var-file=prod.tfvars
์ด ์ ๊ทผ ๋ฐฉ์์ ์ํฐํ๋ผ์ด์ฆ ๋ฐฐํฌ์ ์ต๋ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ณด์๋ ๋ชจ๋์ ๋ฐ์ด๋ค๊ธฐ ์ ์ ํ์ผ ๋ถ๋ฆฌ๋ฅผ ์ถฉ๋ถํ ์๋ฌํด์ผ ํฉ๋๋ค.
๊ฒฐ๋ก
Dayโฏ6์ ์ ๊ฐ Terraform ํ๋ก์ ํธ๋ฅผ ๋ฐ๋ผ๋ณด๋ ๋ฐฉ์์ ๋ฐ๊พธ์ด ๋์์ต๋๋ค. ์ด์ ๋ ํ๋์ ์ง์ ๋ถํ ํ์ผ ๋์ ๋ค์์ ์ดํดํ๊ฒ ๋์์ต๋๋ค:
- ์ฌ๋ฐ๋ฅธ Terraform ์กฐ์ง ๋ฐฉ๋ฒ
- ๋ฏผ๊ฐํ ๋ฐ์ดํฐ ๋ณด์ ๋ฐฉ๋ฒ
- ๋ค์ค ํ๊ฒฝ ์ค์ ์ค๋น ๋ฐฉ๋ฒ
- ์ ๋ฌธ์ ์ด๊ณ ๋ชจ๋ํ๋ ์ธํ๋ผ๋ก ํ์ฅํ๋ ๋ฐฉ๋ฒ
์ด ๊ตฌ์กฐ๋ ์ดํ ๋ชจ๋ ์์ ์ ๊ธฐ๋ฐ์ด ๋ฉ๋๋ค.
๋ด์ผ: Terraform ํ์ ์ ์ฝ โ ๋ณ์ ๊ฒ์ฆ ๋ฐ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ๐