

# CloudFormation テンプレートセクション
<a name="template-anatomy"></a>

あらゆる CloudFormation テンプレートは 1 つ以上のセクションで構成され、それぞれが特定の目的を果たします。

**[リソース]** セクションはあらゆる CloudFormation テンプレートで必要であり、テンプレートの中核となります。このセクションは、Amazon EC2 インスタンスや Amazon S3 バケットなど、スタックリソースとそのプロパティを指定します。各リソースは、一意の論理 ID、タイプ、および特定の設定の詳細で定義されます。

**[パラメータ]** セクションはオプションですが、テンプレートをより柔軟にする上で重要な役割を果たします。これにより、ユーザーはスタックを作成または更新する際、実行時に値を渡すことができます。これらのパラメータは `Resources` および `Outputs` セクションで参照できるため、テンプレート自体の変更なしでのカスタマイズが可能です。例えば、パラメータを使用して、デプロイによって異なるインスタンスタイプまたは環境設定を指定できます。

**[出力]** セクションもオプションで、スタックのプロパティを表示する際に返される値を定義します。出力は、リソース識別子や URL などの有用な情報を提供します。これらの情報は、運用上の目的や他のスタックとの統合のために活用できます。このセクションでは、テンプレートによって作成されたリソースに関する重要な詳細を取得して使用する方法について説明します。

他のオプションのセクションには、条件値を管理するためのルックアップテーブルのように機能する **[マッピング]** が含まれます。マッピングでは、key-value ペアを定義し、`Resources` および `Outputs` セクションの `Fn::FindInMap` 組み込み関数で使用します。これは、AWS リージョン や環境などの条件に基づいて設定を調整する必要があるシナリオで役立ちます。

**[メタデータ]** と **[ルール]** のセクションは、あまり一般的に使用されてはいませんが、追加機能を提供します。`Metadata` はテンプレートに関する追加情報を含むことができ、`Rules` はスタックの作成または更新中にパラメータ、またはパラメータの組み合わせを検証し、特定の基準を満たしていることを確認します。**[条件]** セクションは、環境タイプなどの条件に基づいて特定のリソースが作成されるか、またはプロパティに値が割り当てられるかを制御することで、柔軟性をさらに高めます。

最後に、**[変換]** セクションを使用して、テンプレートの処理中にマクロを適用します。サーバーレスアプリケーション (Lambda アプリケーションとも呼ばれる) の場合、使用する [AWS サーバーレスアプリケーションモデル (AWSSAM)](https://github.com/awslabs/serverless-application-specification) のバージョンを指定します。変換を指定する場合は、AWS SAM 構文を使用して、テンプレート内のリソースを宣言できます。このモデルでは、使用できる構文と、その処理方法を定義します。`AWS::Include` トランスフォームを使用すると、メインの CloudFormation テンプレートとは別に保存されているテンプレートスニペットを含めるもできます。

次のトピックでは、各セクションの使用に関する詳細と例を示します。

**Topics**
+ [Resources](resources-section-structure.md)
+ [Parameters](parameters-section-structure.md)
+ [Outputs](outputs-section-structure.md)
+ [Mappings](mappings-section-structure.md)
+ [Metadata](metadata-section-structure.md)
+ [Rules](rules-section-structure.md)
+ [Conditions](conditions-section-structure.md)
+ [Transform](transform-section-structure.md)
+ [形式バージョン](format-version-structure.md)
+ [Description](template-description-structure.md)