

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

# 繼續復原更新
<a name="using-cfn-updating-stacks-continueupdaterollback"></a>

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

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

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

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

**繼續復原更新 (主控台)**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

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

1. 在**堆疊**頁面上，選擇要更新的堆疊，選擇**堆疊動作**，然後選擇**繼續更新復原**。

   若 [故障診斷錯誤](troubleshooting.md#troubleshooting-errors) 中的任何解決方案都無效，您可以使用進階選項，跳過 CloudFormation 無法成功復原的資源。您必須[尋找](cfn-console-view-stack-data-resources.md)並輸入您希望跳過的資源邏輯 ID。請只指定在 `UpdateRollback` 期間進入 `UPDATE_FAILED` 狀態的資源，而非向前更新期間進入該狀態的資源。
**警告**  
CloudFormation 會將指定資源的狀態設為 `UPDATE_COMPLETE` 並繼續復原堆疊。在復原完成後，跳過資源的狀態會和堆疊範本中資源的狀態不一致。在執行下一次堆疊更新前，您必須更新堆疊或資源，使其和彼此保持一致。若您未執行此作業，後續的堆疊更新可能會失敗，堆疊可能會變得無法復原。

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

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

**繼續復原更新 (AWS CLI)**
+ 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/continue-update-rollback.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/continue-update-rollback.html) 命令搭配 `--stack-name` 選項，指定您希望繼續復原的堆疊 ID。

## 從失敗的巢狀堆疊更新中繼續復原
<a name="nested-stacks"></a>

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

例如，您有一個名為 `WebInfra` 的根堆疊，其中包含兩個較小的堆疊：`WebInfra-Compute` 和 `WebInfra-Storage`。這兩個堆疊本身也包含各自的巢狀堆疊。

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

![\[顯示三層巢狀堆疊階層的圖表。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/cfn-update-stack-continue-update-rollback_nested-stacks.png)


**注意**  
為求簡潔，此範例中的堆疊名稱已進行截斷。子堆疊名稱通常會由 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 主控台中檢視堆疊資訊](cfn-console-view-stack-data-resources.md)。