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_FAILED
UPDATE_IN_PROGRESS
のスタックがあり Deploy
が終了しないCodePipeline
を強制的に停止する必要がある変更セットは問題なく作成。ただし該当のタスク定義を使用している ECS サービスが起動できず(SSMパラメータを読み込めず)、更新失敗と再更新を繰り返して UPDATE_IN_PROGRESS
のまま CodePipeline
が終了しません。
実行を停止
を実施 => CodePipeline
は停止したが該当スタックの UPDATE_IN_PROGRESS
は解消されないスタックアクション
から スタックの更新をキャンセル
AWS CLI cancel-update-stack を実施してもよいCodePipeline の停止
スタックの更新をキャンセル
の順に試した最初に スタックの更新をキャンセル
すれば良かった。
上記の場合は該当スタック以外は Deploy
されている可能性が高いので、整合性を確かめる。
DELETE_FAILED
DELETE_FAILED
状態のスタックはDELETE
しかできない