

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

# 監控堆疊進度
<a name="monitor-stack-progress"></a>

本節說明如何監控正在進行中的堆疊部署。CloudFormation 會提供按時間順序排列的詳細部署事件清單，顯示部署過程中的進度及遇到的任何問題。

**Topics**
+ [檢視堆疊事件](view-stack-events.md)
+ [依操作檢視堆疊事件](view-stack-events-by-operation.md)
+ [檢視堆疊部署時間軸圖表](stack-deployment-timeline-graph.md)
+ [了解堆疊建立事件](stack-resource-configuration-complete.md)
+ [監控堆疊更新](using-cfn-updating-stacks-monitor-stack.md)
+ [繼續復原更新](using-cfn-updating-stacks-continueupdaterollback.md)
+ [確定堆疊失敗的原因](determine-root-cause-for-stack-failures.md)
+ [堆疊失敗選項](stack-failure-options.md)

# 檢視 CloudFormation 堆疊事件
<a name="view-stack-events"></a>

您可以檢視堆疊事件，以監控堆疊與資源在堆疊中的進度和狀態。堆疊事件可協助您了解建立、更新或刪除資源的時間，以及堆疊部署是否如預期進行。

**Topics**
+ [檢視堆疊事件 (主控台)](#view-stack-events-console)
+ [檢視堆疊事件 (AWS CLI)](#view-stack-events-cli)
+ [堆疊狀態碼](#cfn-console-view-stack-data-resources-status-codes)

## 檢視堆疊事件 (主控台)
<a name="view-stack-events-console"></a>

**檢視堆疊事件**

1. 在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在螢幕上方的導覽列中，選擇您在其中建立堆疊所在的 AWS 區域 。

1. 在 CloudFormation 主控台的 **Stacks** (堆疊) 頁面上，選取堆疊名稱。CloudFormation 會顯示所選取堆疊的堆疊詳細資訊。

1. 選擇**事件**索引標籤以檢視 CloudFormation 為堆疊產生的堆疊事件。

CloudFormation 每分鐘會自動重新整理堆疊事件。此外，CloudFormation 會在新的堆疊事件發生時顯示**有新事件可用**徽章。選擇重新整理圖示，以將這些事件載入清單中。透過檢視堆疊建立事件，您即可了解建立堆疊前的事件順序，或者了解對堆疊進行除錯失敗前的事件順序。

正在建立的堆疊會列在**堆疊**頁面中，狀態為 `CREATE_IN_PROGRESS`。堆疊建立成功後，其狀態將變更為 `CREATE_COMPLETE`。

如需詳細資訊，請參閱[了解 CloudFormation 堆疊建立事件](stack-resource-configuration-complete.md)及[監控堆疊更新的進度](using-cfn-updating-stacks-monitor-stack.md)。

## 檢視堆疊事件 (AWS CLI)
<a name="view-stack-events-cli"></a>

或者，您可以使用 [describe-stack-events](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-events.html) 命令，同時建立堆疊以檢視報告的事件。

以下 **describe-stack-events** 命令說明 `my-stack` 堆疊事件。

```
aws cloudformation describe-stack-events --stack-name my-stack
```

以下是回應範例。

```
{
    "StackEvents": [
        {
            "StackId": "arn:aws:cloudformation:aws-region:123456789012:stack/my-stack/64726230-7edf-11f0-8a36-06453a64f325",
            "EventId": "7b755820-7edf-11f0-ab15-0673b09f3847",
            "StackName": "my-stack",
            "LogicalResourceId": "my-stack",
            "PhysicalResourceId": "arn:aws:cloudformation:aws-region:123456789012:stack/my-stack/64726230-7edf-11f0-8a36-06453a64f325",
            "ResourceType": "AWS::CloudFormation::Stack",
            "Timestamp": "2025-08-21T22:37:56.243000+00:00",
            "ResourceStatus": "CREATE_COMPLETE",
            "ClientRequestToken": "token"
        },
        {
            "StackId": "arn:aws:cloudformation:aws-region:123456789012:stack/my-stack/64726230-7edf-11f0-8a36-06453a64f325",
            "EventId": "WebServer-CREATE_COMPLETE-2025-08-21T22:37:54.356Z",
            "StackName": "my-stack",
            "LogicalResourceId": "WebServer",
            "PhysicalResourceId": "i-099df76cb31b866a9",
            "ResourceType": "AWS::EC2::Instance",
            "Timestamp": "2025-08-21T22:37:54.356000+00:00",
            "ResourceStatus": "CREATE_COMPLETE",
            "ResourceProperties": "{\"UserData\":\"IyEvYmluL2Jhc2gKeXVtIGluc3RhbGwgLXkgYXdzLWNmbi1ib290c3RyYXAKL29wdC9hd3MvYmluL2Nmbi1pbml0IC12IC0tc3RhY2sgc2Rmc2RhZnNhZHNka2wgLS1yZXNvdXJjZSBXZWJTZXJ2ZXIgLS1yZWdpb24gdXMtd2VzdC0yCg==\",\"ImageId\":\"ami-0bbc328167dee8f3c\",\"InstanceType\":\"t2.micro\",\"SecurityGroupIds\":[\"my-stack-WebServerSecurityGroup-n8A43bQT1ty2\"],\"Tags\":[{\"Value\":\"Bootstrap Tutorial Web Server\",\"Key\":\"Name\"}]}",
            "ClientRequestToken": "token"
        },
        {
            "StackId": "arn:aws:cloudformation:aws-region:123456789012:stack/my-stack/64726230-7edf-11f0-8a36-06453a64f325",
            "EventId": "WebServer-CREATE_IN_PROGRESS-2025-08-21T22:37:31.226Z",
            "StackName": "my-stack",
            "LogicalResourceId": "WebServer",
            "PhysicalResourceId": "i-099df76cb31b866a9",
            "ResourceType": "AWS::EC2::Instance",
            "Timestamp": "2025-08-21T22:37:31.226000+00:00",
            "ResourceStatus": "CREATE_IN_PROGRESS",
            "ResourceStatusReason": "Resource creation Initiated",
            "ResourceProperties": "{\"UserData\":\"IyEvYmluL2Jhc2gKeXVtIGluc3RhbGwgLXkgYXdzLWNmbi1ib290c3RyYXAKL29wdC9hd3MvYmluL2Nmbi1pbml0IC12IC0tc3RhY2sgc2Rmc2RhZnNhZHNka2wgLS1yZXNvdXJjZSBXZWJTZXJ2ZXIgLS1yZWdpb24gdXMtd2VzdC0yCg==\",\"ImageId\":\"ami-0bbc328167dee8f3c\",\"InstanceType\":\"t2.micro\",\"SecurityGroupIds\":[\"my-stack-WebServerSecurityGroup-n8A43bQT1ty2\"],\"Tags\":[{\"Value\":\"Bootstrap Tutorial Web Server\",\"Key\":\"Name\"}]}",
            "ClientRequestToken": "token"
        },
        {
            "StackId": "arn:aws:cloudformation:aws-region:123456789012:stack/my-stack/64726230-7edf-11f0-8a36-06453a64f325",
            "EventId": "WebServer-CREATE_IN_PROGRESS-2025-08-21T22:37:29.210Z",
            "StackName": "my-stack",
            "LogicalResourceId": "WebServer",
            "PhysicalResourceId": "",
            "ResourceType": "AWS::EC2::Instance",
            "Timestamp": "2025-08-21T22:37:29.210000+00:00",
            "ResourceStatus": "CREATE_IN_PROGRESS",
            "ResourceProperties": "{\"UserData\":\"IyEvYmluL2Jhc2gKeXVtIGluc3RhbGwgLXkgYXdzLWNmbi1ib290c3RyYXAKL29wdC9hd3MvYmluL2Nmbi1pbml0IC12IC0tc3RhY2sgc2Rmc2RhZnNhZHNka2wgLS1yZXNvdXJjZSBXZWJTZXJ2ZXIgLS1yZWdpb24gdXMtd2VzdC0yCg==\",\"ImageId\":\"ami-0bbc328167dee8f3c\",\"InstanceType\":\"t2.micro\",\"SecurityGroupIds\":[\"my-stack-WebServerSecurityGroup-n8A43bQT1ty2\"],\"Tags\":[{\"Value\":\"Bootstrap Tutorial Web Server\",\"Key\":\"Name\"}]}",
            "ClientRequestToken": "token"
        },
        {
            "StackId": "arn:aws:cloudformation:aws-region:123456789012:stack/my-stack/64726230-7edf-11f0-8a36-06453a64f325",
            "EventId": "WebServerSecurityGroup-CREATE_COMPLETE-2025-08-21T22:37:28.803Z",
            "StackName": "my-stack",
            "LogicalResourceId": "WebServerSecurityGroup",
            "PhysicalResourceId": "my-stack-WebServerSecurityGroup-n8A43bQT1ty2",
            "ResourceType": "AWS::EC2::SecurityGroup",
            "Timestamp": "2025-08-21T22:37:28.803000+00:00",
            "ResourceStatus": "CREATE_COMPLETE",
            "ResourceProperties": "{\"GroupDescription\":\"Allow HTTP access from my IP address\",\"SecurityGroupIngress\":[{\"CidrIp\":\"0.0.0.0/0\",\"Description\":\"HTTP\",\"FromPort\":\"80\",\"ToPort\":\"80\",\"IpProtocol\":\"tcp\"}]}",
            "ClientRequestToken": "token"
        },
        {
            "StackId": "arn:aws:cloudformation:aws-region:123456789012:stack/my-stack/64726230-7edf-11f0-8a36-06453a64f325",
            "EventId": "WebServerSecurityGroup-CREATE_IN_PROGRESS-2025-08-21T22:37:22.626Z",
            "StackName": "my-stack",
            "LogicalResourceId": "WebServerSecurityGroup",
            "PhysicalResourceId": "my-stack-WebServerSecurityGroup-n8A43bQT1ty2",
            "ResourceType": "AWS::EC2::SecurityGroup",
            "Timestamp": "2025-08-21T22:37:22.626000+00:00",
            "ResourceStatus": "CREATE_IN_PROGRESS",
            "ResourceStatusReason": "Resource creation Initiated",
            "ResourceProperties": "{\"GroupDescription\":\"Allow HTTP access from my IP address\",\"SecurityGroupIngress\":[{\"CidrIp\":\"0.0.0.0/0\",\"Description\":\"HTTP\",\"FromPort\":\"80\",\"ToPort\":\"80\",\"IpProtocol\":\"tcp\"}]}",
            "ClientRequestToken": "token"
        },
        {
            "StackId": "arn:aws:cloudformation:aws-region:123456789012:stack/my-stack/64726230-7edf-11f0-8a36-06453a64f325",
            "EventId": "WebServerSecurityGroup-CREATE_IN_PROGRESS-2025-08-21T22:37:20.186Z",
            "StackName": "my-stack",
            "LogicalResourceId": "WebServerSecurityGroup",
            "PhysicalResourceId": "",
            "ResourceType": "AWS::EC2::SecurityGroup",
            "Timestamp": "2025-08-21T22:37:20.186000+00:00",
            "ResourceStatus": "CREATE_IN_PROGRESS",
            "ResourceProperties": "{\"GroupDescription\":\"Allow HTTP access from my IP address\",\"SecurityGroupIngress\":[{\"CidrIp\":\"0.0.0.0/0\",\"Description\":\"HTTP\",\"FromPort\":\"80\",\"ToPort\":\"80\",\"IpProtocol\":\"tcp\"}]}",
            "ClientRequestToken": "token"
        },
        {
            "StackId": "arn:aws:cloudformation:aws-region:123456789012:stack/my-stack/64726230-7edf-11f0-8a36-06453a64f325",
            "EventId": "64740fe0-7edf-11f0-8a36-06453a64f325",
            "StackName": "my-stack",
            "LogicalResourceId": "my-stack",
            "PhysicalResourceId": "arn:aws:cloudformation:aws-region:123456789012:stack/my-stack/64726230-7edf-11f0-8a36-06453a64f325",
            "ResourceType": "AWS::CloudFormation::Stack",
            "Timestamp": "2025-08-21T22:37:17.819000+00:00",
            "ResourceStatus": "CREATE_IN_PROGRESS",
            "ResourceStatusReason": "User Initiated",
            "ClientRequestToken": "token"
        }
    ]
}
```

最近的事件會先報告。下表描述 **describe-stack-events** 命令傳回的欄位：


| 欄位 | Description | 
| --- | --- | 
| EventId |  事件識別碼。  | 
| StackName |  事件對應之堆疊的名稱。  | 
| StackId |  事件對應之堆疊的識別碼。  | 
| LogicalResourceId |  資源的邏輯識別碼。  | 
| PhysicalResourceId |  資源的實體識別碼。  | 
| ResourceProperties |  資源的屬性。  | 
| ResourceType |  資源的類型。  | 
| Timestamp |  事件發生時的時間。  | 
| ResourceStatus |  資源狀態可為下列其中一個狀態碼：`CREATE_COMPLETE` \$1 `CREATE_FAILED` \$1 `CREATE_IN_PROGRESS` \$1 `DELETE_COMPLETE` \$1 `DELETE_FAILED` \$1 `DELETE_IN_PROGRESS` \$1 `DELETE_SKIPPED` \$1 `IMPORT_COMPLETE` \$1 `IMPORT_IN_PROGRESS` \$1 `IMPORT_ROLLBACK_COMPLETE` \$1 `IMPORT_ROLLBACK_FAILED` \$1 `IMPORT_ROLLBACK_IN_PROGRESS` \$1 `REVIEW_IN_PROGRESS` \$1 `ROLLBACK_COMPLETE` \$1 `ROLLBACK_FAILED` \$1 `ROLLBACK_IN_PROGRESS` \$1 `UPDATE_COMPLETE` \$1 `UPDATE_COMPLETE_CLEANUP_IN_PROGRESS` \$1 `UPDATE_FAILED` \$1 `UPDATE_IN_PROGRESS` \$1 `UPDATE_ROLLBACK_COMPLETE` \$1 `UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS` \$1 `UPDATE_ROLLBACK_FAILED` \$1 `UPDATE_ROLLBACK_IN_PROGRESS` `DELETE_SKIPPED` 狀態套用至具有保留刪除政策屬性的資源。  | 
| DetailedStatus |  堆疊的詳細狀態。若 `CONFIGURATION_COMPLETE` 存在，則堆疊資源組態階段已完成，且資源穩定化作業正在進行中。  | 
| ResourceStatusReason |  狀態的詳細資訊。  | 

## 堆疊狀態碼
<a name="cfn-console-view-stack-data-resources-status-codes"></a>

下表會說明堆疊的狀態碼：


| 堆疊狀態和選用的詳細狀態 | Description | 
| --- | --- | 
|  `CREATE_COMPLETE`  |  一或多個堆疊建立成功。  | 
|  `CREATE_IN_PROGRESS`  |  一或多個堆疊建立中。  | 
|  `CREATE_FAILED`  |  一或多個堆疊建立失敗。檢視堆疊事件，查看任何相關聯的錯誤訊息。建立失敗的可能原因包括權限不足，無法使用堆疊中的所有資源、 AWS 服務拒絕的參數值，或在資源建立期間逾時。  | 
|  `DELETE_COMPLETE`  |  一或多個堆疊成功刪除。刪除的堆疊仍保留，90 天內仍可檢視。  | 
|  `DELETE_FAILED`  |  一或多個堆疊刪除失敗。因為刪除失敗，所以您可能有一些資源仍在執行，但是您無法使用或更新堆疊。再次刪除堆疊，或檢視堆疊事件，查看任何相關聯的錯誤訊息。  | 
|  `DELETE_IN_PROGRESS`  |  一或多個堆疊移除中。  | 
| `REVIEW_IN_PROGRESS` | 一或多個堆疊建立中，這些堆疊具有預期的 StackId，但沒有任何範本或資源。 針對[最大可能堆疊數](cloudformation-limits.md)計數有此狀態碼的堆疊。  | 
|  `ROLLBACK_COMPLETE`  |  在堆疊建立失敗或明確取消建立堆疊之後，成功移除一或多個堆疊。堆疊返回到之前的工作狀態。在建立堆疊操作期間建立的所有資源都予以刪除。 此狀態只會在堆疊建立失敗後出現。此狀態表示來自所建立之部分堆疊的所有操作均已適當清除。在此狀態時，只能執行刪除操作。  | 
|  `ROLLBACK_FAILED`  |  在堆疊建立失敗或明確取消建立堆疊之後，移除一或多個堆疊失敗。刪除堆疊，或檢視堆疊事件，查看任何相關聯的錯誤訊息。  | 
|  `ROLLBACK_IN_PROGRESS`  |  在堆疊建立失敗或明確取消建立堆疊之後，持續移除一或多個堆疊。  | 
|  `UPDATE_COMPLETE`  | 一或多個堆疊更新成功。 | 
|  `UPDATE_COMPLETE_CLEANUP_IN_PROGRESS`  |  成功更新堆疊之後，持續移除一或多個堆疊的舊資源。針對需要替換資源的堆疊更新，CloudFormation 會先建立新資源，然後刪除舊資源，藉以減少任何堆疊中斷。在此狀態下，堆疊已更新且可用，但 CloudFormation 仍會刪除舊資源。  | 
|  `UPDATE_FAILED`  | 一或多個堆疊更新不成功。檢視堆疊事件，查看任何相關聯的錯誤訊息。 | 
|  `UPDATE_IN_PROGRESS`  |  持續更新一或多個堆疊。  | 
|  `UPDATE_ROLLBACK_COMPLETE`  |  堆疊更新失敗之後，成功將一或多個堆疊返回到之前的運作狀態。  | 
|  `UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS`  |  更新堆疊失敗之後，持續移除一或多個堆疊的新資源。在此狀態下，堆疊已復原到之前的運作狀態且可使用，但 CloudFormation 仍將刪除在堆疊更新期間建立的任何新資源。  | 
|  `UPDATE_ROLLBACK_FAILED`  |  堆疊更新失敗之後，將一或多個堆疊返回到之前的運作狀態失敗。在此狀態時，您可以刪除堆疊或[繼續復原](using-cfn-updating-stacks-continueupdaterollback.md)。您可能需要先修正錯誤，您的堆疊才能回到運作狀態。或者，您可以聯絡 將堆疊 支援 還原為可用狀態。  | 
|  `UPDATE_ROLLBACK_IN_PROGRESS`  |  堆疊更新失敗之後，持續將一或多個堆疊返回到之前的運作狀態。  | 
|  `IMPORT_IN_PROGRESS`  |  匯入操作正在進行。  | 
|  `IMPORT_COMPLETE`  |  已針對支援 `resource import` 堆疊中的所有資源順利完成匯入操作。  | 
|  `IMPORT_ROLLBACK_IN_PROGRESS`  |  匯入將復原回先前的範本組態。  | 
|  `IMPORT_ROLLBACK_FAILED`  |  堆疊中至少一個資源的匯入復原操作失敗。成功匯入資源 CloudFormation 的結果將可提供使用。  | 
|  `IMPORT_ROLLBACK_COMPLETE`  |  匯入已成功復原回先前的範本組態。  | 

# 依操作檢視堆疊事件
<a name="view-stack-events-by-operation"></a>

您可以檢視依操作分組的堆疊事件，以進一步了解對堆疊所做的變更順序和範圍。操作型分組可協助您一起追蹤相關事件，讓您更輕鬆地監控進度，並在問題發生時進行疑難排解。

每個堆疊操作 （建立、更新、刪除、轉返） 都會指派一個唯一的操作 ID，將所有相關事件分組。這可讓您專注於特定操作，並快速識別失敗的根本原因。

**Topics**
+ [先決條件](#view-stack-events-by-operation-prerequisites)
+ [依操作檢視堆疊事件 （主控台）](#view-stack-events-by-operation-console)
+ [依操作檢視堆疊事件 (AWS CLI)](#view-stack-events-by-operation-cli)
+ [堆疊狀態碼](#stack-status-codes)

## 先決條件
<a name="view-stack-events-by-operation-prerequisites"></a>

若要使用 `DescribeEvents` API，您必須擁有必要的 IAM 許可才能：`DescribeEvents`。

## 依操作檢視堆疊事件 （主控台）
<a name="view-stack-events-by-operation-console"></a>

**檢視依操作分組的堆疊事件**

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

1. 在畫面頂端的導覽列上，選擇 AWS 區域 您在其中建立堆疊的 。

1. 在**堆疊**頁面上，選取堆疊名稱。CloudFormation 會顯示所選取堆疊的堆疊詳細資訊。

1. 選擇**事件**索引標籤以檢視 CloudFormation 為堆疊產生的堆疊事件。

1. 事件會依操作 ID 自動分組。每個操作都會顯示為可擴展區段，顯示操作類型、狀態和時間戳記。

1. 按一下**操作 ID** 以開啟詳細檢視，僅顯示與該特定操作相關的事件。

1. 在操作詳細資訊檢視中，選取**僅顯示失敗**核取方塊，僅顯示失敗的事件以進行根本原因分析。

CloudFormation 每分鐘會自動重新整理堆疊事件。**新堆疊事件發生時，會顯示新事件可用**徽章。選擇重新整理圖示，以將這些事件載入清單中。

透過檢視依操作分組的堆疊事件，您可以了解每個操作的事件順序，並快速識別哪些特定操作導致問題 （如果您要偵錯堆疊）。

當您的堆疊操作正在執行時，會列出狀態為 `CREATE_IN_PROGRESS`、 `UPDATE_IN_PROGRESS`或 的堆疊操作`DELETE_IN_PROGRESS`。操作成功完成後，其狀態會變更為 `CREATE_COMPLETE`、 `UPDATE_COMPLETE`或 `DELETE_COMPLETE`。

如需詳細資訊，請參閱[了解 CloudFormation 堆疊建立事件](stack-resource-configuration-complete.md)及[監控堆疊更新的進度](using-cfn-updating-stacks-monitor-stack.md)。

## 依操作檢視堆疊事件 (AWS CLI)
<a name="view-stack-events-by-operation-cli"></a>

您可以使用 `describe-events`命令搭配操作 ID 篩選，以檢視特定操作的事件。

### 取得最後一個操作 IDs
<a name="get-last-operation-ids"></a>

可透過 describe-stacks API 取得的堆疊描述現在包含 LastOperations 資訊，顯示最近的操作 IDs 及其類型。這可讓您快速識別發生的操作及其目前狀態，而無需剖析事件日誌。

```
aws cloudformation describe-stacks --stack-name MyStack
```

以下是範例回應，顯示最後一個操作是在更新操作失敗後轉返。

```
{  
    "Stacks": [  
        {  
            "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyStack/07580010-bb79-11f0-8f6c-0289bb5c804f",  
            "StackName": "MyStack",  
            "Description": "A simple CloudFormation template to create an S3 bucket.",  
            "CreationTime": "2025-11-07T01:28:13.778000+00:00",  
            "LastUpdatedTime": "2025-11-07T01:43:39.838000+00:00",  
            "RollbackConfiguration": {},  
            "StackStatus": "UPDATE_ROLLBACK_COMPLETE",  
            "DisableRollback": false,  
            "NotificationARNs": [],  
            "Tags": [],  
            "EnableTerminationProtection": false,  
            "DriftInformation": {  
                "StackDriftStatus": "NOT_CHECKED"  
            },  
            "LastOperations": [  
                {  
                    "OperationType": "ROLLBACK",  
                    "OperationId": "d0f12313-7bdb-414d-a879-828a99b36f29"  
                },  
                {  
                    "OperationType": "UPDATE_STACK",  
                    "OperationId": "1c211b5a-4538-4dc9-bfed-e07734371e57"  
                }  
            ]  
        }  
    ]  
}
```

### 依操作 ID 篩選事件
<a name="filter-events-by-operation-id"></a>

下列`describe-events`命令說明特定操作 ID 的事件：

```
aws cloudformation describe-events \
  --operation-id 1c211b5a-4538-4dc9-bfed-e07734371e57
```

若要僅檢視故障診斷的失敗事件，請使用 `--filter FailedEvents=true` 參數：

```
aws cloudformation describe-events \
  --operation-id 1c211b5a-4538-4dc9-bfed-e07734371e57 \
  --filter FailedEvents=true
```

新的操作 ID 篩選功能可讓您專注於特定操作及其相關事件。這對於下列項目特別有用：
+ **針對特定故障進行故障診斷：**將事件與故障操作隔離，以了解發生了什麼問題。
+ **監控長時間執行的操作：**追蹤複雜更新或大型堆疊部署的進度。
+ **稽核變更：**檢閱與特定更新操作相關聯的所有事件。
+ **根本原因分析：**使用失敗篩選條件快速識別部署問題的來源。

## 堆疊狀態碼
<a name="stack-status-codes"></a>

下表說明使用操作 ID 篩選時 `describe-events`命令傳回的欄位：


| 欄位 | Description | 
| --- | --- | 
| EventId | 事件識別碼。 | 
| OperationId | 產生此事件之操作的唯一識別符。 | 
| StackName | 事件對應之堆疊的名稱。 | 
| StackId | 事件對應之堆疊的識別碼。 | 
| LogicalResourceId | 資源的邏輯識別碼。 | 
| PhysicalResourceId | 資源的實體識別碼。 | 
| ResourceProperties | 資源的屬性。 | 
| ResourceType | 資源的類型。 | 
| Timestamp | 事件發生時的時間。 | 
| ResourceStatus | 資源的狀態 (CREATE\$1COMPLETE、 UPDATE\$1FAILED等）。 | 
| DetailedStatus | 堆疊的詳細狀態。若 CONFIGURATION\$1COMPLETE 存在，則堆疊資源組態階段已完成，且資源穩定化作業正在進行中。 | 
| ResourceStatusReason | 狀態的詳細資訊。 | 

# 檢視 CloudFormation 堆疊部署時間軸
<a name="stack-deployment-timeline-graph"></a>

堆疊部署時間軸圖表以視覺化方式呈現堆疊部署時間軸。此檢視會顯示堆疊及其每個資源的部署狀態，及每個狀態變更的時間。堆疊部署狀態以對應的顏色表示。

**Topics**
+ [了解堆疊部署時間軸圖表](#understanding-stack-deployment-timeline-graph)
+ [檢視堆疊部署時間軸圖表 (主控台)](#viewing-stack-deployment-timeline-graph)

## 了解堆疊部署時間軸圖表
<a name="understanding-stack-deployment-timeline-graph"></a>

下圖顯示由於 Amazon EC2 執行個體資源啟動失敗而導致部署失敗的堆疊部署時間軸圖表。

![\[失敗堆疊部署對應的堆疊部署時間軸圖表。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/deployment-timeline-graph.PNG)


堆疊資源的名稱位於圖表左側，與部署時間相關的日期和時間位於圖表頂部。

每個資源一開始均處於**進行中**狀態。對於每個成功部署，狀態列會變更為**完成**。當資源部署失敗時，狀態列會變更為**失敗**。當資源部署失敗且堆疊部署也失敗時，導致堆疊部署失敗的資源會獲得**可能為根本原因失敗**狀態。

堆疊部署操作失敗後，已成功部署的資源開始復原，並變更為**復原進行中**狀態。在資源完成復原後，狀態會變更為**復原完成**。

選擇每個資源可提供部署時間軸的更精細的詳細資訊：

![\[堆疊部署時間軸圖表會快顯，顯示所選失敗資源的部署詳細資訊。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/deployment-timeline-graph-root-cause.PNG)


選擇資源會顯示部署的**類型**、部署**開始時間**、部署**結束時間**及**總持續時間**。您還可以在下方的下拉式選單中找到每個部署狀態的**開始時間**、**結束時間**及**持續時間**。如果資源部署失敗，將提供**失敗原因**。

如需堆疊狀態的詳細資訊，請參閱 [堆疊狀態碼](view-stack-events.md#cfn-console-view-stack-data-resources-status-codes)。

## 檢視堆疊部署時間軸圖表 (主控台)
<a name="viewing-stack-deployment-timeline-graph"></a>

檢視堆疊部署時間軸圖表：

1. 在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在畫面頂端的導覽列上，選擇 AWS 區域 您在其中建立堆疊的 。

1. 在 CloudFormation 主控台的**堆疊**頁面上，選擇堆疊名稱。CloudFormation 會顯示所選取堆疊的堆疊詳細資訊。

1. 選擇**事件**索引標籤以檢視 CloudFormation 為堆疊產生的堆疊事件。

1. 選擇**時間軸圖表**按鈕，以檢視堆疊的時間軸圖表。

# 了解 CloudFormation 堆疊建立事件
<a name="stack-resource-configuration-complete"></a>

在堆疊部署期間，會發生多個事件以建立、設定和驗證堆疊範本中定義的資源。了解這些事件能協助您最佳化堆疊建立程序，並簡化部署作業。
+ **資源建立事件** – 當每個資源開始建立程序時，會設定 `CREATE_IN_PROGRESS` 事件**狀態**。此事件表示資源正在佈建中。
+ **最終一致性檢查** – 堆疊建立時間的相當大部分用於對堆疊建立的資源執行最終一致性檢查。在此階段，服務會執行內部一致性檢查，確保資源可完全運作，並符合每個資源定義的服務穩定標準 AWS 服務。
+ **組態完成事件** – 每個資源完成佈建的最終一致性檢查階段時，會設定**詳細狀態**為 `CONFIGURATION_COMPLETE` 的事件。
+ **資源建立完成事件** – 資源依照指定建立和設定完成，且組態與範本中指定的內容一致後，會設定**狀態**為 `CREATE_COMPLETE` 的事件。

在不需要資源最終一致性檢查的場景中，例如驗證預生產環境堆疊組態或跨堆疊佈建，您可以利用 `CONFIGURATION_COMPLETE` 事件簡化堆疊建立程序。您可以透過多種方式使用此事件。例如，您可以將其做為視覺化信號，跳過等待資源或堆疊一致性檢查完成的步驟。或者，您可以使用它來建立使用持續整合和持續交付 (CI/CD) 建立自動化機制，以觸發額外動作。

**重要**  
雖然利用 `CONFIGURATION_COMPLETE` 事件能加快堆疊建立速度，但您需了解其權衡利弊。首先，它僅支援支援漂移偵測的部分資源類型。如需支援漂移偵測的資源類型清單，請參閱 [資源類型支援](resource-import-supported-resources.md)。此方法可能不適用於所有案例，尤其是在資源需要徹底的最終一致性檢查，以確保整個雲端環境 (例如在生產環境中) 的完整營運準備度的情況。建議您仔細評估您的部署需求以及每個資源一致性檢查的重要性。利用 `CONFIGURATION_COMPLETE` 事件最佳化部署速度，同時不影響基礎設施的完整性和可靠性。  
由於無法保證一定會設定 `CONFIGURATION_COMPLETE` 事件，因此所有使用此事件的場景都應準備好在未設定 `CREATE_COMPLETE` 事件時，處理 `CONFIGURATION_COMPLETE` 事件。

![\[圖表顯示堆疊中資源建立與最終一致性檢查的事件順序。\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/configuration-complete.png)


堆疊部署開始時，`AWS::ECR::Repository` 和 `AWS::ECS::Cluster` 資源都會啟動建立程序 (`ResourceStatus` = `CREATE_IN_PROGRESS`。當 `AWS::ECR::Repository` 資源類型開始執行最終一致性檢查 (`DetailedStatus` = `CONFIGURATION_COMPLETE`) 後，`AWS::ECS::TaskDefinition` 資源即可啟動建立程序。同樣地，一旦 `AWS::ECS::TaskDefinition` 資源開始最終一致性檢查，`AWS::ECS::Service` 資源就會開始建立程序。

**`CREATE_IN_PROGRESS` 和 `CREATE_COMPLETE` 事件**
+ **[堆疊]：**`CREATE_IN_PROGRESS`
+ **[資源]：**ECR 儲存庫 `CREATE_IN_PROGRESS`
+ **[資源]：**ECS 叢集 `CREATE_IN_PROGRESS`
+ **[資源]：**ECR 儲存庫 `CREATE_IN_PROGRESS`、`CONFIGURATION_COMPLETE`
+ **[資源]：**ECS 任務定義 `CREATE_IN_PROGRESS`
+ **[資源]：**ECS 叢集 `CREATE_IN_PROGRESS`、`CONFIGURATION_COMPLETE`
+ **[資源]：**ECS 任務定義 `CREATE_IN_PROGRESS`、`CONFIGURATION_COMPLETE`
+ **[資源]：**ECS 服務 `CREATE_IN_PROGRESS`
+ **[資源]：**ECR 儲存庫 `CREATE_COMPLETE`
+ **[資源]：**ECS 叢集 `CREATE_COMPLETE`
+ **[資源]：**ECS 服務`CREATE_IN_PROGRESS`、`CONFIGURATION_COMPLETE`
+ **[堆疊]：**`CREATE_IN_PROGRESS`、`CONFIGURATION_COMPLETE`
+ **[資源]：**ECS 任務定義 `CREATE_COMPLETE`
+ **[資源]：**ECS 服務 `CREATE_COMPLETE`
+ **[堆疊]：**`CREATE_COMPLETE`

# 監控堆疊更新的進度
<a name="using-cfn-updating-stacks-monitor-stack"></a>

透過檢視堆疊事件，即可監控該堆疊更新的進度。堆疊的**事件**索引標籤會顯示堆疊建立與更新過程中的每個主要步驟，並依照各事件的時間進行排序，而最新的事件會置於最上方。如需詳細資訊，請參閱[監控堆疊進度](monitor-stack-progress.md)。

**Topics**
+ [成功堆疊更新期間產生的事件](#using-cfn-updating-stacks-monitor-stack-update-events)
+ [資源更新失敗時產生的事件](#using-cfn-updating-stacks-monitor-stack-update-failure)

## 成功堆疊更新期間產生的事件
<a name="using-cfn-updating-stacks-monitor-stack-update-events"></a>

系統會在堆疊更新程序的起始處，將堆疊標上 `UPDATE_IN_PROGRESS` 事件：

```
2011-09-30 09:35 PDT AWS::CloudFormation::Stack MyStack UPDATE_IN_PROGRESS 
```

接下來，若更新後範本中的各資源有所變更，則系統會在開始和完成更新時標記下述事件。例如，更新名稱為 `MyDB` 的 [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html) 資源時，會出現下列項目：

```
2011-09-30 09:35 PDT AWS::RDS::DBInstance MyDB UPDATE_COMPLETE
2011-09-30 09:35 PDT AWS::RDS::DBInstance MyDB UPDATE_IN_PROGRESS
```

當 CloudFormation 報告已開始更新資源時，會記錄 `UPDATE_IN_PROGRESS` 事件。當資源成功建立時，會記錄 `UPDATE_COMPLETE` 事件。

當 CloudFormation 成功更新堆疊時，您會看到以下事件：

```
2011-09-30 09:35 PDT AWS::CloudFormation::Stack MyStack UPDATE_COMPLETE 
```

**重要**  
在堆疊更新操作期間，如果 CloudFormation 需要替換現有資源，首先會建立一個新的資源，然後刪除舊的資源。但是，在某些情況下，CloudFormation 可能無法刪除舊資源（例如，如果使用者沒有許可刪除給定類型的資源）。  
CloudFormation 會嘗試刪除舊資源三次。如果 CloudFormation 無法刪除舊資源，即會從堆疊中移除舊資源並繼續更新堆疊。堆疊更新完成時，CloudFormation 會發出 `UPDATE_COMPLETE` 堆疊事件，但內含 `StatusReason`，其會指出無法刪除一或多個資源。CloudFormation 也會針對特定資源發出 `DELETE_FAILED` 事件，內含相應的 `StatusReason`，其會說明 CloudFormation 為何無法刪除此資源的更多詳細資訊。  
舊資源仍存在，並且會繼續產生費用，但無法再透過 CloudFormation 存取。若要刪除舊資源，請直接使用主控台或基礎服務的 API 來存取舊資源。  
這也適用於已從堆疊範本移除的資源，該資源將會在堆疊更新期間從堆疊中刪除。

## 資源更新失敗時產生的事件
<a name="using-cfn-updating-stacks-monitor-stack-update-failure"></a>

如果資源更新失敗，CloudFormation 即會回報 `UPDATE_FAILED` 事件，並包含失敗的原因。舉例來說，如果更新範本指定該資源不支援的屬性變更 (如縮減 [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html) 資源的 `AllocatedStorage` 規模)，則出現的事件將如下所示：

```
2011-09-30 09:36 PDT AWS::RDS::DBInstance MyDB UPDATE_FAILED Size cannot be less than current size; requested: 5; current: 10
2011-09-30 09:35 PDT AWS::RDS::DBInstance MyDB UPDATE_IN_PROGRESS
```

如果資源更新失敗，CloudFormation 即會將升級期間所更新的任何資源復原為原始組態，隨後再進行更新。此處範例將顯示更新復原期間會出現的事件：

```
2011-09-30 09:38 PDT AWS::CloudFormation::Stack MyStack UPDATE_ROLLBACK_COMPLETE
2011-09-30 09:38 PDT AWS::RDS::DBInstance MyDB UPDATE_COMPLETE
2011-09-30 09:37 PDT AWS::RDS::DBInstance MyDB UPDATE_IN_PROGRESS
2011-09-30 09:37 PDT AWS::CloudFormation::Stack MyStack UPDATE_ROLLBACK_IN_PROGRESS The following resource(s) failed to update: [MyDB]
```

# 繼續復原更新
<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)。

# 確定堆疊失敗的原因
<a name="determine-root-cause-for-stack-failures"></a>

如果堆疊建立失敗，則 CloudFormation 可協助您確定可能是堆疊故障之根本原因的事件。視案例和您的許可而定， AWS CloudTrail 事件可能可以提供有關根本原因的進一步詳細資訊，以防**事件**中提供的**狀態原因**不清楚。

**若要判斷堆疊失敗的根本原因**

1. 在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在**堆疊**頁面中，選擇失敗的堆疊。

1. 選擇**事件**索引標籤。

1. 選擇**偵測根本原因**。透過將**可能的根本原因**標籤新增至特定事件**狀態**，CloudFormation 將對故障進行分析，並指出可能是故障根本原因的事件。如需 CloudFormation 主控台中狀態的進一步說明，請參閱**狀態原因**。

1. 使用**可能的根本原因**標籤選擇失敗的**狀態**，以進一步了解失敗原因。根據案例和您的許可，您可以檢閱詳細的 CloudTrail 事件。以下是選擇**狀態**的潛在結果
   + 與此問題相關的 CloudTrail 事件可供使用，可能有助於解決問題。檢視 CloudTrail 事件。
   + 我們找不到與此問題相關的有助於解決問題的任何 CloudTrail 事件。
   + 您目前的許可不允許檢視 CloudTrail 事件的存取權。進一步了解。
   + 在檢查是否有可用的 CloudTrail 事件的過程中，請在幾分鐘後回來查看。
   + 擷取 CloudTrail 事件時發生錯誤。如需手動檢查，請造訪 CloudTrail 主控台。

1. 如果**狀態原因**中提供的原因不清楚，且根本原因顯示 CloudTrail 主控台的連結，請開啟連結以檢視事件，以尋找詳細的根本原因。

如需 CloudTrail 事件的詳細資訊，請參閱[了解 CloudTrail 事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-events.html)和 [CloudTrail 記錄內容](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html)。

如需 CloudTrail 事件歷史記錄的詳細資訊，請參閱[使用 CloudTrail 事件歷史記錄](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。

**注意**  
巢狀堆疊不支援**偵測根本原因**。

# 選擇佈建資源時的失敗處理方式
<a name="stack-failure-options"></a>

若您的堆疊操作失敗，則不必每次都復原已成功佈建的資源，並從頭開始。反之，您可以對處於 `CREATE_FAILED` 或 `UPDATE_FAILED` 狀態的資源疑難排解，然後從問題發生點繼續佈建。

要這樣做，您必須啟用保留成功佈建的資源選項。此選項適用於所有堆疊部署和變更集操作。
+ 建立堆疊時，若選擇**保留成功佈建資源**選項，CloudFormation 會保留成功建立之資源的狀態，並將失敗的資源保持在失敗狀態，直到執行下次更新操作為止。
+ 在更新與變更集操作期間，**保留已成功佈建的資源**選項可保留成功資源的狀態，同時將失敗資源復原到上一個已知穩定狀態。失敗的資源將處於 `UPDATE_FAILED` 狀態。沒有上一個已知穩定狀態的資源將在下一次堆疊操作時遭刪除。

**Topics**
+ [堆疊失敗選項概觀](#stack-failure-options-overview)
+ [暫停堆疊復原的必要條件](#stack-failure-options-conditions)
+ [保留已成功佈建的資源 (主控台)](#stack-failure-options-console)
+ [保留已成功佈建的資源 (AWS CLI)](#stack-failure-options-cli)

## 堆疊失敗選項概觀
<a name="stack-failure-options-overview"></a>

從 CloudFormation 主控台、API 或 發出 操作之前 AWS CLI，請指定佈建資源失敗的行為。然後，繼續進行資源的部署過程，而無需進行任何其他修改。在操作失敗的情況下，CloudFormation 會在每個獨立佈建路徑中的第一次失敗時停止。CloudFormation 可識別資源之間的相依性，以平行化獨立佈建動作。然後，它會繼續在每個獨立佈建路徑上佈建資源，直到遇到失敗為止。一個路徑中的失敗不會影響其他佈建路徑。CloudFormation 將繼續佈建資源，直到完成或在遇到其他失敗時停止。

修復任何問題以繼續部署程序。在早些時候無法成功佈建的資源上重試佈建動作之前，CloudFormation 會先執行必要的更新。您可以透過提交 **Retry** (重試)、**Update** (更新) 或 **Roll back** (復原) 操作來修復問題。例如，如果您要佈建 Amazon EC2 執行個體，且 EC2 執行個體在建立操作期間失敗，您可能需要調查錯誤，而不是立即復原失敗的資源。您可以檢閱系統狀態檢查和執行個體狀態檢查，一旦問題得到解決，選取 **Retry** (重試) 操作。

當堆疊操作失敗，並且您已經從 **Stack failure options** (堆疊失敗選項) 選單指定 **Preserve successfully provisioned resources** (保留已成功佈建的資源) 時，您可以選取下列選項。
+ **Retry** (重試) – 在失敗的資源上重試佈建操作，並繼續佈建範本，直到成功完成堆疊操作或下一次失敗為止。如果資源因為不需要修改範本的問題而無法佈建，例如 AWS Identity and Access Management (IAM) 許可，請選取此選項。
+ **Update** (更新) – 已佈建的資源會在範本更新時更新。將重試建立或更新失敗的資源。如果資源因範本錯誤而無法佈建，且您已修改範本，請選取此選項。當您更新狀態為 `FAILED` 的堆疊時，您必須針對 **Stack failure options** (堆疊失敗選項) 選取 **Preserve successfully provisioned resources** (保留已成功佈建的資源)，以繼續更新您的堆疊。
+ **Roll back** (復原) – CloudFormation 會將堆疊復原到上一個已知穩定狀態。

## 暫停堆疊復原的必要條件
<a name="stack-failure-options-conditions"></a>

要防止 CloudFormation 自動復原和刪除已成功建立的資源，必須符合下列條件。

1. 建立或更新堆疊時，您必須選擇**保留成功佈建資源**的選項。這會告知 CloudFormation，即使整體堆疊操作失敗，也不要刪除已成功建立的資源。

1. 堆疊操作必須已失敗，即堆疊狀態為 `CREATE_FAILED` 或 `UPDATE_FAILED`。

**注意**  
不支援不可變更新類型。

## 保留已成功佈建的資源 (主控台)
<a name="stack-failure-options-console"></a>

------
#### [ Create stack ]

**在建立堆疊操作期間保留已成功佈建的資源**

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

1. 從**堆疊**頁面的右上角，選擇**建立堆疊**，並選擇**使用新資源 (標準)**。

1. 對於**先決條件 - 準備範本**，選取**選擇現有範本**。

1. 在 **Specify template (指定範本)** 下，選擇指定堆疊範本所在 S3 儲存貯體的 URL，或上傳堆疊範本檔案。然後選擇**下一步**。

1. 在 **Specify stack details** (指定堆疊詳細資訊) 頁面上，在 **Stack name** (堆疊名稱) 方塊中輸入堆疊名稱。

1. 在 **Parameters** (參數) 部分中，指定堆疊範本中定義的參數。

   您可以用預設值來使用或變更任何參數。

1. 當您滿意參數值時，請選擇 **Next** (下一步)。

1. 在 **Configure stack options** (設定堆疊選項) 頁面上，您可以設定堆疊的其他選項。

1. 對於 **Stack failure options** (堆疊失敗選項)，請選取 **Preserve successfully provisioned resources** (保留已成功佈建的資源)。

1. 當您滿意堆疊選項時，請選擇 **Next** (下一步)。

1. 在 **Review** (檢閱) 頁面上檢閱您的堆疊並選取 **Create stack** (建立堆疊)。

*結果*：建立失敗的堆疊會將堆疊狀態轉換為 `CREATE_FAILED`，以防止堆疊在堆疊操作遭遇失敗時復原。已成功佈建的資源處於 `CREATE_COMPLETE` 狀態。您可以在 **Stack events** (堆疊事件) 索引標籤中監控堆疊。

------
#### [ Update stack ]

**在更新堆疊操作期間保留已成功佈建的資源**

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

1. 選取您希望更新的堆疊，然後選擇 **Update** (更新)。

1. 在 **Update stack** (更新堆疊) 頁面上，使用下列其中一個選項選擇堆疊範本：
   + **使用現有範本**
   + **Replace current template** (取代目前範本)
   + **在 Infrastructure Composer 中編輯範本**

   接受您的設定並選取 **Next** (下一步)。

1. 在 **Specify stack details** (指定堆疊詳細資訊) 頁面上，指定堆疊範本中所定義的參數。

   您可以用預設值來使用或變更任何參數。

1. 當您滿意參數值時，請選擇 **Next** (下一步)。

1. 在 **Configure stack options** (設定堆疊選項) 頁面上，您可以設定堆疊的其他選項。

1. 對於 **Behavior on provisioning failure** (佈建失敗時的行為)，選取 **Preserve successfully provisioned resources** (保留已成功佈建的資源)。

1. 當您滿意堆疊選項時，請選擇 **Next** (下一步)。

1. 在 **Review** (檢閱) 頁面上檢閱您的堆疊並選取 **Update stack** (更新堆疊)。

*結果*：更新失敗的堆疊會將狀態轉換為 `UPDATE_FAILED`，並復原到上一個已知穩定狀態。沒有上一個已知穩定狀態的資源將在下一次堆疊操作時由 CloudFormation 刪除。已成功佈建的資源處於 `CREATE_COMPLETE` 或 `UPDATE_COMPLETE` 狀態。您可以在 **Stack events** (堆疊事件) 索引標籤中監控堆疊。

------
#### [ Change set ]

**注意**  
您可以為狀態為 `CREATE_FAILED` 或 `UPDATE_FAILED` 的堆疊啟動變更集，但不適用於狀態 `UPDATE_ROLLBACK_FAILED`。

**在變更集操作期間保留已成功佈建的資源**

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

1. 選取包含您要啟動的變更集的堆疊，然後選擇 **Change sets** (變更集) 索引標籤。

1. 選取變更集，然後選擇 **Execute** (執行)。

1. 對於 **Execute change set** (執行變更集)，選取 **Preserve successfully provisioned resources** (保留已成功佈建的資源) 選項。

1. 選取 **Execute change set** (執行變更集)。

*結果*：更新失敗的堆疊會將狀態轉換為 `UPDATE_FAILED`，並復原到上一個已知穩定狀態。沒有上一個已知穩定狀態的資源將在下一次堆疊操作時由 CloudFormation 刪除。已成功佈建的資源處於 `CREATE_COMPLETE` 或 `UPDATE_COMPLETE` 狀態。您可以在 **Stack events** (堆疊事件) 索引標籤中監控堆疊。

------

## 保留已成功佈建的資源 (AWS CLI)
<a name="stack-failure-options-cli"></a>

------
#### [ Create stack ]

**在堆疊建立操作期間保留已成功佈建的資源**

指定 [create-stack](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html) 操作期間的 `--disable-rollback` 選項或 `on-failure DO_NOTHING` 列舉。

1. 使用 `--disable-rollback` 選項向 **create-stack** 命令提供堆疊名稱和範本。

   ```
   aws cloudformation create-stack --stack-name myteststack \
       --template-body file://template.yaml \
       --disable-rollback
   ```

   命令會傳回下列輸出：

   ```
   {
       "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
   }
   ```

1. 使用 **describe-stacks** 命令描述堆疊的狀態。

   ```
   aws cloudformation describe-stacks --stack-name myteststack
   ```

   命令會傳回下列輸出：

   ```
   {
       "Stacks":  [
           {
               "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
               "Description": "AWS CloudFormation Sample Template",
               "Tags": [],
               "Outputs": [],
               "StackStatusReason": “The following resource(s) failed to create: [MyBucket]”,
               "CreationTime": "2013-08-23T01:02:15.422Z",
               "Capabilities": [],
               "StackName": "myteststack",
               "StackStatus": "CREATE_FAILED",
               "DisableRollback": true
           }
       ]
   }
   ```

------
#### [ Update stack ]

**在更新堆疊操作期間保留已成功佈建的資源**

1. 使用 `--disable-rollback` 選項向 **update-stack** 命令提供現有堆疊名稱和範本。

   ```
   aws cloudformation update-stack --stack-name myteststack \
       --template-url https://s3.amazonaws.com/amzn-s3-demo-bucket/updated.template --disable-rollback
   ```

   命令會傳回下列輸出：

   ```
   {
       "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
   }
   ```

1. 使用 **describe-stacks** 或 **describe-stack-events** 選項描述堆疊的狀態。

   ```
   aws cloudformation describe-stacks --stack-name myteststack
   ```

   命令會傳回下列輸出：

   ```
   {
       "Stacks":  [
           {
               "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
               "Description": "AWS CloudFormation Sample Template",
               "Tags": [],
               "Outputs": [],
               "CreationTime": "2013-08-23T01:02:15.422Z",
               "Capabilities": [],
               "StackName": "myteststack",
               "StackStatus": "UPDATE_COMPLETE",
               "DisableRollback": true
           }
       ]
   }
   ```

------
#### [ Change set ]

**注意**  
您可以為狀態為 `CREATE_FAILED` 或 `UPDATE_FAILED` 的堆疊啟動變更集，但不適用於狀態 `UPDATE_ROLLBACK_FAILED`。

**在變更集操作期間保留已成功佈建的資源**

指定 [execute-change-set](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/execute-change-set.html) 操作期間的 `--disable-rollback` 選項。

1. 使用 `--disable-rollback` 選項向 **execute-change-set** 命令提供堆疊名稱和範本。

   ```
   aws cloudformation execute-change-set --stack-name myteststack \
       --change-set-name my-change-set --template-body file://template.yaml
   ```

   命令會傳回下列輸出：

   ```
   {
    "Id": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/my-change-set/bc9555ba-a949-xmpl-bfb8-f41d04ec5784",
    "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
   }
   ```

1. 使用 `--disable-rollback` 選項啟動變更集。

   ```
   aws cloudformation execute-change-set --stack-name myteststack \
       --change-set-name my-change-set -–disable-rollback
   ```

1. 使用 **describe-stacks** 或 **describe-stack-events** 選項判斷堆疊的狀態。

   ```
   aws cloudformation describe-stack-events --stack-name myteststack
   ```

   命令會傳回下列輸出：

   ```
   {
      "StackEvents": [
        {
           "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
           "EventId": "49c966a0-7b74-11ea-8071-024244bb0672",
           "StackName": "myteststack",
           "LogicalResourceId": " MyBucket",
           "PhysicalResourceId": "myteststack-MyBucket-abcdefghijk1",
           "ResourceType": "AWS::S3::Bucket",
           "Timestamp": "2020-04-10T21:43:17.015Z",
           "ResourceStatus": "UPDATE_FAILED"
           "ResourceStatusReason": "User XYZ is not allowed to perform S3::UpdateBucket on MyBucket"
        }
   }
   ```

1. 修正許可錯誤，然後重試操作。

   ```
   aws cloudformation update-stack --stack-name myteststack \
       --use-previous-template --disable-rollback
   ```

   命令會傳回下列輸出：

   ```
   {
       "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
   }
   ```

1. 使用 **describe-stacks** 或 **describe-stack-events** 選項描述堆疊的狀態。

   ```
   aws cloudformation describe-stacks --stack-name myteststack
   ```

   命令會傳回下列輸出：

   ```
   {
       "Stacks":  [
           {
               "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",
               "Description": "AWS CloudFormation Sample Template",
               "Tags": [],
               "Outputs": [],
               "CreationTime": "2013-08-23T01:02:15.422Z",
               "Capabilities": [],
               "StackName": "myteststack",
               "StackStatus": "UPDATE_COMPLETE",
               "DisableRollback": true
           }
       ]
   }
   ```

------

### 復原堆疊
<a name="roll-back-stack-cli"></a>

您可使用 [rollback-stack](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/rollback-stack.html) 命令，將具有 `CREATE_FAILED` 或 `UPDATE_FAILED` 堆疊狀態的堆疊復原至其最後穩定狀態。

下列 **rollback-stack** 命令會復原指定的堆疊。

```
aws cloudformation rollback-stack --stack-name myteststack
```

命令會傳回下列輸出：

```
{
    "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
}
```

**注意**  
如果堆疊不包含上一個已知穩定狀態，**rollback-stack** 操作將刪除堆疊。