

# CloudFormation テンプレートの使用
<a name="template-guide"></a>

AWS CloudFormation テンプレートは、スタックの一部として作成、更新、または削除する AWS リソースを定義します。これは複数のセクションで構成されていますが、必須のセクションは [Resources](resources-section-structure.md) セクションのみであり、このセクションは少なくとも 1 つのリソースを宣言する必要があります。

以下の方法で、ポリシーストアを作成できます。
+ **AWS Infrastructure Composer** – テンプレートを設計するためのビジュアルインターフェイス。
+ **テキストエディタ** – テンプレートを JSON または YAML 構文で記述します。
+ **IaC ジェネレーター** – CloudFormation で現在管理されていないアカウントでプロビジョニングされたリソースからテンプレートを生成します。IaC ジェネレーターは、ご使用のリージョンで Cloud Control API によってサポートされている幅広いリソースタイプに対応しています。

このセクションでは、CloudFormation テンプレートのさまざまなセクションを使用する方法と、スタックテンプレートの作成を開始する方法に関する包括的なガイドを提供します。次のトピックについて説明します。

**Topics**
+ [テンプレートが保存される場所](#where-they-get-stored)
+ [テンプレートの検証](#template-validation)
+ [テンプレートの開始方法](#getting-started)
+ [サンプルテンプレート](#sample-templates)
+ [テンプレート形式](template-formats.md)
+ [テンプレートセクション](template-anatomy.md)
+ [Infrastructure Composer](infrastructure-composer-for-cloudformation.md)
+ [AWS CloudFormation 言語サーバー](ide-extension.md)
+ [IaC ジェネレーター](generate-IaC.md)
+ [他のサービスに格納されている値を取得定する](dynamic-references.md)
+ [AWS 値の取得](pseudo-parameter-reference.md)
+ [スタックの出力を取得する](using-cfn-stack-exports.md)
+ [実行時に既存のリソースを指定する](cloudformation-supplied-parameter-types.md)
+ [チュートリアル](walkthroughs.md)
+ [テンプレートスニペット](template-snippets.md)
+ [Windows ベースのスタック](cfn-windows-stacks.md)
+ [CloudFormation 提供のリソースタイプを使用する](cloudformation-supplied-resource-types.md)
+ [モジュールを使用して再利用可能なリソース設定の作成](modules.md)

## テンプレートが保存される場所
<a name="where-they-get-stored"></a>

**Amazon S3 バケット**  
CloudFormation テンプレートは Amazon S3 バケットに保存できます。スタックを作成または更新する際に、テンプレートを直接アップロードする代わりに、テンプレートの S3 URL を指定できます。

AWS マネジメントコンソール または AWS CLI を通じてテンプレートを直接アップロードすると、S3 バケットが自動的に作成されます。詳細については、「[CloudFormation コンソールからスタックを作成する](cfn-console-create-stack.md)」を参照してください。

**Git リポジトリ**  
[Git 同期](git-sync.md)を使用すると、Git リポジトリにテンプレートを保存できます。スタックを作成または更新する際に、テンプレートを直接アップロードしたり、S3 URL を参照したりする代わりに、テンプレートを含む Git リポジトリの場所とブランチを指定できます。CloudFormation は、指定されたリポジトリとブランチでテンプレートの変更を自動的にモニタリングします。詳細については、「[Git 同期を使用してリポジトリソースコードからスタックを作成する](git-sync-create-stack-from-repository-source-code.md)」を参照してください。

## テンプレートの検証
<a name="template-validation"></a>

**構文の検証**  
テンプレートの JSON または YAML 構文を検証するには、[validate-template](service_code_examples.md#validate-template-sdk) CLI コマンドを使用するか、またはコンソールでテンプレートを指定します。コンソールは検証を自動的に実行します。詳細については、「[CloudFormation コンソールからスタックを作成する](cfn-console-create-stack.md)」を参照してください。

ただし、これらのメソッドはテンプレートの構文のみを検証し、リソースのために指定したプロパティ値は検証しません。

**その他の検証ツール**  
より複雑な検証とベストプラクティスチェックには、次のような追加のツールを使用できます。
+ [CloudFormation Linter (cfn-lint)](https://github.com/aws-cloudformation/cfn-lint) – [CloudFormation リソースプロバイダースキーマ](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/resource-type-schemas.html)に照らしてテンプレートを検証します。リソースプロパティの有効な値の確認やベストプラクティスが含まれます。
+ [CloudFormation Rain (rain fmt)](https://github.com/aws-cloudformation/rain) – CloudFormation テンプレートを一貫性のある標準にフォーマットするか、または JSON から YAML (もしくは YAML から JSON) にテンプレートを再フォーマットします。YAML を使用する際のコメントを保持し、組み込み関数の使用を短い構文に切り替えます (可能な場合)。

## テンプレートの開始方法
<a name="getting-started"></a>

CloudFormation テンプレートの作成を開始するには、次のステップに従います。

1. **リソースを選択する** – EC2 インスタンス、VPC、セキュリティグループなど、スタックに含める AWS リソースを特定します。

1. **テンプレートを記述する** – テンプレートを JSON または YAML 形式で記述し、リソースとそのプロパティを定義します。

1. **テンプレートの保存** – テンプレートは、`.json`、`.yaml`、`.txt` などのファイル拡張子でローカルに保存します。

1. **テンプレートを検証する** – [テンプレートの検証](#template-validation) セクションで説明されている方法を使用してテンプレートを検証します。

1. **スタックを作成する** – 検証済みテンプレートを使用してスタックを作成します。

### CloudFormation テンプレートリファレンスを使用する予定
<a name="additional-resources"></a>

テンプレートを作成すると、「[AWS リソースおよびプロパティタイプのリファレンス](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-template-resource-type-ref.html)」でさまざまなリソースタイプの詳細な構文に関するドキュメントを確認できます。

多くの場合、スタックテンプレートには、ランタイムまで使用できないプロパティ値を割り当てる組み込み関数と、リソースの動作を制御するための特別な属性が必要です。テンプレートを作成するときは、以下のガイダンスのリソースを参照してください。
+ [組み込み関数リファレンス](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference.html) – 一般的に使用される組み込み関数には、次のようなものがあります。
  + `Ref` – パラメータの値またはリソースの物理 ID を取得します。
  + `Sub` – 文字列のプレースホルダーを実際の値に置き換えます。
  + `GetAtt` – テンプレート内のリソースから属性の値を返します。
  + `Join` – 値のセットを 1 つの文字列に結合します。
+ [リソース属性リファレンス](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-product-attribute-reference.html) – 一般的に使用される特殊な属性には、次のようなものがあります。
  + `DependsOn` – この属性を使用して、あるリソースに続けて別のリソースを作成する必要があることを指定できます。
  + `DeletionPolicy` – この属性を使用して、リソースの削除を CloudFormation でどのように処理するかを指定します。

## サンプルテンプレート
<a name="sample-templates"></a>

CloudFormation は、使用を開始するために使用できるオープンソースのスタックテンプレートを提供します。詳細については、GitHub ウェブサイトの「[CloudFormation Sample Templates](https://github.com/aws-cloudformation/aws-cloudformation-templates)」を参照してください。

これらのテンプレートは本番用ではないことに留意してください。どのように機能するかを知り、ニーズに適応させ、会社のコンプライアンス基準を満たしているようにするために時間を設けるべきです。

このリポジトリ内の各テンプレートは、[CloudFormation Linter](https://github.com/aws-cloudformation/cfn-lint) (cfn-lint) チェックに合格します。また、Center for Internet Security (CIS) の上位 20 個の AWS CloudFormation Guard ルールの基本的なセットにも合格します。ただし、サンプルの焦点を 1 つのユースケースに置くことが理にかなっている一部のルールは例外です。