| status | 内容 | 操作 |
|---|---|---|
| ROLLBACK_COMPLETE | 新規スタック作成失敗(新規スタック作成時にしか発生しない) | 変更セット作成不可。DELETE(CodePipelineはDELETE_ONLY)のみ可能 |
| UPDATE_ROLLBACK_COMPLETE | 既存スタックの更新失敗。更新前にロールバックが成功 | 変更セットを作成可能 |
| UPDATE_ROLLBACK_FAILED | 既存スタックの更新失敗。更新前にロールバック失敗 | 変更セットを作成不可 |
| DELETE_FAILED | リソースの削除に失敗 | DELETEのみ可能 |
ROLLBACK_COMPLETE、UPDATE_ROLLBACK_COMPLETEはロールバックが成功しているので適切に対応すれば問題がない。
ROLLBACK_COMPLETE => CodePipelineの場合はActionModeをDELETE_ONLYにして再実行(CHANGE_SET_EXECUTEは実行しない)UPDATE_ROLLBACK_COMPLETEは変更セットを作成できるので問題ない問題になるのはロールバックが失敗したUPDATE_ROLLBACK_FAILEとDELETE_FAILED。
スタックが UPDATE_ROLLBACK_FAILED 状態の場合、動作状態 (UPDATE_ROLLBACK_COMPLETE) までロールバックを続けることができます。」
When in this state, you can delete the stack or continue rollback
UPDATE_ROLLBACK_FAILEDは、スタックを削除するか元の状態に戻るまでロールバックを続けるかの2つのオペレーションのみ可能。
スタックのロールバックを続けるにはAWS CLI continue-update-rollback を使用する。
スタック操作は AWS CLI を使用することが多いので AWS CLI の CloudFormation ドキュメントを参照してください。
cloudformation Available Commands
CodePipeline は以下フローを前提とします(必ず変更セットを作成してください)。
Approve で 承認するDeploy を実行本文では変更セットが意図したものであることを確認していることを前提にします。
変更セットが意図したものであっても Deploy が意図通りに終了しない場合の対策をまとめます。
UPDATE_COMPLETE => 問題ない(これを想定して Deploy する)UPDATE_ROLLBACK_COMPLETE => CodePipeline が稼働する前のリソースの状態に戻るので良しとします
正しくコードを修正することで改善されるためCIを回していくことが可能なためですスタックの出力( Outputs )が他のスタックで使用されている場合。
リソース(のまとまり)ごとに CloudFormation テンプレートを分けており他のスタックの出力を使用する場合に発生します。
Export Foo cannot be updated as it is in use by BAR
UDDATE_ROLLBACK_FAILEDUPDATE_IN_PROGRESS のスタックがあり Deploy が終了しないCodePipeline を強制的に停止する必要がある変更セットは問題なく作成。ただし該当のタスク定義を使用している ECS サービスが起動できず(SSMパラメータを読み込めず)、更新失敗と再更新を繰り返して UPDATE_IN_PROGRESS のまま CodePipeline が終了しません。
実行を停止 を実施 => CodePipeline は停止したが該当スタックの UPDATE_IN_PROGRESS は解消されないスタックアクション から スタックの更新をキャンセル
AWS CLI cancel-update-stack を実施してもよい
CodePipeline の停止スタックの更新をキャンセル の順に試した最初に スタックの更新をキャンセル すれば良かった。
上記の場合は該当スタック以外は Deploy されている可能性が高いので、整合性を確かめる。
DELETE_FAILEDDELETE_FAILED状態のスタックはDELETEしかできない