일반 템플릿 코드 조각 - AWS CloudFormation

일반 템플릿 코드 조각

다음은 AWS 서비스에 특정하지 않은 여러 CloudFormation 템플릿의 특징을 보여주는 예제입니다.

Base64로 인코딩된 UserData 속성

이 예제는 Fn::Base64Fn::Join 함수를 사용하여 UserData 속성의 조합을 보여줍니다. 참조 MyValueMyName은 템플릿의 Parameters 섹션에 정의되어야 하는 파라미터입니다. 리터럴 문자열 Hello World는 이 예제에서 UserData의 일부로 전달하는 또 다른 값입니다.

JSON

"UserData" : { "Fn::Base64" : { "Fn::Join" : [ ",", [ { "Ref" : "MyValue" }, { "Ref" : "MyName" }, "Hello World" ] ] } }

YAML

UserData: Fn::Base64: !Sub | Ref: MyValue Ref: MyName Hello World

AccessKey 및 SecretKey가 있는 Base64로 인코딩된 UserData 속성

이 예제는 Fn::Base64Fn::Join 함수를 사용하여 UserData 속성의 조합을 보여줍니다. 여기에는 AccessKeySecretKey 정보가 포함됩니다. 참조 AccessKeySecretKey는 템플릿의 파라미터 섹션에 정의되어야 하는 파라미터입니다.

JSON

"UserData" : { "Fn::Base64" : { "Fn::Join" : [ "", [ "ACCESS_KEY=", { "Ref" : "AccessKey" }, "SECRET_KEY=", { "Ref" : "SecretKey" } ] ] } }

YAML

UserData: Fn::Base64: !Sub | ACCESS_KEY=${AccessKey} SECRET_KEY=${SecretKey}

리터럴 문자열 파라미터가 하나 있는 Parameters 섹션

다음 예제에서는 String 유형 파라미터 하나가 선언된 유효한 파라미터 섹션 선언을 보여줍니다.

JSON

"Parameters" : { "UserName" : { "Type" : "String", "Default" : "nonadmin", "Description" : "Assume a vanilla user if no command-line spec provided" } }

YAML

Parameters: UserName: Type: String Default: nonadmin Description: Assume a vanilla user if no command-line spec provided

정규식 제약 조건이 포함된 문자열 파라미터가 있는 Parameters 섹션

다음 예제에서는 String 유형 파라미터 하나가 선언된 유효한 파라미터 섹션 선언을 보여줍니다. AdminUserAccount 파라미터의 기본값은 admin입니다. 이 파라미터 값은 최소 길이가 1자, 최대 길이가 16자여야 하며 영문자 및 숫자를 포함해야 하지만 영문자로 시작해야 합니다.

JSON

"Parameters" : { "AdminUserAccount": { "Default": "admin", "NoEcho": "true", "Description" : "The admin account user name", "Type": "String", "MinLength": "1", "MaxLength": "16", "AllowedPattern" : "[a-zA-Z][a-zA-Z0-9]*" } }

YAML

Parameters: AdminUserAccount: Default: admin NoEcho: true Description: The admin account user name Type: String MinLength: 1 MaxLength: 16 AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'

MinValue 및 MaxValue 제약 조건이 포함된 숫자 파라미터가 있는 Parameters 섹션

다음 예제에서는 Number 유형 파라미터 하나가 선언된 유효한 파라미터 섹션 선언을 보여줍니다. WebServerPort 파라미터는 기본값이 80이고, 최솟값은 1, 최댓값은 65,535입니다.

JSON

"Parameters" : { "WebServerPort": { "Default": "80", "Description" : "TCP/IP port for the web server", "Type": "Number", "MinValue": "1", "MaxValue": "65535" } }

YAML

Parameters: WebServerPort: Default: 80 Description: TCP/IP port for the web server Type: Number MinValue: 1 MaxValue: 65535

AllowedValues 제약 조건이 포함된 숫자 파라미터가 있는 Parameters 섹션

다음 예제에서는 Number 유형 파라미터 하나가 선언된 유효한 파라미터 섹션 선언을 보여줍니다. WebServerPort 파라미터는 기본값이 80이고, 80~8,888의 값만 허용합니다.

JSON

"Parameters" : { "WebServerPortLimited": { "Default": "80", "Description" : "TCP/IP port for the web server", "Type": "Number", "AllowedValues" : ["80", "8888"] } }

YAML

Parameters: WebServerPortLimited: Default: 80 Description: TCP/IP port for the web server Type: Number AllowedValues: - 80 - 8888

리터럴 CommaDelimitedList 파라미터가 하나 있는 Parameters 섹션

다음 예제는 단일 CommaDelimitedList 유형 파라미터가 선언된 유효한 Parameters 섹션 선언을 보여줍니다. NoEcho 속성은 TRUE로 설정되어 있으며, 아래 지정된 위치에 저장된 정보를 제외하고 describe-stacks 출력에서 값이 별표(*****)로 마스킹 처리됩니다.

중요

NoEcho 속성을 사용해도 다음에 저장된 정보는 마스킹되지 않습니다.

  • Metadata 템플릿 섹션. CloudFormation은 Metadata 섹션에 포함된 정보를 변환, 수정 또는 삭제하지 않습니다. 자세한 내용은 Metadata 단원을 참조하십시오.

  • Outputs 템플릿 섹션. 자세한 내용은 Outputs 단원을 참조하십시오.

  • 리소스 정의의 Metadata 속성입니다. 자세한 내용은 Metadata 속성 단원을 참조하십시오.

이러한 메커니즘을 사용하여 암호나 보안 정보와 같은 중요한 정보를 포함하지 않는 것이 좋습니다.

중요

AWS Systems Manager Parameter Store 또는 AWS Secrets Manager와 같이 CloudFormation 외부에서 저장 및 관리되는 중요한 정보를 참조하려면 CloudFormation 템플릿에 직접 중요한 정보를 포함하는 대신 스택 템플릿에 있는 동적 파라미터를 사용하는 것이 좋습니다.

자세한 내용은 템플릿에 자격 증명을 포함하지 않음 모범 사례를 참조하세요.

JSON

"Parameters" : { "UserRoles" : { "Type" : "CommaDelimitedList", "Default" : "guest,newhire", "NoEcho" : "TRUE" } }

YAML

Parameters: UserRoles: Type: CommaDelimitedList Default: "guest,newhire" NoEcho: true

가상 파라미터를 기반으로 한 파라미터 값이 있는 Parameters 섹션

다음 예제에서는 가상 파라미터 AWS::StackNameAWS::Region을 사용하는 EC2 사용자 데이터의 명령을 보여줍니다. 가상 파라미터에 대한 자세한 내용은 가상 파라미터 참조 단원을 참조하십시오.

JSON

"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash -xe\n", "yum install -y aws-cfn-bootstrap\n", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref" : "AWS::StackName" }, " --resource LaunchConfig ", " --region ", { "Ref" : "AWS::Region" }, "\n", "/opt/aws/bin/cfn-signal -e $? ", " --stack ", { "Ref" : "AWS::StackName" }, " --resource WebServerGroup ", " --region ", { "Ref" : "AWS::Region" }, "\n" ]]}} }

YAML

UserData: Fn::Base64: !Sub | #!/bin/bash -xe yum update -y aws-cfn-bootstrap /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --region ${AWS::Region} /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}

매핑이 3개 있는 Mapping 섹션

다음 예제는 매핑이 3개 있는 유효한 Mapping 섹션 선언을 보여줍니다. Stop, SlowDown 또는 Go의 매핑 키와 일치하는 경우 맵은 해당하는 RGBColor 속성에 할당된 RGB 값을 제공합니다.

JSON

"Mappings" : { "LightColor" : { "Stop" : { "Description" : "red", "RGBColor" : "RED 255 GREEN 0 BLUE 0" }, "SlowDown" : { "Description" : "yellow", "RGBColor" : "RED 255 GREEN 255 BLUE 0" }, "Go" : { "Description" : "green", "RGBColor" : "RED 0 GREEN 128 BLUE 0" } } }

YAML

Mappings: LightColor: Stop: Description: red RGBColor: "RED 255 GREEN 0 BLUE 0" SlowDown: Description: yellow RGBColor: "RED 255 GREEN 255 BLUE 0" Go: Description: green RGBColor: "RED 0 GREEN 128 BLUE 0"

리터럴 문자열 기반 Description

다음 예제는 값이 리터럴 문자열을 기반으로 하는 유효한 Description 섹션 선언을 보여줍니다. 이 코드 조각은 템플릿, 파라미터, 리소스, 속성 또는 출력에 대한 코드 조각일 수 있습니다.

JSON

"Description" : "Replace this value"

YAML

Description: "Replace this value"

리터럴 문자열 출력이 하나 있는 Outputs 섹션

이 예제에서는 리터럴 문자열을 기반으로 한 출력 할당을 보여줍니다.

JSON

"Outputs" : { "MyPhone" : { "Value" : "Please call 555-5555", "Description" : "A random message for aws cloudformation describe-stacks" } }

YAML

Outputs: MyPhone: Value: Please call 555-5555 Description: A random message for aws cloudformation describe-stacks

리소스 참조 및 가상 참조 출력이 각각 하나씩 있는 Outputs 섹션

이 예제는 출력 할당이 2개 있는 Outputs 섹션이 표시됩니다. 출력 할당 하나는 리소스를 기반으로 하고, 다른 하나는 가상 참조를 기반으로 합니다.

JSON

"Outputs" : { "SNSTopic" : { "Value" : { "Ref" : "MyNotificationTopic" } }, "StackName" : { "Value" : { "Ref" : "AWS::StackName" } } }

YAML

Outputs: SNSTopic: Value: !Ref MyNotificationTopic StackName: Value: !Ref AWS::StackName

함수, 리터럴 문자열, 참조 및 가상 파라미터를 기반으로 한 출력이 있는 Outputs 섹션

이 예제에서는 출력 할당이 한 개 있는 출력 섹션이 표시됩니다. 퍼센트 기호를 구분 기호로 사용하여 값을 연결하기 위해 Join 함수가 사용됩니다.

JSON

"Outputs" : { "MyOutput" : { "Value" : { "Fn::Join" : [ "%", [ "A-string", {"Ref" : "AWS::StackName" } ] ] } } }

YAML

Outputs: MyOutput: Value: !Join [ %, [ 'A-string', !Ref 'AWS::StackName' ]]

템플릿 포맷 버전

다음 코드 조각은 유효한 AWSTemplateFormatVersion 섹션 선언을 보여줍니다.

JSON

"AWSTemplateFormatVersion" : "2010-09-09"

YAML

AWSTemplateFormatVersion: '2010-09-09'

AWSTags 속성

이 예제는 AWS Tags 속성을 보여줍니다. 이 속성은 리소스의 속성 섹션 내에서 지정합니다. 리소스가 생성되면 선언한 태그로 리소스에 태그가 지정됩니다.

JSON

"Tags" : [ { "Key" : "keyname1", "Value" : "value1" }, { "Key" : "keyname2", "Value" : "value2" } ]

YAML

Tags: - Key: "keyname1" Value: "value1" - Key: "keyname2" Value: "value2"