

# CloudFormation テンプレート形式
<a name="template-formats"></a>

CloudFormation テンプレートは JSON または YAML 形式で作成できます。いずれの形式も同じ目的に資するものですが、読みやすさと複雑さの点で明確に異なる利点があります。
+ **JSON** – JSON は、マシンが解析して生成しやすい軽量のデータ交換形式です。ただし、特に複雑な設定では、人間による読み書きが煩雑になる可能性があります。JSON では、テンプレートはネストされた中括弧 `{}` と括弧 `[]` を使用して構築され、リソース、パラメータ、および他のコンポーネントを定義します。この構文では、すべての要素を明示的に宣言する必要があります。これにより、テンプレートは冗長になる可能性がありますが、構造化された形式への厳密な準拠を実現できます。
+ **YAML** – YAML は、JSON と比較して、人間にとってより読みやすく、冗長性がより低くなるように設計されています。中括弧や括弧ではなくインデントを使用してネストを示すため、リソースとパラメータの階層をより簡単に視覚化できます。YAML は、特により複雑なテンプレートを扱う場合、その明確さと使いやすさを理由としてより好まれることがよくあります。ただし、YAML によるインデントへの依拠により、スペーシングに一貫性がない場合にエラーが発生する可能性があるため、精度を維持するには細心の注意が必要です。

## テンプレート構造
<a name="template-structure"></a>

CloudFormation テンプレートは、さまざまなセクションに分かれており、各セクションは特定のタイプの情報を保持するように設計されています。特定の順序で宣言する必要があるセクションと、順序は重要でないセクションがあります。ただし、あるセクションの値が前のセクションの値を参照している場合があるため、テンプレートを構築する際には、次の例で示されている論理的な順序を使用すると便利です。

テンプレートを作成するときは、`Resources` セクションなどの主要セクションを重複して使用しないでください。CloudFormation はテンプレートを受け入れる場合がありますが、テンプレートを処理するときに未定義の動作が発生し、リソースを誤ってプロビジョニングしたり、不可解なエラーを返したりする可能性があります。

### JSON
<a name="template-structure.json"></a>

次の例は、使用可能なすべてのセクションを含む 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
<a name="template-structure.yaml"></a>

次の例は、使用可能なすべてのセクションを含む 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
```

## コメント
<a name="template-comments"></a>

JSON 形式のテンプレートでは、コメントはサポートされていません。JSON には、設計上、コメントの構文は含まれていません。つまり、JSON 構造内にコメントを直接追加することはできません。ただし、説明のためのメモやドキュメントを含める必要がある場合は、メタデータを追加することを検討できます。詳細については、「[Metadata 属性](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-metadata.html)」を参照してください。

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
```

## 仕様
<a name="template-formats.supported-specifications"></a>

CloudFormation は、次の JSON および YAML の仕様をサポートしています。

JSON  
CloudFormation は ECMA-404 JSON スタンダードに従います。JSON フォーマットの詳細については、[http://www.json.org](http://www.json.org) をご覧ください。

YAML  
CloudFormation は YAML バージョン 1.1 仕様をサポートしていますが、いくつかの例外があります。CloudFormation は次の機能をサポートしていません。  
+ `binary`、`omap`、`pairs`、`set`、および`timestamp` タグ
+ エイリアス
+ ハッシュ結合
YAML の詳細については、[https://yaml.org/](https://yaml.org/) を参照してください。

## 詳細はこちら
<a name="template-formats.learnmore"></a>

テンプレート内で指定する各リソースについて、JSON または YAML のいずれかの構文規則に従って、プロパティとその値を定義します。各形式のテンプレート構文の詳細については、[CloudFormation テンプレートセクション](template-anatomy.md) を参照してください。