DevOpsエンジニアがAWS CloudFormationを使用してEC2インスタンスをデプロイしています。UserDataスクリプトでアプリケーションのインストールを行いますが、完了まで最大15分かかります。CloudFormationスタックは、アプリケーションのインストールが完全に完了した後にのみ CREATE_COMPLETE 状態になる必要があります。正しい実装方法はどれですか?
正解: EC2インスタンスリソースに CreationPolicy を設定してタイムアウト時間を指定し、UserDataスクリプトの末尾で cfn-signal コマンドを実行する。 CreationPolicy をEC2インスタンスリソースに設定すると、CloudFormationは指定数のシグナルを受信するまでリソースの CREATE_COMPLETE への遷移を待機します。UserDataスクリプトの末尾で `cfn-signal -e $? --region <region> --stack <stack-name> --resource <logical-id>` を実行することで、インストール完了(または失敗)をCloudFormationに通知できます。タイムアウト時間は ISO 8601 形式(例: PT15M)で指定します。 選択肢Aは、DependsOn は別リソースの作成順序を制御するもので、EC2インスタンス自身のUserData処理完了を待つ目的では使用できません。WaitConditionHandle+WaitCondition の旧来の方法もありますが、CreationPolicy の方がシンプルで現在の推奨です。 選択肢Cは、UpdatePolicy はAuto Scalingグループの更新動作を制御するもので、EC2インスタンスの作成完了通知には使用しません。cfn-init はCloudFormationメタデータ(AWS::CloudFormation::Init)の設定を適用するツールであり、cfn-signalとは別機能です。 選択肢Dは、Lambdaカスタムリソースでも実装可能ですが、CreationPolicy+cfn-signal という専用の仕組みが存在するため、わざわざ複雑なカスタムリソースを実装する必要はありません。