Terraform AWS EC2 빌더

리전·AMI·인스턴스 타입·키페어·VPC·시큐리티그룹 규칙·user_data를 입력하면 즉시 사용 가능한 Terraform aws_instance + aws_security_group 코드가 생성됩니다.

1. Provider

2. EC2 인스턴스

3. 시큐리티 그룹 규칙 (Ingress)

4. user_data (선택)

5. Tags

6. 생성된 .tf 코드

Terraform AWS EC2 코드 작성 가이드

Terraform은 HCL(HashiCorp Configuration Language)로 인프라를 코드로 관리하는 IaC 도구입니다. AWS Provider는 EC2를 비롯한 거의 모든 AWS 리소스를 다루는 가장 큰 모듈로, 본 빌더는 그중 가장 자주 쓰이는 aws_instance와 짝이 되는 aws_security_group을 폼으로 받아 생성합니다.

핵심 리소스 구조

AMI 찾기

AMI는 리전별로 다릅니다. AWS 콘솔의 EC2 → AMIs 또는 data "aws_ami" 데이터 소스를 사용해 최신 AMI를 자동으로 가져올 수 있습니다. 본 빌더는 서울 리전의 Amazon Linux 2023 예시를 기본값으로 넣지만, 실제 사용 시에는 사용할 리전의 최신 AMI ID로 교체하세요.

user_data 활용

user_data는 인스턴스 첫 부팅 시 한 번만 실행됩니다. cloud-init 형식 또는 bash 스크립트를 넣을 수 있으며, Terraform이 자동으로 Base64 인코딩해 전송합니다. 본 빌더는 평문을 입력받아 HEREDOC(<<-EOF) 형태로 출력합니다.

적용 명령

자주 묻는 질문 (FAQ)

Q. count 대신 for_each를 쓰려면?

A. 인스턴스마다 이름·태그가 달라야 한다면 for_each + map을 권장합니다. 본 빌더는 동일 스펙 다수를 만드는 단순한 경우에 count를 사용합니다.

Q. 시크릿(액세스 키)는 어디에 두나요?

A. 코드에 절대 직접 쓰지 말고 ~/.aws/credentials·IAM 역할·환경변수(AWS_ACCESS_KEY_ID)·AWS SSO 중 하나를 사용합니다. terraform.tfvars는 git에 커밋하지 않습니다.

Q. 상태 파일(tfstate)은 로컬에 둬도 되나요?

A. 팀이라면 안 됩니다. S3 + DynamoDB로 remote backend를 구성해 잠금(lock)과 공유를 확보하세요.