Terraform 구축 첫 apply까지 반드시 피해야 할 함정 12가지

테라폼 구축, 왜 첫 단추가 중요할까
인프라를 코드로 관리하는 IaC(Infrastructure as Code) 시대에 테라폼은 선택이 아닌 필수입니다. 하지만 테라폼 설치 후 첫 apply를 실행하기까지 초보자들이 마주하는 벽은 높습니다. 단순히 명령어를 입력하는 것을 넘어, 클라우드 환경과 코드 간의 상호작용을 이해하지 못하면 예기치 못한 에러와 비용 발생에 직면하게 됩니다. 본 가이드에서는 초보자가 반드시 알아야 할 12가지 함정을 짚어보고, AWS S3와 EC2를 안전하게 배포하는 전략을 제시합니다.
테라폼 설치와 초기 설정의 함정
1. 버전 관리의 부재
테라폼은 버전마다 문법이 달라질 수 있습니다. terraform.tf 파일에 required_providers를 명시하지 않으면, 협업 시 버전 차이로 인해 인프라가 꼬이는 현상이 발생합니다. 항상 명확한 버전을 고정해야 합니다.
2. AWS 자격 증명(Credential)의 하드코딩
가장 위험한 실수입니다. access_key와 secret_key를 코드에 직접 적는 것은 보안 사고의 지름길입니다. 환경 변수나 AWS CLI 프로필을 활용하여 자격 증명을 분리하는 습관을 들여야 합니다.
3. 상태 파일(tfstate)을 로컬에 방치
테라폼은 인프라 상태를 terraform.tfstate 파일에 저장합니다. 이를 로컬에만 두면 팀원과 공유할 수 없으며 데이터 유실 시 복구가 불가능합니다. 초기부터 S3와 DynamoDB를 활용한 원격 백엔드 설정을 강력히 권장합니다.
리소스 정의와 배포 단계의 함정
4. AWS S3 버킷 이름의 중복
S3 버킷 이름은 전 세계에서 유니크해야 합니다. 코드상으로 완벽해도 이름이 중복되면 배포가 실패합니다. 고유한 접두사나 접미사를 붙이는 정책을 세우는 것이 좋습니다.
5. EC2 인프라 간 종속성 무시
EC2를 생성할 때 보안 그룹이나 서브넷이 먼저 준비되어야 합니다. 리소스 간 의존성을 고려하지 않고 순서 없이 코드를 작성하면 에러가 발생합니다. depends_on 옵션을 적절히 사용하거나 테라폼의 암묵적 종속성 그래프를 활용하세요.
6. 리전(Region) 지정 누락
기본 설정에 의존하다 보면 의도치 않은 리전에 인프라가 생성됩니다. provider "aws" 블록에서 반드시 리전을 명시하여 리소스가 정확한 위치에 배포되도록 해야 합니다.
provider "aws" {
region = "np-northeast-2" # np가 아닌 ap로 오타 잘 확인해야함.
}
실무 운영을 위한 데이터 관리 및 검증 함정
7. 변수(Variables) 미사용
모든 값을 리소스 블록 안에 직접 넣으면 수정이 어렵습니다. 재사용 가능한 코드를 위해 variables.tf를 분리하고 환경별로 tfvars 파일을 관리하는 체계를 구축해야 합니다.
8. 계획(Plan) 명령어 생략
terraform apply를 바로 실행하는 것은 위험합니다. 변경 사항을 미리 확인하는 terraform plan을 통해 어떤 리소스가 삭제되거나 수정되는지 반드시 검토해야 합니다.
9. 리소스 삭제 방지 정책 누락
테라폼은 삭제 명령을 내리면 즉시 리소스를 제거합니다. 중요한 데이터베이스나 S3 버킷에는 lifecycle 블록 내 prevent_destroy = true 옵션을 추가하여 실수로 인한 삭제를 방지합니다.
10. 태깅(Tagging) 전략 부재
인프라가 커지면 관리의 핵심은 태깅입니다. 프로젝트명, 환경(Dev/Prod), 담당자 등을 태그로 남기지 않으면 추후 비용 추적과 리소스 파악이 불가능해집니다.
고급 최적화와 유지보수 함정
11. 모듈화의 과도한 적용
초반부터 너무 복잡하게 모듈을 쪼개면 디버깅이 어렵습니다. 처음에는 단일 파일에서 시작해 리소스가 늘어남에 따라 점진적으로 모듈화하는 것이 효율적입니다.
12. 출력값(Outputs) 활용 미흡
배포된 EC2의 IP 주소나 S3 엔드포인트를 확인하기 위해 AWS 콘솔에 들어가는 것은 비효율적입니다. outputs.tf를 통해 필요한 정보를 콘솔에 바로 출력되도록 구성합니다.
결론 및 실천 가이드
테라폼은 단순히 인프라를 만드는 도구가 아니라, 인프라의 생명주기를 관리하는 강력한 엔진입니다. 위의 12가지 함정을 피하는 것만으로도 여러분의 첫 번째 배포는 훨씬 안정적일 것입니다.
우선, AWS CLI를 통해 자격 증명을 설정하세요.
S3 백엔드를 구성하여 상태 파일을 안전하게 보관하세요
아주 작은 리소스(예: S3 버킷)부터
plan과apply를 반복하며 테라폼의 동작 방식을 알아 가봅니다.
태그: 테라폼, Terraform, AWS, 인프라자동화, IaC, 클라우드인프라, 테라폼입문
LINKS: Terraform 공식 문서, AWS 제공 Terraform 가이드