메인 콘텐츠로 건너뛰기

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

설탕사과
설탕사과
조회수 15
요약

실수 방지: 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 인프라를 관리하세요.


출처 : One wrong apply, and poof—your infra's gone. Here's how to stop Terraform from ruining your weekend. | AWS in Plain English