觀點 · 資訊分享

CloudFormation 新增強制回滾:堆疊更新失敗又回不去,現在加一個選項就能救

AWS 在 10 月 22 日讓 CloudFormation 的繼續回滾多了強制選項。卡在回滾失敗狀態的堆疊,不必再逐一列出資源來跳過,一個指令就能回到可以再部署的狀態,所有 Region 都能用、不另外收費。

發布
2026-10-22
篇幅
約 4 分鐘 · 2,021 字
結構
8 節 + 4 題常見問題
標籤
#AWS#CloudFormation#基礎設施即程式碼#AWS CDK
CloudFormation 新增強制回滾:堆疊更新失敗又回不去,現在加一個選項就能救

一句話看懂:AWS CloudFormation 新增「強制回滾」,更新失敗又回不去的堆疊,現在加一個選項就能一次救回。

CloudFormation 新增強制回滾資訊圖卡:更新失敗又回不去的堆疊,現在一個選項就能救回

先用白話講:CloudFormation 的「回滾」是什麼?

想像你在整理一間辦公室:先照著設計圖搬家具(更新),搬到一半發現不對,只好照原樣搬回去(回滾)。可是搬回去的時候才發現,有一張桌子早就被別人拿走了,找不到就搬不回,整個工作卡在半路,什麼都不能再動。

CloudFormation 是 AWS 用「設計圖」(一份模板檔)自動建立伺服器、資料庫等雲端資源的服務,一整組資源叫做堆疊(Stack)。更新堆疊失敗時,它會自動回滾到上一個正常的狀態;如果連回滾也失敗,堆疊就會停在 UPDATE_ROLLBACK_FAILED。這時堆疊不能再更新,只能先把回滾做完。

發生什麼事

AWS 在 10 月 22 日宣布,CloudFormation 的更新回滾新增強制回滾(force rollback):

  • 有些資源無法自動回滾時,現在可以一個操作完成整個回滾,把堆疊帶回可以再部署的狀態
  • 從 AWS CLI、SDK、AWS CDK 到 AI 代理都能使用
  • 仍然需要人處理的資源(例如在 CloudFormation 之外被改動過的),會被記錄下來,讓你在下次部署前檢查
  • 所有 Region 都能用,不另外收費

以前和現在差在哪

以前 現在
怎麼救 自己找出每個卡住的資源,把邏輯 ID 逐一列出來,用 --resources-to-skip 跳過 加上 --force-rollback,讓 CloudFormation 自己跳過
巢狀堆疊 要用「巢狀堆疊名稱.資源 ID」的格式逐一指定 巢狀堆疊裡的資源也一併處理
做完之後 自己記得哪些被跳過 被跳過的資源會記下原因,方便回頭查

給開發者的技術細節

aws cloudformation continue-update-rollback --stack-name MyStack --force-rollback
  • 不能和 --resources-to-skip 放在同一個請求;只想跳過特定資源,就只用 --resources-to-skip
  • CloudFormation 只會跳過「回滾失敗」而變成 UPDATE_FAILED 的資源;更新階段就失敗的資源不會被跳過
  • 被跳過的資源狀態會變成 UPDATE_COMPLETE,原因欄位寫著 Resource skipped during UpdateRollback
  • 做完之後,被跳過的資源和模板內容可能不一致。AWS 建議下次部署前先建立「感知漂移(drift)的變更集」檢查差異;漂移偵測時這些資源會顯示為 NOT_CHECKED,可以對單一資源執行 DetectStackResourceDrift 確認

什麼時候該用?

  • 能修好原因就先修好:官方文件寫,多數情況要先排除造成回滾失敗的錯誤;像操作逾時這類暫時性問題,直接繼續回滾就行
  • 修不好才強制:例如官方文件舉的例子,資料庫在 CloudFormation 之外被刪掉,回滾時找不到它而卡住
  • 不要當成預設選項:文件警告,跳過的資源和模板不一致,之後的更新可能再失敗,嚴重時堆疊會無法救回

我的看法

用 CloudFormation 或 CDK 管基礎設施的人,多半都遇過堆疊卡在回滾失敗的狀態:明明只想改一個小設定,結果整個堆疊被鎖住,查資源、列 ID、重試,半天就過去了。這次把「找出所有卡住的資源」這件事交給 CloudFormation 自己做,確實省下最煩的那一段。

不過我會把它當成最後手段,而不是方便鍵。強制跳過的資源等於「模板說一套、現實是另一套」,下一次部署如果沒先對齊,只是把問題往後延。比較安全的做法,是強制回滾之後馬上看漂移結果,確定每個被跳過的資源現在長怎樣,再決定要修模板還是修資源。另外,如果平常有人會手動去改雲端主控台的設定,這個功能提醒的其實是一件更根本的事:資源盡量只透過模板改。

名詞小辭典

  • 基礎設施即程式碼(IaC):用程式或模板檔描述伺服器、網路、資料庫,讓雲端資源能像程式碼一樣被版本控管、重複建立。
  • 堆疊(Stack):CloudFormation 裡由同一份模板建立的一整組雲端資源,更新、刪除都以堆疊為單位。
  • 漂移(Drift):雲端上資源的實際設定,和模板描述的內容不一樣,通常是有人在模板之外手動改過。
  • 變更集(Change Set):正式更新前先預覽「會改哪些東西」的清單,確認沒問題再執行。

資料來源

常見問題

CloudFormation 的 UPDATE_ROLLBACK_FAILED 是什麼狀態?
堆疊更新失敗後,CloudFormation 會自動回滾到上一個正常狀態;如果連回滾也失敗,堆疊就停在這個狀態。這時不能再更新堆疊,只能先把回滾做完。
強制回滾要怎麼下指令?
在 AWS CLI 執行 aws cloudformation continue-update-rollback --stack-name 堆疊名稱 --force-rollback。官方文件寫明,這個選項不能和 --resources-to-skip 放在同一個請求裡。
強制回滾之後有什麼要注意?
被跳過的資源狀態會顯示為 UPDATE_COMPLETE,但實際內容可能和模板不一致。官方建議在下次部署前先建立感知漂移的變更集檢查差異,否則之後的更新可能再失敗。
遇到回滾失敗,一律用強制回滾就好嗎?
不建議。官方文件說多數情況要先修好造成失敗的原因;像操作逾時這類暫時性問題,直接繼續回滾即可。確定修不好時,才使用強制回滾。
LINE