파라미터 스토어에 저장된 파라미터를 CloudFormation에서 사용하기

2022.04.28

안녕하세요, 임채정입니다.
이번 블로그에서는 파라미터 스토에서 저장된 파라미터를 활용해서 CloudFormation에 적용하는 방법에 대해서 살펴보려고 합니다.

아젠다

  1. 파라미터 생성
  2. Cfn에 적용하기
  3. Cfn 실행하기

1. 파라미터 생성

먼저 AWS Systems Manager 콘솔화면에서 [파라미터 스토어] 태그로 이동해서 파라미터를 생성합니다.

[EC2의 AMI ID]
이름: /EC2/AMI-ID
유형: 문자열
값: ami-0bcc04d20228d0cf6

2. Cfn에 적용하기

사용할 템플릿 정리

이번 블로그에서는 해당 템플릿을 사용합니다.

ec2.yaml

AWSTemplateFormatVersion: "2010-09-09"
Description: "CloudFormation Simple Template"

# ------------
# Parameters
# ------------
Parameters:
  System:
    Description: "System prefix of each resource names."
    Type: String
    Default: "System"
  Env:
    Description: "Environment"
    Type: String
    Default: "dev"
  EC2KeyName:
    Description: "EC2 key pair name"
    Default: "lim-tokyo-key"
    Type: String
  EC2InstanceType:
    Description: "EC2 instance type"
    Default: "t2.micro"
    Type: String
  AMI:
    Description: "Server AMI"
    Default: /EC2/AMI-ID
    Type: AWS::SSM::Parameter::Value<String>

# ------------
# Resources
# ------------
Resources:
  # ------------
  # EC2 Instance
  # ------------
  EC2Instance:
    Type: AWS::ec2::Instance
    Properties:
      ImageId: !Ref AMI
      InstanceType: !Ref EC2InstanceType
      KeyName: !Ref EC2KeyName
      SecurityGroupIds: 
        - !Ref SecurityGroup
      SubnetId: subnet-be55e6f6
      Tags:
        - Key: Name
          Value:
            Fn::Sub: "${System}-${Env}-ec2"

  # ------------
  # SecurityGroup
  # ------------
  SecurityGroup:
    Type: AWS::ec2::SecurityGroup
    Properties:
      GroupName:
        Fn::Sub: "${System}-${Env}-sg"
      GroupDescription:
        Fn::Sub: "${System}-${Env}-sg"
      VpcId: vpc-db8475bd
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 10.0.0.0/8
      Tags:
        - Key: Name
          Value:
            Fn::Sub: "${System}-${Env}-sg"

여기서 원래라면 다음과 같이 작성된 부분을

  AMI:
    Description: "Server AMI"
    Default: "ami-0bcc04d20228d0cf6"
    Type: String

파라미터로 대체하기 위해 다음과 같이 수정되었습니다.

  AMI:
    Description: "Server AMI"
    Default: /EC2/AMI-ID
    Type: AWS::SSM::Parameter::Value<String>

3. Cfn 실행하기

이번에는 실제로 실행해보겠습니다.
먼저 새로운 스택을 생성하기 위해 템플릿을 업로드합니다.

이 때, 파라미터를 확인하보면 AMI에 /EC2/AMI-ID가 입력되어 있습니다.

그 다음에 스택을 생성하면 다음과 같이 성공적으로 잘 만들어집니다.

[파라미터] 태그에서 확인을 해보면 해석된 값으로 파라미터의 값을 확인할 수도 있습니다.

또한, EC2 인스턴스에서 확인해봐도 파라미터 값인 AMI가 잘 입력되어 있습니다.

이렇게 Cfn 템플릿에 파라미터를 활용해서 작성해봤습니다.

본 블로그 게시글을 보시고 문의 사항이 있으신 분들은 클래스메소드코리아 (info@classmethod.kr)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !