CloudFormation으로 EC2 인스턴스를 만들기 위한 기본 파라미터 설정

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

시작하면서

AWS CloudFormation은 우리가 AWS에서 사용하는 인프라를 코드로 정의하고 자동으로 만들어주는 서비스다.
예를 들어, EC2 인스턴스 하나를 만들려고 콘솔에서 클릭 몇 번씩 하지 않아도, CloudFormation 템플릿 파일 한 장이면 클릭 한 번으로 서버가 만들어진다.

그런데 CloudFormation으로 EC2를 만들 때는 반드시 지정해줘야 하는 값이 몇 가지 있다. 그중에서 가장 기본이 되는 값은 다음 두 가지다.

  1. 어떤 OS 이미지를 쓸지 (AMI)
  2. 어떤 키를 사용해서 서버에 접속할지 (KeyPair)

이 글에서는 위 두 가지 값을 외부에서 입력받을 수 있도록
CloudFormation 템플릿의 Parameters라는 기능을 사용하는 방법을 알아본다.


Parameters가 뭐지?

CloudFormation 템플릿에는 여러 가지 섹션이 있지만,
그중 Parameters는 템플릿 실행 시 사용자가 직접 값을 입력할 수 있게 해주는 부분이다.

예를 들어, 서버에 접속할 때 사용할 키 이름을 미리 고정해두는 게 아니라 스택을 생성할 때마다 키 이름을 입력받고 싶을 때, 이 Parameters를 사용한다.

Parameters:
  KeyName:
    Description: EC2에 접속할 때 사용할 키 이름
    Type: AWS::EC2::KeyPair::KeyName

이렇게 템플릿에 정의해두면, CloudFormation 콘솔에서 스택을 만들 때 키 이름을 선택할 수 있는 입력창이 자동으로 생긴다.


1. EC2 접속을 위한 KeyPair 설정

EC2 인스턴스는 리눅스 서버다. 이 서버에 접속하려면 SSH라는 방식을 쓰고, 이때 사용하는 것이 KeyPair(키 페어)다.

키 페어는 AWS 콘솔에서 미리 만들어놓은 다음, 인스턴스를 만들 때 함께 연결해줘야 한다.

파라미터 작성 예시

KeyName:
  Description: EC2 KeyPair
  Type: AWS::EC2::KeyPair::KeyName
  ConstraintDescription: EC2 KeyPair

설명

  • Description: 사용자에게 보여줄 설명 문구
  • Type: 입력값의 종류를 제한. AWS::EC2::KeyPair::KeyName으로 설정하면 키페어만 선택 가능
  • ConstraintDescription: 사용자가 잘못된 값을 입력했을 때 보여줄 메시지
Resources:
  MyEC2:
    Type: AWS::EC2::Instance
    Properties:
      KeyName: !Ref KeyName

여기서 !Ref KeyName은 위에서 입력받은 값을 참조해서 EC2 인스턴스에 연결해주는 역할이다.


2. 최신 AMI를 자동으로 가져오기

EC2를 만들 때는 어떤 OS 이미지를 쓸지 지정해야 한다. 이걸 AMI (Amazon Machine Image) 라고 부른다. Amazon Linux 2 같은 기본 리눅스 이미지를 쓸 수도 있고, Ubuntu나 CentOS를 선택할 수도 있다.

그런데 이 AMI ID는 리전마다 다르고, 시간이 지나면 새로운 이미지가 계속 나온다. 그래서 CloudFormation 템플릿에 직접 하드코딩하면 관리하기가 번거롭다.

해결책: SSM Parameter Store

AWS에서는 Systems Manager(SSM)라는 서비스에
항상 최신 Amazon Linux 2 AMI ID를 조회할 수 있는 경로를 제공하고 있다.
우리는 그 경로만 알고 있으면, 항상 최신 버전의 이미지를 자동으로 사용할 수 있다.

파라미터 작성 예시

LatestAmiId:
  Description: EC2 AMI
  Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
  Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'
  AllowedValues:
    - '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'

설명

  • Type: SSM에 등록된 AMI ID 값을 가져오도록 설정
  • Default: 기본으로 사용할 SSM 파라미터 경로
  • AllowedValues: 사용자가 다른 값을 입력하지 못하게 고정
Resources:
  MyEC2:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref LatestAmiId

!Ref LatestAmiId는 SSM에서 최신 AMI ID를 읽어와서 EC2 인스턴스에 넣는 역할을 한다.


전체 Parameters 예시 정리

Parameters:
  KeyName:
    Description: EC2 KeyPair
    Type: AWS::EC2::KeyPair::KeyName
    ConstraintDescription: EC2 KeyPair

  LatestAmiId:
    Description: EC2 AMI
    Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
    Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'
    AllowedValues:
      - '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'

0개의 댓글