CloudFormationとは
AWS CloudFormationは、AWSのリソースのモデル化およびセットアップを行うことができる サービスで、テンプレートを作成すれば、CloudFormationがこのテンプレートに沿ってリソースのプロビジョニング等を行う。CloudFormationを使用することで以下のようなメリットが生じる。
リソースを1つのコレクションとして簡単に管理できる
インフラストラクチャの複製が容易
コレクションの更新やバージョン管理が可能
CloudFormationの テンプレート はAWSリソースを作成する際の設計図の機能を持ち、JSONもしくはYAML形式で記述することができる。YAML形式のみコメント機能が使用できる 。このテンプレートを元にプロビジョニングされたAWSリソースは、スタック と呼ばれる単一ユニットとして管理される。スタックは、作成や変更、削除が可能で、変更時には変更概要を示した 変更セット が作成される。変更前に変更セットを確認することで、この変更がリソースに与える影響を事前に検証することができる。
CloudFormationはCloudTrail
と統合されており、CloudFormation内でのアクションをログに記録する。
CloudFormationを実行する際にリソースタグを付与することができるが、当該スタックに含まれるリソース全てに対してこのタグが伝搬する訳ではない 。また、リソースによってはリソースタグの付与自体ができない ことに注意が必要である。
CloudFormationの制限
入力パラメータ、マッピングなど、テンプレート内部で使用するパラメータの数には上限値が存在する。また、テンプレート自体のファイルサイズの上限も存在するため、上限を超過する場合には、S3バケットに対して事前にテンプレートをアップロードする か、 複数のネステッドスタックにテンプレートを分割 する必要がある。
IAM
CloudFormationが作成できるAWSリソースは、CloudFormationを実行したユーザが持つアクセス権限に含まれるもののみ である。もしくは、AWS CloudFormation サービスロール
と呼ばれるCloudFormationにリソースの作成や更新、削除を許可するIAMロールを割り当てることもできる。なお、特定の機能が含まれるテンプレートについては、実行時に以下を了承する必要がある。
機能
内容
CAPABILITY_IAM
IAMリソースが含まれている場合
CAPABILITY_NAMED_IAM
自身で命名したIAMリソースが含まれている場合
CAPABILITY_RESOURCE_POLICY
リソースポリシーが含まれている場合
CAPABILITY_AUTO_EXPAND
ネストされたアプリケーションが含まれている場合
IAMロールでは、リソースタイプやテンプレートURLなどを 限定 して、CloudFormationスタックの作成や削除を許可したり拒否したりすることもできる。
テンプレートセクション
CloudFormationテンプレートには、作成や設定したいAWSリソースを宣言することができ、以下のセクションが用意されている。
セクションタイプ
設定内容
AWSTemplateFormatVersion
形式バージョン
Conditions
制御条件
Description
テンプレートを説明するテキスト文字列, AWSTemplateFormatVersionの後に記述する
Mappings
プロビジョニング先のリージョンなどの条件に合わせて参照先が変更可能なパラメータ
Metadata
追加情報, AWS::CloudFormation::Designerはデザイナーのレイアウト情報を含む
Outputs
出力パラメータ
Parameters
入力パラメータ
Resources
AWSリソースの指定
Transform
テンプレートを処理するマクロを指定
設定変更するプロパティによっては、既存のリソースに影響が発生する可能性がある。例えば、アップデート中に リソースが一旦停止 する場合や、変更自体ができないリソースも存在 する。
Parameters
Parameters
セクションで入力パラメータを定義することができ、入力パラメータを指定してテンプレートを実行することで、 各種パラメータをカスタマイズ することができる。デフォルト値を持つ入力パラメータは、ユーザが別の値を入力しない限りデフォルト値が適用される。一方で、プロビジョニング済みのリソースで、かつマネージメントコンソールから操作をする場合は、ユーザが別の値を入力しない限り 現在の設定値が適用 される。入力パラメータには、以下の項目で値に制約を与えることができる。
指定できるパラメータのデータ型は、String
, Number
, List<Number>
, CommaDelimitedList
, AWS 固有のパラメーター型
, SSM パラメータータイプ
の6タイプがサポートされている。機密データには、 NoEcho
属性を指定するとよい。
型
制約タイプ
String
MinLength , MaxLength , Default , AllowedValues , AllowedPattern
Number
MinValue , MaxValue , Default , AllowedValues
Mappings
Mappings
セクションは、キーと名前付き一連データとかが対応付けられる。これを用いることで、リージョンごとに異なるリソースの設定値を一括して管理することができる。これらの値は、FindInMap
関数で取得することができる。
Conditions
Mappings
セクションでは、リソースを設定するか否かを判定する条件を定義することができ、この値が true
の場合のみ、当該のリソースを作成することができる。なお、スタック更新時に、Conditions のみを単独で更新することはできず 、リソースの追加や変更などが存在する場合に、 Conditions も再評価される。
Resources
Resources
セクションでは、スタックに含めるAWSリソースを宣言する。conditionsセクションと組み合わせることで、条件付きでリソースを作成 できる。
Outputs
他のスタックにインポートする値、もしくはCloudFormationコンソールに表示する出力値を宣言する。 Exports
属性を追加して、 クロススタック参照 に対応することもできる。
リソース属性
Resources
にリソース属性 を指定することで、リソースの追加や削除の際の挙動を制御することができる。
CreationPolicy
指定数の成功シグナルやタイムアウトが過ぎるまでは作成完了とならないようにする
プロパティ
内容
AutoScalingCreationPolicy
いくつのインスタンスが成功すると更新を続行するか
ResourceSignal
関連リソースを作成する際に必要なシグナル数
DeletionPolicy/UpdateReplacePolicy
スタックが削除されたときやリソースを置き換える際の動作を規定する。スナップショットが有効なリソースは、EC2ボリューム 、 Elasticache 、 Neptureクラスタ 、 RDSクラスタ/インスタンス 、Redshiftクラスタ である。
プロパティ
内容
Delete
削除する( DBクラスタ以外のデフォルト )
Retain
スタックを削除してもリソースを削除しない
Snapshot
削除する前にスナップショットを作成する(DBクラスタのデフォルト)
UpdatePolicy
AutoScalingGroup、Lambdaエイリアス、ElastiCacheレプリケーショングループの更新方法を指定する。
DependsOn
他のリソースに続けて作成されるように指定する。 Ref関数でリソースを参照する場合などは、暗黙的に依存関係が構築されるので記述の必要はない 。
Metadata
構造化データを関連づける。
組み込み関数
CloudFormationには、スタックの管理に役立つ組み込み関数があらかじめ用意されている。
関数名
実行内容
Fn::Base64
Base64エンコード
Fn::Cidr
CIDR アドレスブロックの配列を返す
Fn::FindInMap
Mappings セクションから値を返す
Fn::GetAtt
属性の値を返す
Fn::GetAZs
指定されたリージョンのアベイラビリティーゾーンを含んだ配列を返す
Fn::ImportValue
別のスタックの出力値を返す
Fn::Join
複数の値を連結する
Fn::Select
リストから1つのオブジェクトを返す
Fn::Split
文字列を分割する
Fn::Sub
変数を文字列に組み込む
Fn::Transform
テンプレートをカスタム処理するマクロを指定する
Ref
指定したパラメータまたはリソースの値を返す
Fn::Sub
や Ref
で取得した値に対して四則演算等を行うことはできない 。また、CloudFormationテンプレートのキー値に対して、 Fn::Sub
や Ref
などを用いて値を代入することもできないl。
条件関数
条件付きでリソースを作成する場合に使用する。Fn::If以外は、Conditions
セクションで使用する。
関数名
相当する演算子
Fn::And
and
Fn::Equals
==
Fn::If
if
Fn::Not
!=
Fn::Or
or
擬似パラメータ
擬似パラメータと呼ばれる事前に定義されたパラメータを使用することができる。
パラメータ名
内容
AWS::AccountId
スタックが作成されているアカウントの AWS アカウント ID
AWS::NotificationARNs
現在のスタックの通知 Amazon リソースネーム (ARN) のリスト
AWS::NoValue
指定なし
AWS::Partition
AWSパーティション
AWS::Region
AWSリージョン
AWS::StackId
スタックID
AWS::StackName
スタック名
AWS::URLSuffix
ドメインのサフィックス