【2026年新機能】CloudFormation force rollback で UPDATE_ROLLBACK_FAILED から一発復旧する

約19分で読めます by ぽんたぬき
【2026年新機能】CloudFormation force rollback で UPDATE_ROLLBACK_FAILED から一発復旧する

【2026年新機能】CloudFormation force rollback で UPDATE_ROLLBACK_FAILED から一発復旧する

深夜のデプロイ作業中、スタック更新が突然失敗し、自動ロールバックも途中で止まってしまった。画面に表示されるのは UPDATE_ROLLBACK_FAILED の文字。この状態になると、更新も削除も受け付けない「詰み」状態に陥り、途方に暮れた経験をお持ちの方は少なくないはずです。

2026年10月22日、AWSはこの長年の悩みを解消する新機能 force rollback をリリースしました。単一のオプション --force-rollback を追加するだけで、複雑な手作業なしにスタックを正常稼働状態へ戻せます。追加費用はなく、全リージョンで即日利用可能です。本記事では、この機能の仕組みから実践的な使い方、そして見落としがちな「復旧後のドリフト後始末」まで体系的に解説します。


CloudFormation の UPDATE_ROLLBACK_FAILED はなぜ怖いのか

スタックが「何もできない」状態になる仕組み

CloudFormation のスタック更新は、失敗すると自動的にロールバックを試みます。通常はこれで問題ありませんが、ロールバック自体が失敗するケースが存在します。この二重失敗が UPDATE_ROLLBACK_FAILED 状態を生み出します。

スタック更新 → 失敗 → 自動ロールバック開始 → ロールバックも失敗 → UPDATE_ROLLBACK_FAILED

この状態に陥ると、CloudFormation はスタックへのほぼすべての操作をブロックします。update-stack を実行しても拒否され、delete-stack も通常は受け付けません。復旧オペレーション以外の手段がなく、本番環境のデプロイパイプラインが全面停止するというビジネスインパクトに直結します。

よくある発生トリガー

実際の開発現場では、以下のケースで発生しやすいことが知られています。

  • CloudFormation 外でのリソース変更・削除:コンソールから直接 RDS インスタンスや EC2 を削除してしまい、CFn がリソースの存在を期待したままロールバックを試みる
  • スタック操作のタイムアウト:カスタムリソースや Lambda-backed リソースがタイムアウトし、処理が中断する
  • IAM 権限不足:ロールバック時に必要な権限が不足しており、リソースの削除・更新に失敗する
  • cdk deploy の中断:デプロイ途中でプロセスを強制終了すると、スタックがロック状態になる

従来の復旧手順がつらかった理由

従来、UPDATE_ROLLBACK_FAILED からの復旧には continue-update-rollback コマンドの --resources-to-skip オプションを使う必要がありました。しかしこの方法には大きな手間が伴います。

まず、スタックのイベントログを遡り、ロールバックに失敗したリソースを1件ずつ特定する必要があります。次に、それらの論理 ID を --resources-to-skip に手動で列挙します。ネストスタック構成では <親スタック名>-<ネスト名>.<論理ID> という形式での記述が求められ、調査コストが格段に上がります。さらに、1つでも漏れがあると復旧が再度失敗し、試行錯誤のループに入ります。深夜インシデントの中でこの作業を正確に行うのは、精神的にも技術的にも相当な負担でした。


force rollback とは何か — 2026年10月リリースの新機能

一言でいうと「失敗リソースを自動スキップして一括完了」

force rollback は、UPDATE_ROLLBACK_FAILED 状態のスタックを UPDATE_ROLLBACK_COMPLETE へ単一オペレーションで遷移させる機能です。これまで人間が担当していた「どのリソースがロールバックに失敗したか」の特定を、CloudFormation 側が自動的に行います。

Before / After 比較

観点 従来(--resources-to-skip) force rollback
失敗リソースの特定 手動(イベントログ調査) 自動
ネストスタック スタックごとに論理 ID 調査 一括対応
試行回数 漏れがあれば再実行 原則 1 回
復旧時間 数十分〜数時間 数分

ネストスタック構成での恩恵が特に大きく、子スタックの失敗が親スタックに連鎖するケースでも一括処理できる点は実務上の大きなメリットです。

利用条件とコスト

  • 追加費用なし:既存の CloudFormation 利用費用の中に含まれます
  • 全リージョン対応:商用リージョンで即日利用可能
  • 対応インターフェース:AWS CLI、SDK、AWS CDK、AI エージェント経由のワークフローすべてに対応

実践:force rollback の使い方

基本コマンド

aws cloudformation continue-update-rollback \
    --stack-name MyStack \
    --force-rollback

これだけです。従来の --resources-to-skip で必要だったリソース特定作業が不要になり、コマンド 1 行で復旧が完了します。

従来方式との書き方の違い

# 従来:失敗リソースを手で列挙する必要があった
aws cloudformation continue-update-rollback \
    --stack-name WebInfra \
    --resources-to-skip myCustom WebInfra-Compute-Asg.myAsg WebInfra-Storage.DB

重要な注意点として、--force-rollback と --resources-to-skip は同時指定できません。両方を指定するとエラーになります。force rollback を使う場合は --resources-to-skip を省略してください。

実行後にリソースはどう見えるか

force rollback が完了すると、スキップされたリソースのステータスは UPDATE_COMPLETE として記録されます。イベントログの理由欄には次のように表示されます。

Resource skipped during UpdateRollback

一見「正常に完了した」ように見えますが、これは危険な誤解の元です。このリソースは CloudFormation テンプレートが期待する状態とは異なる実態を持っている可能性があります。この不整合への対処が、後述する「復旧後の後始末」の本質です。

Express Mode との組み合わせで高速化

CloudFormation Express Mode を活用する環境では、以下のように組み合わせることでロールバック処理をさらに高速化できます。

aws cloudformation continue-update-rollback \
    --stack-name MyStack \
    --force-rollback \
    --deployment-config '{"mode": "EXPRESS"}'

障害シナリオ別・復旧シミュレーション

シナリオ 1 — CloudFormation 外で RDS インスタンスを削除してしまった

症状: 本番 RDS インスタンスをコンソールから誤って削除。その後の CFn 更新が別の理由で失敗し、ロールバック時に CFn が「削除されたはずの RDS を元に戻す」操作を試みるが対象が存在せず失敗。UPDATE_ROLLBACK_FAILED に。

force rollback 適用後にやるべきこと: まずロールバックを完了させ、スタックを操作可能な状態に戻します。その後、削除された RDS を手動で再作成するか、テンプレートから該当リソース定義を取り除いた上で import 操作を活用することを検討してください。いずれにせよ、テンプレートと実体を一致させる作業が必須です。

シナリオ 2 — スタック操作がタイムアウトして中途半端な状態

症状: Lambda-backed カスタムリソースが処理に時間がかかりすぎてタイムアウト。ロールバック中も同じカスタムリソースが呼ばれてタイムアウトを繰り返し、UPDATE_ROLLBACK_FAILED に。

対応方針: force rollback でカスタムリソースの処理をスキップし、スタックを UPDATE_ROLLBACK_COMPLETE に戻します。その後、Lambda 関数のタイムアウト設定を延長するか、カスタムリソースのロジック自体を見直した上で再デプロイします。

シナリオ 3 — ネストスタックの連鎖失敗

症状: マイクロサービス構成の本番環境で子スタックの 1 つが更新失敗。その失敗が親スタックに伝播し、全階層が UPDATE_ROLLBACK_FAILED に。従来なら各階層のスタックを個別に調べて論理 ID を収集する必要があった。

force rollback の効果: 親スタックに対して 1 度 force rollback を実行するだけで、ネスト全体の失敗リソースが自動スキップされ一括復旧できます。これが force rollback のメリットが最も際立つシナリオです。

シナリオ 4 — CDK デプロイ失敗でスタックがロック

症状: cdk deploy 中にリソース作成エラーが発生。cdk rollback を試みたが解消しない。スタックが UPDATE_ROLLBACK_FAILED のまま次のデプロイができない状態に。

CLI に降りるべき判断ポイント: cdk rollback が失敗する場合、または何度試みても状態が変わらない場合は、AWS CLI の continue-update-rollback --force-rollback に切り替えます。CDK はあくまで CloudFormation API のラッパーであるため、CLI から直接操作することは常に有効な手段です。


CDK / IaC 運用に組み込む

cdk rollback と continue-update-rollback --force-rollback の使い分け

cdk deploy が失敗した
    ↓
cdk rollback を試みる
    ↓ 成功 → そのまま原因修正・再デプロイへ
    ↓ 失敗(スタックが UPDATE_ROLLBACK_FAILED のまま)
        ↓
        aws cloudformation continue-update-rollback --force-rollback

基本方針として、CDK で始めた作業は CDK の範囲で完結させるのが望ましいですが、cdk rollback が機能しない場合は迷わず CLI に降りることを推奨します。

CI/CD パイプラインでの扱い方

デプロイ失敗を検知した際に自動で force rollback を実行したくなりますが、これは原則 NG です。理由はシンプルで、force rollback はドリフト(テンプレートと実リソースの不整合)を生む操作であり、そのまま次のデプロイが走ると連鎖障害を引き起こすリスクがあるためです。

ベストプラクティスとして、CI/CD パイプラインでは以下の構成を推奨します。

  • 自動化する範囲: UPDATE_ROLLBACK_FAILED の検知と担当者への通知
  • 人間の判断を挟む範囲: force rollback の実行、ドリフト確認、テンプレートとの整合作業

IaC の原則との折り合い

IaC の根幹は「テンプレートが唯一の真実(Single Source of Truth)」であることです。force rollback は一時的にその原則を崩す操作です。この認識を持った上で、以下の運用ルールをチームで共有しておくことを強く推奨します。

  • CloudFormation 外でのリソース直接変更の禁止を組織ルールとして明文化する
  • ドリフト検出の定期実行(週次・月次)をスケジュール設定する
  • ChangeSet の事前確認必須化を CI/CD に組み込む

【最重要】force rollback 後に必ずやる 4 ステップ

force rollback でスタックが UPDATE_ROLLBACK_COMPLETE になっても、作業はそこで終わりではありません。この 4 ステップを省略すると、次回デプロイ時に再度の障害を招く可能性があります。

ステップ 1 — ドリフト検出を実行する

# スタック全体のドリフト検出を開始
aws cloudformation detect-stack-drift \
    --stack-name MyStack

# 特定リソースのドリフト検出
aws cloudformation detect-stack-resource-drift \
    --stack-name MyStack \
    --logical-resource-id MyRDSInstance

注意点: force rollback でスキップされたリソースは、ドリフト検出の結果で NOT_CHECKED として扱われます。これは「ドリフトがない」という意味ではなく「確認できていない」という意味です。スキップされたリソースは特に重点的に確認してください。

ステップ 2 — drift-aware change set で差分を可視化

ドリフト検出完了後、CloudFormation コンソールまたは CLI からドリフト対応の変更セット(change set)を作成します。テンプレートと実リソースのズレを事前に可視化することで、次のデプロイで何が変更されるかを安全に把握できます。

aws cloudformation create-change-set \
    --stack-name MyStack \
    --change-set-name PostRollbackReview \
    --template-body file://template.yaml \
    --include-nested-stacks

ステップ 3 — 不整合リソースを手動で整合させる

ドリフトが確認されたリソースについて、以下の 2 つのアプローチから選択します。

  • テンプレートを実体に合わせる: リソースの現状を正とみなし、テンプレート定義を実態に沿って修正する。急ぎの復旧時に現実的な選択肢。
  • 実体をテンプレートに戻す: テンプレートを正として、実リソースを手動または import 操作で整合させる。IaC 原則に忠実なアプローチ。

どちらを選ぶかはビジネス要件と状況によりますが、判断基準を事前にチームで合意しておくことが重要です。

ステップ 4 — 次回デプロイを実行

整合作業が完了したら、通常の update-stack または cdk deploy で次のデプロイを実行します。ドリフトを放置したまま次のデプロイを行うと、CloudFormation が予期しないリソース変更を試みて再度スタックが障害状態に陥る可能性があります。このリスクは無視できません。

推奨ワークフロー: force rollback → detect-stack-drift → drift-aware change set 作成・確認 → 手動整合 → 通常デプロイ


よくある質問(FAQ)

force rollback は無料ですか?

はい、追加費用はかかりません。CloudFormation 自体の利用は無料であり、force rollback もその一部として提供されています。

すべてのリージョンで使えますか?

2026年10月22日のリリース時点で全商用リージョンに対応しています。GovCloud については AWS の公式ドキュメントで最新情報をご確認ください。

--resources-to-skip はもう不要ですか?

ほとんどのケースで force rollback が代替できますが、--resources-to-skip が有効なシナリオも残ります。「特定のリソースだけをスキップし、その他はロールバックを継続させたい」という細かな制御が必要な場合は従来方式が適しています。force rollback は「全失敗リソースをまとめてスキップ」するため、より粒度の高い制御が必要な場面では使い分けが必要です。

どのリソースがスキップされたか後から確認できますか?

はい。スタックのイベントログで確認できます。スキップされたリソースには Resource skipped during UpdateRollback という理由が記録されています。また、ドリフト検出の結果でも NOT_CHECKED として識別されます。

force rollback でも復旧できないケースはありますか?

スタック自体が削除不可能な状態(DELETE_FAILED など)になっている場合や、リソースの依存関係が複雑に絡み合っている場合は、force rollback 単体では解決できないことがあります。このような場合は AWS サポートへの問い合わせを検討してください。


まとめ — 「復旧の速さ」と「ドリフトの後始末」をセットで覚える

AWS CloudFormation の force rollback は、これまで数十分〜数時間を要していた UPDATE_ROLLBACK_FAILED からの復旧作業を、単一コマンドで数分以内に完了させる実用的な新機能です。

ただし、この機能の本質を正しく理解することが重要です。**ゴールは UPDATE_ROLLBACK_COMPLETE ではなく「テンプレートと実体が一致した状態」**です。force rollback はあくまで緊急脱出の手段であり、復旧後のドリフト確認と整合作業をセットで実施して初めてインシデントが完了します。

段階的に理解を深めていきましょう。まずは手元の検証用スタックで一度 force rollback を試してみてください。その際、あえてリソースをコンソールから削除してから実行すると、スキップの動作とドリフト状態を実感を伴って確認できます。そして、チームの運用ランブックに「force rollback 後の 4 ステップ」を追記することをお勧めします。深夜のインシデント対応時こそ、手順書の存在が冷静な判断を支えます。


参考リンク

関連記事

【2026年版】Claude Code セキュリティプロンプト集|OWASP Top 10対応・コピペで使える脆弱性レビュー20選

【2026年版】Claude Code セキュリティプロンプト集|OWASP Top 10対応・コピペで使える脆弱性レビュー20選

【2026年版】Claude Code セキュリティプロンプト集|OWASP Top 10対応・コピペで使える脆弱性レビュー20選 AI生成コードの15〜25%に脆弱性が含まれるという調査結果があります。開発速度が上がるほど、セキュリティレビューがボトルネックになる構造は避けられません。本記事では、Claude Codeに投げるだけで脆弱性を洗い出せるプロンプトを、OWASP Top 10:202...

ESLint+PrettierからOxlint+Oxfmtへ — REALITYのモノレポでlintを9.3秒→2.95秒にした全手順

ESLint+PrettierからOxlint+Oxfmtへ — REALITYのモノレポでlintを9.3秒→2.95秒にした全手順

ESLint+PrettierからOxlint+Oxfmtへ — REALITYのモノレポでlintを9.3秒→2.95秒にした全手順 約460ファイルのモノレポでESLint+PrettierをOxlint+Oxfmtに置き換えた結果、lint実行時間が9.29秒→2.95秒(約68%削減)を達成しました。依存パッケージは14種から3種へ、設定ファイルも大幅にシンプルになっています。速度ベンチマ...

Aurora/RDS オンデマンドキャパシティ予約でDR・マイグレーションの「キャパシティ不足」を防ぐ

Aurora/RDS オンデマンドキャパシティ予約でDR・マイグレーションの「キャパシティ不足」を防ぐ

Aurora/RDS オンデマンドキャパシティ予約でDR・マイグレーションの「キャパシティ不足」を防ぐ Amazon Aurora・RDSを本番運用しているエンジニアであれば、一度は耳にしたことがあるのではないでしょうか。フェイルオーバーや復旧手順を実行した直後に表示される エラーの恐ろしさを。2026年10月、そのリスクを根本から断ち切る新機能「オンデマンドキャパシティ予約(On-Demand...

GitLab に CVSS 10.0 の緊急パッチ ― 正規表現コンパイラの整数オーバーフローとは何か、今すぐやるべきこと

GitLab に CVSS 10.0 の緊急パッチ ― 正規表現コンパイラの整数オーバーフローとは何か、今すぐやるべきこと

GitLab に CVSS 10.0 の緊急パッチ ― 正規表現コンパイラの整数オーバーフローとは何か、今すぐやるべきこと はじめに:2026年10月21日、GitLab が7バージョン同時リリース 2026年10月21日、GitLab は 19.5.1 / 19.4.3 / 19.3.6 / 19.2.9 / 19.1.9 / 19.0.10 / 18.11.13 の7バージョンを同時リリースし...

コメント

0/2000