CloudFormation 템플릿 구조

y001·2025년 3월 29일
0
post-thumbnail

시작하면서

CloudFormation은 AWS 리소스를 코드로 선언하고 자동으로 배포할 수 있는 강력한 도구다.
하지만 처음 시작할 때는 템플릿의 구조가 다소 낯설게 느껴질 수 있다. 이 글에서는 CloudFormation 템플릿이 어떻게 구성되어 있고, 각 섹션이 어떤 역할을 하는지 큰 틀에서 전체 구조를 설명한다.


CloudFormation 템플릿 구성

AWSTemplateFormatVersion: '2010-09-09'
Description: 템플릿에 대한 간단한 설명

Parameters:        # 사용자 입력값
Mappings:          # 정적 값 매핑 (리전, AMI 등)
Conditions:        # 조건부 리소스 생성
Resources:         # 실제 생성할 AWS 리소스, 필수값
Outputs:           # 결과 출력 (ex. 퍼블릭 IP)

각 섹션 설명

1. AWSTemplateFormatVersion (선택)

AWSTemplateFormatVersion: '2010-09-09'
  • CloudFormation 템플릿의 버전을 지정
  • 현재까지도 대부분 '2010-09-09'로 고정
  • 없어도 무방하지만 선언해두면 명시적임

2. Description (선택)

Description: 이 템플릿은 EC2 인스턴스를 생성합니다.
  • 템플릿에 대한 간단한 설명
  • CloudFormation 콘솔에서 스택 생성할 때 상단에 표시됨

3. Parameters (선택)

Parameters:
  KeyName:
    Type: AWS::EC2::KeyPair::KeyName
    Description: EC2 인스턴스에 사용할 키 이름
  • 템플릿 실행 시 사용자 입력을 받을 수 있도록 하는 섹션
  • 예: 어떤 KeyPair로 접속할지, 어떤 AMI를 쓸지
  • 입력값을 받아서 템플릿 내부에서 !Ref로 사용 가능

4. Mappings (선택)

Mappings:
  RegionMap:
    ap-northeast-2:
      AMI: ami-0abcdef1234567890
    us-east-1:
      AMI: ami-0123456789abcdef0
  • 리전별, 조건별로 값을 정적으로 매핑할 수 있는 섹션
  • 조건문 없이 간단하게 값 매핑이 가능

5. Conditions (선택)

Conditions:
  IsProd: !Equals [ !Ref EnvType, prod ]
  • 특정 조건이 참일 때만 리소스를 생성하거나 속성을 적용할 수 있음
  • 예: EnvType이 prod일 때만 특정 알람이나 S3 버전 관리 기능을 적용하고 싶을 때

6. Resources (필수)

Resources:
  MyInstance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t3.micro
      ImageId: ami-0abcdef1234567890
      KeyName: !Ref KeyName
  • CloudFormation에서 실제로 생성되는 AWS 리소스들을 정의하는 핵심 섹션
  • EC2, S3, VPC, IAM 등 대부분의 리소스는 여기서 정의됨
  • 이 섹션은 필수, 없으면 템플릿 자체가 무효

7. Outputs (선택)

Outputs:
  InstancePublicIP:
    Description: EC2 인스턴스의 퍼블릭 IP
    Value: !GetAtt MyInstance.PublicIp
  • 스택이 생성된 후 사용자에게 보여줄 값을 지정
  • 예: EC2의 퍼블릭 IP, VPC ID, IAM Role ARN 등
  • 다른 스택에서 ImportValue로 참조도 가능

전체 구조 요약

AWSTemplateFormatVersion: '2010-09-09'
Description: 간단한 설명

Parameters:    # 사용자 입력값 정의
Mappings:      # 리전별/조건별 값
Conditions:    # 조건문 처리
Resources:     # 실제 리소스 정의 (필수)
Outputs:       # 결과 출력

0개의 댓글