AWS CloudFormation 入門
概要
- CloudFormationは、今までマネジメントコンソールやawscliでやってたシステム構築を自動化する仕組み
- VPCつくってSubnetつくってルートテーブル作ってEC2つくって...の一連の流れが一発で起動できる
- 自動化の設定は「テンプレート」と呼ばれるJSONファイルに記述する
- VPC, Subnet, EC2など作成するものは「リソース」と呼ぶ
- リソースの集まりをは「スタック」と呼ばれる
- CloudFormationはスタック単位でシステム構築、スタック単位で削除できる
マネジメントコンソールでやってみる流れ
- ローカルでテンプレートを書く
- 拡張子は
.json
か.template
か.txt
- 拡張子は
- マネジメントコンソール>AWS Cloud Formation
- スタックの作成
- 作成したテンプレートをアップロード(S3)して保存
- スタックの起動
- できたか確認
- Eventsタブで実行結果が確認できる
- 途中で失敗しても、スタック全体がロールバックされるので安心
テンプレートの基本構造
Resourcesだけ必須。とりあえず最初はResourcesだけ書けるようになろう。
{ "AWSTemplateFormatVersion" : "version date", "Description" : "JSON string", "Parameters" : { }, "Mappings" : { }, "Conditions" : { }, "Resources" : { }, "Outputs" : { } }
- AWSTemplateFormatVersion
- テンプレートが準拠しているAWSCloudFormationのテンプレートバージョン
- Description
- テンプレートの説明
- AWSTemplateFormatVersionの後に書く必要がある
- Parameters
- Mappings
- テンプレート内から参照できるkey-value構造のパラメータ定義
Fn::FindInMap
組み込み関数を使ってここで定義したvalueを参照できる
- Resources
- VPC, Subnet, EC2など、リソースの設定
- Outputs
- テンプレートを実行した結果をどう出力するかの設定
- 組み込み関数などを使って情報を整形する
- たとえば、CloudFormationでたち上げたサイトのURLを返すようにしておいて、
aws
コマンドで実行したらすぐにサイトのトップページにアクセスできる
テンプレートの書き方を学ぶ
Resourcesのパラメータをどう見つければ良いか
- Webでリファレンスを見る
- コマンドのヘルプを見る
aws ec2 create-vpc help
サンプルで勉強する
- EC2やRDSなどリソースのスニペット => テンプレートスニペット
- そのまま使えるスタックのサンプル => サンプルテンプレート
テンプレート内で使える組み込み関数を知る
条件分岐も書くことができるので、EnvironmentType
をみてprodなら本番環境、testならテスト環境を立ち上げるなどできる。
- 組み込み関数リファレンス
- Ref
- Fn::Base64
- Fn::FindInMap
- Fn::GetAtt
- Fn::GetAZs
- Fn::Join
- Fn::Select
- Fn::And
- Fn::Equals
- Fn::If
- Fn::Not
- Fn::Or