はじめに
AWS CloudFormationを利用する場合、どういう構成になっているかを簡潔にまとめてみました。
テンプレートのファイル拡張子
テンプレートはJSONもしくはYAMLとなります。
JSONの場合は、jqコマンドが利用できるメリットがあります。
YAMLの場合は、コメントが書けるメリットがあります。
YAMLを利用する場合は、SAMの事を考慮に入れると、拡張子はyamlではなく、ymlとした方が無難です。
セクションの構成
テンプレートの要素の事をセクションと言います。
※コメントになっているのは、オプションです。
AWSTemplateFormatVersion: 2010-09-09
# Description: Template for Akane
# Metadata:
# Parameters:
# Mappings:
# Conditions
# Transform
Resources:
# Outputs:
セクションの詳細
各セクションを詳しく見ていきましょう。
##1. Format version 形式バージョン (必須)
AWS CloudFormationテンプレートバージョンを記述する
形式バージョン: 2010-09-09
※現状唯一有効な値
AWSTemplateFormatVersion: 2010-09-09
##2. Description 説明 (オプション)
テンプレートの説明を記述する
Description: Template for Akane
##3. Metadata メタデータ (オプション)
テンプレートに関する追加情報を記述する
##4. Parameters パラメータ (オプション)
テンプレートで利用するパラメータを宣言する
# パラメータを設定する
Parameters:
パラメータ名:
Description: 説明
Type: String
# !Refで値を参照する
!Ref パラメータ名
{
"Parameters":[
{
"ParameterKey": "パラメータ名",
"ParameterValue": "値"
}
]
}
##5. Mappings (オプション)
キーと値のマッピングを記述する
Mappings:
論理名:
キー1:
Name: 値1
キー2:
Name: 値2
##6. Conditions 条件 (オプション)
条件を宣言する
※ResourcesセクションまたはOutputsセクションでリソースの作成に利用
Conditions:
論理ID:
組み込み関数
- 組み込み関数
- Fn::And
- Fn::Equals
- Fn::If
- Fn::Not
- Fn::Or
##7. Transform トランスフォーム (オプション)
マクロを指定する
※サーバレスアプリケーションや定型コンテンツ挿入などで利用する
Transform: AWS::Serverless-2016-10-31
##8. Resources リソース (必須)
スタックを構成するAWSリソースを記述する
リソースタイプとリソースプロパティは、AWS リソースおよびプロパティタイプのリファレンスを利用すると良いです。
Resources:
論理ID:
Type: リソースタイプ
Properties: リソースプロパティ
##9. Outputs 出力 (オプション)
スタック構築後に表示・取得した値や他スタックとの連携のための値を記述する
Outputs:
論理ID:
Description: Information about the value
Value: !Ref Resourcesセクションの論理ID
Export:
Name: Export名
別のテンプレートからOutputsの値を参照する場合は、下記のようになります。
!ImportValue Export名
AWS CLI
マネジメントコンソールからファイルをアップロードしたり、S3のURLを指定する事で実行できますが、パラメータ.jsonを利用する場合は、AWS CLIで行うことになります。
AWS CloudFormationを動かすためのAWS CLIの設定を参考にしてください。
# AWSリージョンを環境変数に指定(東京リージョン)
export AWS_DEFAULT_REGION=ap-northeast-1
# スタックの作成
aws cloudformation create-stack \
--stack-name スタック名 \
--template-body file://テンプレート.yaml \
--cli-inpu-json file://パラメータ.json
# スタックの削除
aws cloudformation delete-stack \
--stack-name スタック名