AWS CloudFormation 템플릿으로 인프라 자동화하기

AWS CloudFormation 템플릿으로 인프라 자동화하기

클라우드 환경에서 수동으로 서버, 네트워크, 보안 설정을 일일이 구성하는 것은 시간이 많이 들고 오류 발생 가능성도 높습니다. 이를 해결하기 위해 AWS에서는 CloudFormation이라는 인프라 자동화 도구를 제공합니다. CloudFormation은 코드 형태의 템플릿을 통해 인프라를 정의하고 자동으로 배포할 수 있어, 인프라의 버전 관리, 일관성, 재현성을 모두 확보할 수 있습니다. 이번 포스팅에서는 AWS CloudFormation 템플릿으로 인프라 자동화하기라는 주제로 개념부터 실전 예제까지 상세히 설명합니다.


✅ AWS CloudFormation이란?

AWS CloudFormation은 YAML 또는 JSON 형식의 템플릿 파일을 사용하여 AWS 리소스를 정의하고 자동으로 프로비저닝하는 서비스입니다. ‘인프라를 코드로(Infrastructure as Code, IaC)’ 구현할 수 있도록 도와주는 핵심 도구로, DevOps 환경에서 빠질 수 없는 구성 요소입니다.

  • 한 번의 템플릿 실행으로 서버, DB, 네트워크, 보안 설정 등을 자동 생성
  • 스택(Stack) 단위로 리소스를 그룹화하여 관리 및 삭제 가능
  • 인프라 구성 변경 시에도 수동 작업 없이 템플릿만 수정하여 자동 반영

✅ CloudFormation의 구성 요소

구성 요소설명
템플릿(Template)리소스를 정의한 코드 (YAML/JSON)
스택(Stack)템플릿을 실행해 생성된 리소스 집합
리소스(Resources)EC2, S3, RDS 등 실제 AWS 서비스
매개변수(Parameters)템플릿 실행 시 사용자 입력값 받기
출력값(Outputs)생성된 리소스의 정보 출력 (예: IP 주소)
조건(Conditions)특정 조건일 때만 리소스 생성
매핑(Mappings)리전별 값, 인스턴스 설정 등의 정적 데이터

✅ CloudFormation 템플릿 기본 구조

AWSTemplateFormatVersion: '2010-09-09'
Description: 간단한 EC2 인스턴스 생성 템플릿

Parameters:
  KeyName:
    Type: String
    Description: EC2에 접속할 키페어 이름

Resources:
  MyEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      ImageId: ami-0c55b159cbfafe1f0  # Amazon Linux 2
      KeyName: !Ref KeyName
      Tags:
        - Key: Name
          Value: SampleInstance

Outputs:
  InstanceId:
    Description: 생성된 인스턴스 ID
    Value: !Ref MyEC2Instance

이 템플릿을 실행하면, EC2 인스턴스를 자동으로 생성하고 해당 인스턴스의 ID를 출력합니다.


✅ CloudFormation 템플릿 실행 방법

📍 AWS 콘솔에서 실행

  1. CloudFormation > Stack > Create Stack 클릭
  2. 템플릿 업로드 (로컬 파일 또는 S3)
  3. 스택 이름 및 파라미터 입력
  4. 리소스 검토 후 ‘생성’ 클릭

📍 AWS CLI에서 실행

aws cloudformation create-stack \
  --stack-name my-sample-stack \
  --template-body file://ec2-template.yaml \
  --parameters ParameterKey=KeyName,ParameterValue=my-key-pair
  • 실행 상태는 aws cloudformation describe-stacks 명령으로 확인 가능

✅ 실전 예제: EC2 + 보안 그룹 + S3를 자동으로 구성

AWSTemplateFormatVersion: '2010-09-09'
Description: EC2 + S3 + 보안 그룹 생성 템플릿

Resources:
  MyS3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub 'my-sample-bucket-${AWS::Region}-${AWS::AccountId}'

  MySecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow SSH
      VpcId: vpc-xxxxxxxx
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0

  MyEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t3.micro
      ImageId: ami-0c55b159cbfafe1f0
      KeyName: my-key
      SecurityGroupIds:
        - !Ref MySecurityGroup
      Tags:
        - Key: Name
          Value: CloudFormationAutoInstance

✅ 변경 관리: 스택 업데이트 & 삭제

  • 템플릿 변경 시 update-stack 명령어 또는 콘솔에서 업데이트 수행
  • 리소스를 한 번에 정리할 땐 delete-stack 명령으로 관련 리소스 전체 제거 가능
aws cloudformation update-stack \
  --stack-name my-sample-stack \
  --template-body file://updated-template.yaml

aws cloudformation delete-stack \
  --stack-name my-sample-stack

✅ Q&A

Q. CloudFormation 템플릿은 어떤 언어로 작성해야 하나요?
YAML 또는 JSON 형식으로 작성할 수 있으며, YAML이 가독성이 높아 더 많이 사용됩니다. AWS 공식 문서에서는 YAML 예시를 중심으로 템플릿 구문을 설명하고 있습니다.


Q. 템플릿에 조건문이나 반복문도 쓸 수 있나요?
CloudFormation 자체에서는 반복문이 없지만, **조건문(Conditions)**과 매핑(Mappings) 기능을 통해 구성 요소를 동적으로 제어할 수 있습니다.
복잡한 반복 구성이 필요한 경우엔 AWS CDK 또는 Terraform과 같은 IaC 도구를 사용하는 것이 더 적합합니다.


Q. 템플릿 버전 관리도 가능한가요?
네, 템플릿 파일은 코드이기 때문에 Git과 같은 버전 관리 시스템에 저장 가능합니다. 이를 통해 팀원 간 협업과 롤백도 편리하게 처리할 수 있습니다. CI/CD 파이프라인에서 템플릿 배포를 자동화할 수도 있습니다.


✅ 요약 정리

항목설명
목적인프라를 코드로 정의하고 자동화
언어YAML / JSON
구성Parameters, Resources, Outputs 등
자동화 범위EC2, RDS, S3, VPC, IAM 등 AWS 대부분 리소스
관리 방식Stack 단위로 전체 구성 추적 및 롤백 가능
활용 사례배포 자동화, 테스트 환경 구성, 반복 작업 제거

결론

AWS CloudFormation 템플릿으로 인프라 자동화하기는 개발과 운영의 경계를 허무는 DevOps의 핵심 실천법입니다. 코드로 인프라를 정의하면 일관성 있는 환경 구성, 신속한 배포, 자동화된 복구 및 확장이 가능해집니다. AWS를 본격적으로 활용하려는 팀이라면, CloudFormation을 꼭 익혀두는 것이 장기적으로 큰 자산이 될 것입니다.