CloudFormation Parameters에 대해

CloudFormation Parameters에 대해 정리해 봤습니다.
2022.01.09

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 CloudFormation Parameters에 대해 정리해 봤습니다.

Parameters란?

Parameters는 스택을 생성할 때, 사용자 지정 값을 넘겨줄 파라미터를 의미합니다. 사용 방법으로는 템플릿 내부에서 Ref 내장 함수를 사용하거나, OutPuts로 다른 템플릿과 연결하는 것 또한 가능합니다.

사용법은?

Parameters:
  AZpublic:
    Description: AvailabilityZone for public
    Type: AWS::EC2::AvailabilityZone::Name

  VPCCidr:
    Description: Cidr Block for VPC
    Type: String
    Default: 10.0.0.0/16

다음과 같은 형태로 사용할 수 있습니다.

먼저「AZpublic」이라는 이름으로 CloudFormation 내에서 사용할 파라미터 이름을 지정합니다. 「Description」에는 파라미터의 설명을 의미합니다. Type은 파라미터의 데이터 유형(Data Type)입니다.

  • String
  • Number
  • List<Number>
  • CommaDelimitedList
  • AWS 특정 파라미터 유형
  • SSM 파라미터 유형

Type은 6가지로 나뉘어 집니다. 위 코드에서 사용한「Type: AWS::EC2::AvailabilityZone::Name」은 AWS 특정 파라미터 유형에 속합니다. 그외에「Default」를 통해 디폴트 값을 입력할 수도 있습니다

Parameters:
  AZpublic:
    Description: AvailabilityZone for public
    Type: AWS::EC2::AvailabilityZone::Name
  AZprivate:
    Description: AvailabilityZone for private
    Type: AWS::EC2::AvailabilityZone::Name

  VPCCidr:
    Description: Cidr Block for VPC
    Type: String
    Default: 10.0.0.0/16
  PublicSubnetCidr:
    Description: Cidr Block for Public Subnet
    Type: String
    Default: 10.0.0.0/24
  PrivateSubnetCidr:
    Description: Cidr Block for Private Subnet
    Type: String
    Default: 10.0.10.0/24

String과 AWS 특정 파라미터 유형으로 스택을 생성해 보면

다음과 같이 파라미터를 입력할 수 있습니다.

Ref 내장함수 사용

Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Ref VPCCidr
      EnableDnsHostnames: true
      Tags:
        - Key: Name
          Value: myVPC

Ref 내장 함수는「!Ref」로 사용할 수 있습니다. 예를 들어 위 코드 처럼 스택에서 10.0.0.0/16이라는 문자열 값을 VPCCidr에 담고, CidrBlock에서 참조할 수 있습니다.

좀 더 나아가서, Lambda, StepFunctions에서 특정 값을 변경 시키고자 할 때는「!Sub」와 함께 사용할 수 있습니다.

Name: !Sub
  - www.${Domain}
  - { Domain: !Ref RootDomainName }

내장 함수 !Sub의 경우 입력 문자열의 변수를 지정한 값으로 바꿀 수 있습니다. 위 코드 처럼「${Domain}」형태로 값을 바꿀 변수를 지정해 주고, 「Domain: !Ref RootDomainName」형태로 파라미터로 입력 받은 값을「${Domain}」변수에 넣을 수 있습니다.

DefinitionString:
       !Sub
          - |-
            {
              "Comment": "A description of my state machine",
              "StartAt": "PutLoggingConfiguration",
              "States": {
                "PutLoggingConfiguration": {
                  "Type": "Task",
                  "End": true,
                  "Parameters": {
                    "LoggingConfiguration": {
                      "LogDestinationConfigs": [
                        "arn:aws:s3:::${SetS3BucketName}"
                      ],
                      "ResourceArn.$": "$.aRN"
                    }
                    },
                  "Resource": "arn:aws:states:::aws-sdk:wafv2:putLoggingConfiguration"
                }
              }
            }
          - {
            SetS3BucketName: !Ref S3BucketName
            }

StepFunctions에서는 다음과 같이 사용할 수 있습니다.

지원되는 AWS 특정 파라미터 유형

AWS CloudFormation에서는 다음과 같은 AWS 특정 유형을 지원합니다.

  • AWS::EC2::AvailabilityZone::Name 가용 영역(예: us-west-2a).
  • AWS::EC2::Image::Id Amazon EC2 이미지 ID(예: ami-0ff8a91507f77f867). AWS CloudFormation 콘솔은 이 파라미터 유형에 대해 드롭다운 값 목록을 표시하지 않습니다.
  • AWS::EC2::Instance::Id Amazon EC2 인스턴스 ID(예: i-1e731a32).
  • AWS::EC2::KeyPair::KeyName Amazon EC2 키 페어 이름.
  • AWS::EC2::SecurityGroup::GroupName EC2-Classic 또는 기본 VPC 보안 그룹 이름(예: my-sg-abc).
  • AWS::EC2::SecurityGroup::Id 보안 그룹 ID(예: sg-a123fd85).
  • AWS::EC2::Subnet::Id 서브넷 ID(예: subnet-123a351e).
  • AWS::EC2::Volume::Id Amazon EBS 볼륨 ID(예: vol-3cdd3f56).
  • AWS::EC2::VPC::Id VPC ID(예: vpc-a123baa3).
  • AWS::Route53::HostedZone::Id Amazon Route 53 호스팅 영역 ID(예: Z23YXV4OVPL04A).
  • List<AWS::EC2::AvailabilityZone::Name> 리전 가용 영역 어레이(예: us-west-2a, us-west-2b).
  • List<AWS::EC2::Image::Id> Amazon EC2 이미지 ID 어레이(예: ami-0ff8a91507f77f867, ami-0a584ac55a7631c0c). AWS CloudFormation 콘솔은 이 파라미터 유형에 대해 드롭다운 값 목록을 표시하지 않습니다.
  • List<AWS::EC2::Instance::Id> Amazon EC2 인스턴스 ID 어레이(예: i-1e731a32, i-1e731a34).
  • List<AWS::EC2::SecurityGroup::GroupName> EC2-Classic 또는 기본 VPC 보안 그룹 이름 어레이(예: my-sg-abc, my-sg-def).
  • List<AWS::EC2::SecurityGroup::Id> 보안 그룹 ID 어레이(예: sg-a123fd85, sg-b456fd85).
  • List<AWS::EC2::Subnet::Id> 서브넷 ID 어레이(예: subnet-123a351e, subnet-456b351e).
  • List<AWS::EC2::Volume::Id> Amazon EBS 볼륨 ID 어레이(예: vol-3cdd3f56, vol-4cdd3f56).
  • List<AWS::EC2::VPC::Id> VPC ID 어레이(예: vpc-a123baa3, vpc-b456baa3).
  • List<AWS::Route53::HostedZone::Id> Amazon Route 53 호스팅 영역 ID 어레이(예: Z23YXV4OVPL04A, Z23YXV4OVPL04B).

참고