AWS + Terraform 실전 베스트 프랙티스

실수 방지: prevent_destroy로 자원 삭제 막기
Terraform에서 중요한 리소스가 실수로 삭제되지 않게 하려면, 아래처럼 prevent_destroy
옵션을 설정하세요. 예를 들어 RDS, S3와 같이 삭제되면 큰일 나는 리소스에 꼭 적용해야 합니다.
lifecycle {
prevent_destroy = true
}
이렇게 하면 적용 전 한 번 더 생각할 수 있게 도와줍니다.
모든 리소스에 태그 달기
인프라에 태그를 안 달면, 나중에 누가 만들었는지 비용이 왜 발생하는지 아무도 몰라 어렵습니다. Terraform의 default_tags
를 설정해서 자동으로 태그를 붙이면 비용 추적과 관리가 쉬워져요.
provider aws {
region = ap-south-1
default_tags {
tags = {
Owner = devops
Environment = prod
}
}
}
코드 복붙 대신 모듈화하기
비슷한 코드가 여러 군데 흩어지면 유지보수가 정말 힘듭니다. main.tf, variables.tf, outputs.tf 구조로 모듈을 만들어 리소스를 재사용하세요. 마치 레고 블록처럼 한번 고치면 여러 곳에 반영됩니다.
module vpc {
source = ./modules/vpc
cidr_block = 10.0.0.0/16
}
리소스 생성 순서 명확히: depends_on 사용하기
Lambda와 EventBridge를 함께 배포할 때, 순서가 잘못되면 정상 동작하지 않을 수 있습니다. 이런 경우 depends_on
을 활용해 의존관계를 명확히 설정하세요.
resource aws_lambda_permission allow_eventbridge {
# ...
depends_on = [aws_lambda_function.my_lambda]
}
Terraform이 너무 낙관적일 때 현실로 돌아오게 해줍니다.
상태 파일은 반드시 원격 관리
로컬에서 각자 Terraform을 실행하면 서로 변경을 덮어쓰면서 장애가 발생합니다. S3 + DynamoDB로 백엔드를 구축해 중앙에서 상태 파일을 관리하세요.
backend s3 {
bucket = tfstate-prod
key = app/infrastructure.tfstate
region = us-east-1
dynamodb_table = tfstate-lock
}
이렇게 하면 사고를 예방하고, 안심하고 작업할 수 있습니다.
PR마다 terraform plan 실행 자동화
인프라 변경은 예고 없이 일어날 때가 제일 위험합니다. CI/CD 파이프라인에 terraform plan
을 필수로 설정해서, 변경 요약이 PR에 남도록 만들면 리뷰도 쉽고 사고도 줄일 수 있어요.
terraform init
terraform plan -out=tfplan
환경변수, 리전 등 매개변수화로 재활용성 높이기
지역, 환경 같은 정보를 코드에 직접 적으면 나중에 스테이지 환경을 만들거나 변경 할 때 번거롭습니다. 변수로 분리해서 유연하게 관리하세요.
variable aws_region { default = us-east-1 }
provider aws {
region = var.aws_region
}
한 번만 작성하고 여러 환경에 쉽게 적용할 수 있습니다.
비용관리: Infracost로 PR에 예상 요금 표시
작은 리소스 하나 추가했는데, 한 달 뒤 청구서를 보고 놀라는 일이 잦습니다. Infracost를 연동해 예상 비용을 미리 확인하고 예산 예측도 쉽게 할 수 있습니다.
PR에 예상 비용 표시
개발자가 자원 생성 전에 비용 고민하도록 유도
출력값(output) 적극 활용하기
배포 후 API Gateway URL, Lambda 경로 등 자주 필요한 정보를 일일이 찾는 건 비효율적입니다. output을 활용해 필요한 정보를 미리 뽑아 두세요.
output lambda_url {
value = aws_lambda_function_url.my_lambda.function_url
}
미래의 나를 위한 작은 배려입니다!
결론: 사람의 실수를 막는 실전 적용 전략
Terraform은 혼자 실수하지 않습니다. 위 방법들을 기본으로 들여놓으면, 예상치 못한 문제나 비용 폭탄도 미리 막을 수 있습니다. 더 빠르고, 차분하고, 예산까지 아껴가며 AWS 인프라를 관리하세요.