本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
繼續復原更新
堆棧進入 AWS CloudFormation 無法在更新期間回滾所有更改的UPDATE_ROLLBACK_FAILED
狀態。例如,您可能有一個堆疊,開始復原至已刪除之外的舊資料庫執行個體 CloudFormation。由於 CloudFormation 不知道資料庫已刪除,因此會假設資料庫執行個體仍然存在,並嘗試復原至該執行個體,進而導致更新復原失敗。
當堆疊處於 UPDATE_ROLLBACK_FAILED
狀態時,您可以繼續將其復原回運作中狀態 (UPDATE_ROLLBACK_COMPLETE
)。您無法更新處於 UPDATE_ROLLBACK_FAILED
狀態的堆疊。但是,若您可以繼續復原它,您可以讓堆疊返回其原始設定,並再次嘗試更新。
在大多數情況下,您必須修正造成更新復原失敗的錯誤,才能繼續復原您的堆疊。在其他情況下,您可以繼續復原更新,而無須進行任何變更 (例如:當堆疊操作逾時時)。
注意
若您使用巢狀堆疊,復原父系堆疊也會嘗試復原所有子堆疊。
繼續復原更新 (主控台)
開啟主 AWS CloudFormation 控台,網址為 https://console.aws.amazon.com/cloudformation
。 -
選取您希望更新的堆疊,選擇 Stack actions (堆疊動作),然後選擇 Continue update rollback (繼續更新復原)。
如果沒有任何解決方案起故障診斷錯誤作用,則可以使用高級選項跳過 CloudFormation無法成功回滾的資源。您必須尋找並輸入您希望跳過的資源邏輯 ID。僅指定在正向更新期間進入該
UPDATE_FAILED
狀態的資源,UpdateRollback
而不是在正向更新期間進入。警告
CloudFormation 設置指定資源的狀態,
UPDATE_COMPLETE
並繼續回滾堆棧。在復原完成後,跳過資源的狀態會和堆疊範本中資源的狀態不一致。在執行下一次堆疊更新前,您必須更新堆疊或資源,使其和彼此保持一致。若您未執行此作業,後續的堆疊更新可能會失敗,堆疊可能會變得無法復原。指定成功復原您堆疊所需要的最小資源數。例如,失敗的資源更新可能會導致依存資源失敗。在這種情況下,您可能不需要跳過依存資源。
若要跳過屬巢狀堆疊的部分資源,請使用下列格式:
。若您希望在NestedStackName
.ResourceLogicalID
Type: AWS::CloudFormation::Stack
清單中指定堆疊資源 (ResourcesToSkip
) 的邏輯 ID,則其對應的內嵌堆疊必須處於下列任一狀態:DELETE_IN_PROGRESS
、DELETE_COMPLETE
,或DELETE_FAILED
。
繼續復原更新 (AWS CLI)
-
使用
aws cloudformation continue-update-rollback
命令搭配stack-name
選項,指定您希望繼續復原的堆疊 ID。
使用 ResourcesToSkip
復原巢狀堆疊階層。
下圖顯示處於 UPDATE_ROLLBACK_FAILED
狀態的巢狀堆疊階層。在此範例中,WebInfra
根堆疊具有兩個巢狀堆疊:WebInfra-Compute
和 WebInfra-Storage
,其也具有一或多個巢狀堆疊。
![顯示三層巢狀堆疊階層的圖表。](images/cfn-update-stack-continue-update-rollback_nested-stacks.png)
注意
為求簡潔,此範例中的堆疊名稱已進行截斷。子堆棧名稱通常由生成 CloudFormation 並包含唯一的隨機字符串,因此實際名稱可能不是用戶友好的。
若要使用 continue-update-rollback
讓根堆疊成功進入可運作狀態,您必須使用 resources-to-skip
參數跳過復原失敗的資源。在此範例中,resources-to-skip
會包含下列項目:
myCustom
WebInfra-計算轉換米亞斯 G
WebInfra-計算磅。 myLoadBalancer
WebInfra-Storage.DB
下面的例子是完整的 AWS CLI 命令:
$
aws cloudformation continue-update-rollback --stack-name WebInfra \
--resources-to-skip myCustom WebInfra-Compute-Asg.myAsg WebInfra-Compute-LB.myLoadBalancer WebInfra-Storage.DB
我們使用
格式指定巢狀堆疊的資源,但若為根堆疊的資源 (例如 myCustom),我們只會指定邏輯 ID。NestedStackName
.ResourceLogicalID
尋找巢狀堆疊的堆疊名稱
您可以在子堆疊的堆疊 ID 或 Amazon Resource Name (ARN) 中找到其名稱。在下列範例中,堆疊名稱是WebInfra儲存區- Z2VKC706xKxt:
arn:aws:cloudformation:us-east-1:123456789012:stack/WebInfra-Storage-Z2VKC706XKXT/ea9e7f90-54f7-11e6-a032-028f3d2330bd
尋找巢狀堆疊的邏輯 ID
您可以在子堆疊的父系範本定義中找到其邏輯 ID。在圖表中,WebInfra-Storage-DB
子堆疊的 LogicalId
為位於其父系 WebInfra-Storage
中的 DB。
在 CloudFormation 主控台中,您也可以在 [資源] 索引標籤或 [事件] 索引標籤上的堆疊資源的 [邏輯 ID] 欄中找到邏輯 ID。