AWS CloudformationでRollback failedになる
これは、通常のRoll Backとどのように異なるのでしょうか。
Read権限だとロールバックを続ける、ができないので、高い権限が必要になったりと一手間かかるこのRoll Back Failed、ですが、
何が嬉しいか。
これを主にEC2インスタンスに着目して見ていきます。
途中の状態を見られる
Auto Scaling Groupで、EC2を、max 1, min 1 , desired 1に設定していたとします。
この時、APのCFNがRoll Back Failedになっていたとしましょう。
これは何が起こるでしょうか。
次の2つのEC2が残ることになります。
- 更新が失敗したEC2
- ロールバックしたEC2
これにより、なぜ更新に失敗したのかを失敗したEC2を確認することで調査することができます。
これがロールバックコンプリートになっているとどうなるでしょうか?
例えばuserdataの特定の処理失敗時にログをs3にアップロードするなどのコードを実装していなければ、失敗した方のインスタンスはターミネートされ、なんの手がかりもない、ロールバックが完了したインスタンスだけが残ってしまうのです。
ロールバックを続ける、がエラーになる時。
ロールバック失敗後に、ロールバックを続ける、とエラーになり、
ロールバックコンプリートできない場合があります。
ロールバックの原因となった何かを残した状態からの復帰が困難なため発生すると思われます。
この時取りうる手段としては以下の三パターン考えられると思います。
1. 手動でロールバックしやすい状態に持っていく。
この時は、先ほどのようなEC2インスタンスが残っている状態であれば、そのEC2インスタンスのASGを一旦 max 0, min 0, desired 0 に変更することで、
進めることができます。
2. ロールバックオプションを使う。
また、コンソール上にロールバックにおいて、オプションがあり、それを使っても強制的にRoll Backを続けることはできます。
3. (Stackの初回作成時のみ)スタックを削除する。
Stack初回作成時でRoll Back Failedとなった場合、戻す方法が無く、スタック削除が必要になる場合もあるようです。
しかし、商用環境では特に、スタック削除は安易にしないように注意してください。
Roll Back Failed機能は便利
どのインスタンスがどの状態で失敗したのかを確認できるように、失敗したインスタンスをターミネートせず保持して中身を確認できるように残してくれます。
そんなRoll Back Failed機能は便利なのでぜひ活用してみてください。
関連ドキュメント
スタックの更新が失敗した後の対応
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-continueupdaterollback.html
スタックリソースの更新動作を理解する
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html
Continue rolling back an update
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-continueupdaterollback.html