参考
creation policyとは
-
AWS CloudFormationスタックでAmazon EC2インスタンスをプロビジョニングする場合、ソフトウェアパッケージのインストールやbootstrap処理など、追加のアクションを指定してインスタンスを設定できるようにするもの。
-
通常、CloudFormationは、インスタンスが正常に作成された後、(たとえ内部でinitスクリプトが完了していなくても)スタックの作成を続行する。
-
CreationPolicyを使用するとアクションが完了した後にのみ、CloudFormationがスタックの作成を続行できるように設定が可能。
- つまり、スタックの作成が成功後にアプリケーションが準備完了であることを確実にするためにCreationPolicyを使用する。
-
CreationPolicyは、CloudFormationが指定された数のシグナルを受信するまでインスタンスを待機するようCloudFormationに指示する。このポリシーは、CloudFormationがインスタンスを作成するときにのみ有効となる。
- 下記の例の場合、5分後に3つの信号が受信されない場合、CloudFormationはスタックの作成をすぐに停止し、Auto Scalingグループに作成に失敗したというラベルを付ける。したがって、インスタンスとアプリケーションをデプロイするのに十分な時間を与えるタイムアウト期間を指定する。
"AutoScalingGroup": {
"Type": "AWS::AutoScaling::AutoScalingGroup",
"Properties": {
...
},
"CreationPolicy": {
"ResourceSignal": {
"Count": "3",
"Timeout": "PT5M"
}
}
}
リソースのシグナリング
- プロビジョニングしているインスタンスから信号を簡単に送信できる。これらのインスタンスでは、EC2ユーザーデータスクリプトのcfn-initヘルパースクリプトを使用して、アプリケーションをデプロイする必要がある。 cfn-initスクリプトの後に、次の例のように、cfn-signalヘルパースクリプトを実行するコマンドを追加する。
"UserData": {
"Fn::Base64": {
"Fn::Join" [ "", [
"/opt/aws/bin/cfn-init ",
...
"/opt/aws/bin/cfn-signal -e $? ",
" --stack ", { "Ref": "AWS::StackName" },
" --resource AutoScalingGroup " ,
" --region ", { "Ref" : "AWS::Region" }, "n"
] ]
}
}
-
CloudFormationにシグナルを送るとき、どのスタックとどのリソースにシグナルを送るかを知らせる必要がある。この例では、cfn-signalコマンドは、インスタンスをプロビジョニングしているスタック、リソースの論理ID(AutoScalingGroup)、およびスタックが作成されているリージョンを指定する。
-
CreationPolicy属性とcfn-signalヘルパースクリプトを使用すると、アプリケーションが正常にデプロイされたときにのみスタックが正常に作成されるようにすることができる。