일반 템플릿 조각 - AWS CloudFormation

일반 템플릿 조각

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

Base64 인코딩 UserData 속성

이 예제에서는 Fn::Base64 및 Fn::Join 함수를 사용하여 UserData 속성의 조합을 보여줍니다. 참조 MyValueMyName는 템플릿의 파라미터 섹션에 정의되어야 하는 파라미터입니다. 리터럴 문자열 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::Base64 및 Fn::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}

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

다음 예제에서는 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

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

다음 예제에서는 String 유형 파라미터 하나가 선언된 유효한 파라미터 섹션 선언을 보여줍니다. AdminUserAccount 파라미터에는 이 파라미터 값은 최소 길이가 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 제약이 있는 숫자 파라미터가 포함된 파라미터 섹션

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

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 제약이 있는 숫자 파라미터가 포함된 파라미터 섹션

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

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 파라미터가 하나 있는 파라미터 섹션

다음 예제에서는 CommaDelimitedList 유형 파라미터 하나가 선언된 유효한 파라미터 섹션 선언을 보여줍니다. NoEcho 속성은 TRUE로 설정되어 있습니다. 따라서 aws cloudformation describe-stacks 출력에서 파라미터의 값을 별표(*****)로 숨깁니다.

중요

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

자세한 내용은 템플릿에 자격 증명을 포함하지 않음을 참조하십시오.

JSON

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

YAML

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

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

다음 예제에서는 가상 파라미터 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}

매핑이 세 개 있는 매핑 섹션

다음 예제에서는 매핑이 세 개 있는 유효한 매핑 섹션 선언을 보여줍니다. 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"

리터럴 문자열을 기반으로 한 설명

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

JSON

"Description" : "Replace this value"

YAML

Description: "Replace this value"

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

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

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

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

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

JSON

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

YAML

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

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

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

JSON

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

YAML

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

템플릿 포맷 버전

다음 코드 조각은 유효한 템플릿 포맷 버전 섹션 선언을 보여줍니다.

JSON

"AWSTemplateFormatVersion" : "2010-09-09"

YAML

AWSTemplateFormatVersion: '2010-09-09'

AWS 태그 속성

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

JSON

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

YAML

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