一般的なテンプレートスニペット
次の例では、AWS サービスに固有ではない異なる CloudFormation テンプレートの特徴を示しています。
トピック
- Base64 エンコードされた UserData プロパティ
- AccessKey および SecretKey で Base64 エンコードされた UserData プロパティ
- Parameters セクション (リテラル文字列パラメータが 1 つ存在)
- Parameters セクション (正規表現制約を設定した文字列パラメータが存在)
- Parameters セクション (MinValue および MaxValue 制約を設定した数値パラメータが存在)
- Parameters セクション (AllowedValues 制約を設定した数値パラメータが存在)
- Parameters セクション (1 つのリテラル CommaDelimitedList パラメータが存在)
- Parameters セクション (擬似パラメータに基づくパラメータ値が存在)
- Mapping セクション (3 つのマッピングが存在)
- リテラル文字列を使用した Description
- Outputs セクション (リテラル文字列の出力が 1 つ存在)
- Outputs セクション (リソースリファレンスが 1 つ、擬似リファレンス出力が 1 つ存在)
- Outputs セクション (関数、リテラル文字列、リファレンス、擬似パラメータによる出力)
- テンプレート形式バージョン
- AWSTags プロパティ
Base64 エンコードされた UserData プロパティ
この例では、Fn::Base64
関数と Fn::Join
関数を使用して UserData
プロパティを作成しています。MyValue
と MyName
のリファレンスはパラメータです。これらのパラメータは、テンプレートの 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::Base64
関数と Fn::Join
関数を使用して UserData
プロパティを作成しています。このプロパティには、AccessKey
と SecretKey
の情報が含まれています。AccessKey
と SecretKey
のリファレンスはパラメーターです。これらのパラメーターは、テンプレートの Parameters セクションで定義されている必要があります。
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 セクション (リテラル文字列パラメータが 1 つ存在)
次の例は、String
型パラメーターが 1 つだけ宣言された有効な Parameters セクションの宣言を表しています。
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
型パラメーターが 1 つだけ宣言された有効な Parameters セクションの宣言を表しています。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]*'
Parameters セクション (MinValue および MaxValue 制約を設定した数値パラメータが存在)
次の例は、Number
型パラメーターが 1 つだけ宣言された有効な Parameters セクションの宣言を表しています。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
Parameters セクション (AllowedValues 制約を設定した数値パラメータが存在)
次の例は、Number
型パラメーターが 1 つだけ宣言された有効な Parameters セクションの宣言を表しています。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
Parameters セクション (1 つのリテラル CommaDelimitedList パラメータが存在)
次の例は、CommaDelimitedList
タイプパラメータが 1 つだけ宣言された有効な Parameters
セクションの宣言を表しています。NoEcho
プロパティは TRUE
に設定されます。この場合、その値は describe-stacks 出力でアスタリスク (*****) によってマスクされます。ただし、以下に指定した場所に保存されている情報は除きます。
重要
NoEcho
属性を使用しても、以下に保存されている情報はマスクされません。
-
Metadata
テンプレートセクション。CloudFormation は、Metadata
セクションに含める情報の変換、変更、または編集を行いません。詳細については、「CloudFormation テンプレートの Metadata セクション構文リファレンス」を参照してください。 -
Outputs
テンプレートセクション。詳細については、「CloudFormation テンプレートの Outputs セクション構文リファレンス」を参照してください。 -
リソース定義の
Metadata
属性。詳細については、「Metadata 属性」を参照してください。
パスワードやシークレットなどの機密情報を含めるには、これらのメカニズムを使用しないことを強くお勧めします。
重要
機密情報は、CloudFormation テンプレートに直接埋め込むのではなく、スタックテンプレートの動的パラメータを使用して CloudFormation の外部 (AWS Systems Manager パラメータストアや AWS Secrets Manager など) に保存して管理した上で 参照することをお勧めします。
詳細については、「テンプレートに認証情報を埋め込まない のベストプラクティス」を参照してください。
JSON
"Parameters" : { "UserRoles" : { "Type" : "CommaDelimitedList", "Default" : "guest,newhire", "NoEcho" : "TRUE" } }
YAML
Parameters: UserRoles: Type: CommaDelimitedList Default: "guest,newhire" NoEcho: true
Parameters セクション (擬似パラメータに基づくパラメータ値が存在)
次の例は、擬似パラメーター AWS::StackName
および AWS::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}
Mapping セクション (3 つのマッピングが存在)
次の例は、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 セクション (リテラル文字列の出力が 1 つ存在)
この例では、リテラル文字列によって出力の割り当てを行っています。
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 セクション (リソースリファレンスが 1 つ、擬似リファレンス出力が 1 つ存在)
この例は、出力の割り当てが 2 つ存在する Outputs
セクションを示します。1 つはリソースに、もう 1 つは擬似リファレンスに基づいて出力を割り当てています。
JSON
"Outputs" : { "SNSTopic" : { "Value" : { "Ref" : "MyNotificationTopic" } }, "StackName" : { "Value" : { "Ref" : "AWS::StackName" } } }
YAML
Outputs: SNSTopic: Value: !Ref MyNotificationTopic StackName: Value: !Ref AWS::StackName
Outputs セクション (関数、リテラル文字列、リファレンス、擬似パラメータによる出力)
この例は、出力の割り当てが 1 つ存在する 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
プロパティを示します。このプロパティは、リソースの Properties セクションに指定します。作成されたリソースは、宣言したタグでタグ付けされます。
JSON
"Tags" : [ { "Key" : "keyname1", "Value" : "value1" }, { "Key" : "keyname2", "Value" : "value2" } ]
YAML
Tags: - Key: "keyname1" Value: "value1" - Key: "keyname2" Value: "value2"