일반 템플릿 코드 조각 - 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 출력에서 값이 별표(*****)로 마스킹 처리됩니다.

중요

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

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

  • 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

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

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