CloudFormation テンプレート形式
CloudFormation テンプレートは JSON または YAML 形式で作成できます。いずれの形式も同じ目的に資するものですが、読みやすさと複雑さの点で明確に異なる利点があります。
-
JSON – JSON は、マシンが解析して生成しやすい軽量のデータ交換形式です。ただし、特に複雑な設定では、人間による読み書きが煩雑になる可能性があります。JSON では、テンプレートはネストされた中括弧
{}
と括弧[]
を使用して構築され、リソース、パラメータ、および他のコンポーネントを定義します。この構文では、すべての要素を明示的に宣言する必要があります。これにより、テンプレートは冗長になる可能性がありますが、構造化された形式への厳密な準拠を実現できます。 -
YAML – YAML は、JSON と比較して、人間にとってより読みやすく、冗長性がより低くなるように設計されています。中括弧や括弧ではなくインデントを使用してネストを示すため、リソースとパラメータの階層をより簡単に視覚化できます。YAML は、特により複雑なテンプレートを扱う場合、その明確さと使いやすさを理由としてより好まれることがよくあります。ただし、YAML によるインデントへの依拠により、スペーシングに一貫性がない場合にエラーが発生する可能性があるため、精度を維持するには細心の注意が必要です。
テンプレート構造
CloudFormation テンプレートは、さまざまなセクションに分かれており、各セクションは特定のタイプの情報を保持するように設計されています。特定の順序で宣言する必要があるセクションと、順序は重要でないセクションがあります。ただし、あるセクションの値が前のセクションの値を参照している場合があるため、テンプレートを構築する際には、次の例で示されている論理的な順序を使用すると便利です。
テンプレートを作成するときは、Resources
セクションなどの主要セクションを重複して使用しないでください。CloudFormation はテンプレートを受け入れる場合がありますが、テンプレートを処理するときに未定義の動作が発生し、リソースを誤ってプロビジョニングしたり、不可解なエラーを返したりする可能性があります。
JSON
次の例は、使用可能なすべてのセクションを含む JSON 形式のテンプレートの構造を示しています。
{ "AWSTemplateFormatVersion" : "
version date
", "Description" : "JSON string
", "Metadata" : {template metadata
}, "Parameters" : {set of parameters
}, "Rules" : {set of rules
}, "Mappings" : {set of mappings
}, "Conditions" : {set of conditions
}, "Transform" : {set of transforms
}, "Resources" : {set of resources
}, "Outputs" : {set of outputs
} }
YAML
次の例は、使用可能なすべてのセクションを含む YAML 形式のテンプレートの構造を示しています。
--- AWSTemplateFormatVersion:
version date
Description:String
Metadata:template metadata
Parameters:set of parameters
Rules:set of rules
Mappings:set of mappings
Conditions:set of conditions
Transform:set of transforms
Resources:set of resources
Outputs:set of outputs
コメント
JSON 形式のテンプレートでは、コメントはサポートされていません。JSON には、設計上、コメントの構文は含まれていません。つまり、JSON 構造内にコメントを直接追加することはできません。ただし、説明のためのメモやドキュメントを含める必要がある場合は、メタデータを追加することを検討できます。詳細については、「Metadata 属性」を参照してください。
YAML 形式のテンプレートでは、#
記号を使用してインラインコメントを含めることができます。
以下は、インラインコメントを使用した YAML テンプレートの例です。
AWSTemplateFormatVersion: 2010-09-09 Description: A sample CloudFormation template with YAML comments. # Resources section Resources: MyEC2Instance: Type: AWS::EC2::Instance Properties: # Linux AMI ImageId: ami-1234567890abcdef0 InstanceType: t2.micro KeyName: MyKey BlockDeviceMappings: - DeviceName: /dev/sdm Ebs: VolumeType: io1 Iops: 200 DeleteOnTermination: false VolumeSize: 20
仕様
CloudFormation は、次の JSON および YAML の仕様をサポートしています。
- JSON
-
CloudFormation は ECMA-404 JSON スタンダードに従います。JSON フォーマットの詳細については、http://www.json.org
をご覧ください。 - YAML
-
CloudFormation は YAML バージョン 1.1 仕様をサポートしていますが、いくつかの例外があります。CloudFormation は次の機能をサポートしていません。
-
binary
、omap
、pairs
、set
、およびtimestamp
タグ -
エイリアス
-
ハッシュ結合
YAML の詳細については、https://yaml.org/
を参照してください。 -
詳細はこちら
テンプレート内で指定する各リソースについて、JSON または YAML のいずれかの構文規則に従って、プロパティとその値を定義します。各形式のテンプレート構文の詳細については、CloudFormation テンプレートセクション を参照してください。