繼續復原更新 - AWS CloudFormation

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

繼續復原更新

有時候,當 CloudFormation 嘗試復原堆疊更新時,無法回復更新過程中所做的所有變更。這種情況稱為 UPDATE_ROLLBACK_FAILED 狀態。例如,您可能會有一個堆疊,其開始復原回已在 CloudFormation 之外刪除的舊資料庫執行個體。因為 CloudFormation 不知道資料庫已遭刪除,它會假設資料庫執行個體仍然存在,並嘗試復原回該資料庫執行個體,造成更新復原失敗。

UPDATE_ROLLBACK_FAILED 狀態的堆疊無法更新,但可以復原為工作狀態 (UPDATE_ROLLBACK_COMPLETE)。使堆疊回到其原始設定後,您可以嘗試再次更新。

在大多數情況下,您必須修正造成更新復原失敗的錯誤,才能繼續復原您的堆疊。在其他情況下,您可以繼續復原更新,而無須進行任何變更 (例如:當堆疊操作逾時時)。

注意

若您使用巢狀堆疊,復原父系堆疊也會嘗試復原所有子堆疊。

繼續復原更新 (主控台)
  1. 請登入 AWS 管理主控台,開啟位於 https://console.aws.amazon.com/cloudformation 的 CloudFormation 主控台。

  2. 在畫面頂端的導覽列上,選擇堆疊所在的 AWS 區域。

  3. 堆疊頁面上,選擇要更新的堆疊,選擇堆疊動作,然後選擇繼續更新復原

    故障診斷錯誤 中的任何解決方案都無效,您可以使用進階選項,跳過 CloudFormation 無法成功復原的資源。您必須尋找並輸入您希望跳過的資源邏輯 ID。請只指定在 UpdateRollback 期間進入 UPDATE_FAILED 狀態的資源,而非向前更新期間進入該狀態的資源。

    警告

    CloudFormation 會將指定資源的狀態設為 UPDATE_COMPLETE 並繼續復原堆疊。在復原完成後,跳過資源的狀態會和堆疊範本中資源的狀態不一致。在執行下一次堆疊更新前,您必須更新堆疊或資源,使其和彼此保持一致。若您未執行此作業,後續的堆疊更新可能會失敗,堆疊可能會變得無法復原。

    指定成功復原您堆疊所需要的最小資源數。例如,失敗的資源更新可能會導致依存資源失敗。在這種情況下,您可能不需要跳過依存資源。

    若要跳過屬巢狀堆疊的部分資源,請使用下列格式:NestedStackName.ResourceLogicalID。若您希望在 Type: AWS::CloudFormation::Stack 清單中指定堆疊資源 (ResourcesToSkip) 的邏輯 ID,則其對應的內嵌堆疊必須處於下列任一狀態:DELETE_IN_PROGRESSDELETE_COMPLETE,或 DELETE_FAILED

繼續復原更新 (AWS CLI)

從失敗的巢狀堆疊更新中繼續復原

當您有多個彼此巢狀的堆疊時,可能需要跳過多個嵌套層級的資源,才能讓全堆疊階層回到可運作狀態。

例如,您有一個名為 WebInfra 的根堆疊,其中包含兩個較小的堆疊:WebInfra-ComputeWebInfra-Storage。這兩個堆疊本身也包含各自的巢狀堆疊。

若更新過程中發生問題導致更新失敗,整個堆疊階層可能會進入 UPDATE_ROLLBACK_FAILED 狀態,如下圖所示。

顯示三層巢狀堆疊階層的圖表。
注意

為求簡潔,此範例中的堆疊名稱已進行截斷。子堆疊名稱通常會由 CloudFormation 產生,並且包含唯一的隨機字串,因此實際的名稱可能不方便使用。

若要使用 continue-update-rollback 命令讓根堆疊成功進入可運作狀態,您必須使用 --resources-to-skip 選項跳過復原失敗的資源。

下列 continue-update-rollback 範例從先前失敗的堆疊更新處繼續復原操作。在此範例中,--resources-to-skip 選項會包含下列項目:

  • myCustom

  • WebInfra-Compute-Asg.myAsg

  • WebInfra-Compute-LB.myLoadBalancer

  • WebInfra-Storage.DB

對於根堆疊的資源,只需提供邏輯 ID,例如 myCustom。但對於巢狀堆疊中包含的資源,必須同時提供巢狀堆疊名稱和資源邏輯 ID,中間以句點分隔。例如 WebInfra-Compute-Asg.myAsg

aws cloudformation continue-update-rollback --stack-name WebInfra \ --resources-to-skip myCustom WebInfra-Compute-Asg.myAsg WebInfra-Compute-LB.myLoadBalancer WebInfra-Storage.DB
尋找巢狀堆疊的堆疊名稱

您可以在子堆疊的堆疊 ID 或 Amazon Resource Name (ARN) 中找到它。

下列 ARN 範例對應的堆疊名稱為 WebInfra-Storage-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 主控台中,您也可以在 Resources (資源) 索引標籤或 Events (事件) 索引標籤上,在堆疊資源的 Logical ID (邏輯 ID) 資料行中找到邏輯 ID。如需更多詳細資訊,請參閱 在 CloudFormation 主控台中檢視堆疊資訊