

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

# 檢視 CloudFormation 堆疊的變更集
<a name="using-cfn-updating-stacks-changesets-view"></a>

建立變更集之後，即可先檢視請求的變更，再加以執行。您可以使用 CloudFormation 主控台 AWS CLI或 CloudFormation API 來檢視變更集。CloudFormation 主控台會提供變更摘要，並以 JSON 格式詳列變更清單； AWS CLI 和 AWS CloudFormation API 會傳回 JSON 格式變更的詳細清單。

------
#### [ View a change set (console) ]

**檢視變更集**

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

1. 在畫面上方的導覽列上，選擇 AWS 區域。

1. 在**堆疊**頁面上，選擇包含想要檢視變更集的堆疊名稱。

1. 在導覽窗格中，選擇 **Change Sets (變更集)** 以檢視堆疊的變更集清單。

1. 選擇要檢視的變更集名稱。

   CloudFormation 主控台會將您導向至變更集的詳細資訊頁面，讓您可以查看變更集的建立時間、狀態、用來產生變更集的輸入，以及變更的摘要。

   在 **Changes (變更)** 區段中，每一列代表 CloudFormation 將新增、修改或移除的資源。
   + **Add (新增)** – 當您將資源新增至堆疊範本時，CloudFormation 會建立資源。
   + **Modify (修改)** – 當您變更堆疊範本中的資源屬性時，CloudFormation 會修改資源。
   + **Remove (移除)** – 當您從堆疊範本中刪除資源時，CloudFormation 即會刪除該資源。
**注意**  
修改作業可能會造成系統終止或替換 (重新建立) 資源。如需資源更新行為的詳細資訊，請參閱 [了解更新堆疊資源的行為](using-cfn-updating-stacks-update-behaviors.md)。

   您可以使用篩選條件檢視，以便著重特定的變更。舉例來說，篩選特定的資料類型，例如 `AWS::EC2::Instance`。若要篩選特定資源，請指定該資源的邏輯或實體 ID，例如：`myWebServer` 或 `i-123abcd4`。

1. 在**變更**區段中，選擇**屬性層級變更**欄中的**檢視詳細資訊**，即可檢視對資源所做的屬性值變更。

1. CloudFormation 主控台會引導您前往資源的屬性層級變更頁面，您可以在其中查看執行變更集前的資源範本組態，以及範本組態在執行變更集之後的外觀。

   **屬性層級變更**區段表格顯示受影響屬性的**路徑**、**變更類型**、**之前值**及**之後值**。在表格中，選擇您要在範本**之前**和**之後**檢視中反白顯示的每個變更的核取方塊，以查看屬性層級將進行的變更。
   + **新增** – 新增的屬性會以綠色反白顯示。
   + **修改** – 修改的屬性會以藍色反白顯示。
   + **移除** – 移除的屬性會以紅色反白顯示。

------
#### [ View a change set for nested stack (console) ]

**檢視巢狀堆疊的變更集 (主控台)**

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

1. 在畫面上方的導覽列上，選擇 AWS 區域。

1. 在**堆疊**頁面上，選擇包含想要檢視變更集的堆疊名稱。

1. 在導覽窗格中，選擇**變更集**以檢視堆疊的變更集清單。

1. 選擇要檢視的變更集名稱。

   CloudFormation 主控台會將您導向至變更集的詳細資訊頁面，讓您可以查看變更集的建立時間、狀態、用來產生變更集的輸入，以及變更的摘要。

   在 **Changes (變更)** 區段中，每一列代表 CloudFormation 將新增、修改、移除或顯示動態狀態的資源。
   + **Add (新增)** – 當您將資源新增至堆疊範本時，CloudFormation 會建立資源。
   + **Modify (修改)** – 當您變更堆疊範本中的資源屬性時，CloudFormation 會修改資源。
   + **Remove (移除)** – 當您從堆疊範本中刪除資源時，CloudFormation 即會刪除該資源。
   + **Dynamic (動態)** – CloudFormation 無法確定巢狀堆疊範本的確切資源變更動作。
**注意**  
修改作業可能會造成系統終止或替換 (重新建立) 資源。如需資源更新行為的詳細資訊，請參閱 [了解更新堆疊資源的行為](using-cfn-updating-stacks-update-behaviors.md)。

   您可以使用篩選條件檢視，以便著重特定的變更。舉例來說，篩選特定的資料類型，例如 **AWS::CloudFormation::Stack**。若要篩選特定資源，請指定該資源的邏輯或實體 ID，例如：**DeadLetterQueue** 或 **NestedStack**。

1. 在 **Changes (變更)** 區段中，選擇您要檢視之巢狀變更集的 **View nested change set (檢視巢狀變更集)**。

   CloudFormation 主控台會將您導向巢狀變更集的詳細資訊頁面。您可以選擇 **Go to root change set (跳至根變更集)** 來檢視根變更集，或者選擇 **View parent change set (檢視父項變更集)** 來檢視父項變更集。如需詳細資訊，請參閱 [巢狀堆疊變更集](change-sets-for-nested-stacks.md)。
**注意**  
當您為巢狀堆疊建立變更集時，CloudFormation 屬性層級變更集不會解析跨堆疊參考。若變更集參考父堆疊的輸出，且父堆疊已修改，則變更集可以標記子堆疊中的資源以進行條件式取代

------

**檢視變更集 (AWS CLI)**

1. 執行 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-change-sets.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-change-sets.html) 命令，即可取得變更集的 ID。

   指定堆疊的名稱，該堆疊內含您要檢視的變更集；如以下範例所示：

   ```
   aws cloudformation list-change-sets --stack-name {{MyStack}}
   ```

   CloudFormation 會傳回變更集清單，與下方內容相似：

   ```
   {
       "Summaries": [
           {
               "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000",
               "Status": "CREATE_COMPLETE",
               "ChangeSetName": "SampleChangeSet",
               "CreationTime": "2020-11-18T20:44:05.889Z",
               "StackName": "MyStack",
               "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet/1a2345b6-0000-00a0-a123-00abc0abc000"
           },
           {
               "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000",
               "Status": "CREATE_COMPLETE",
               "ChangeSetName": "SampleChangeSet-conditional",
               "CreationTime": "2020-11-18T21:15:56.398Z",
               "StackName": "MyStack",
               "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet-conditional/1a2345b6-0000-00a0-a123-00abc0abc000"
           },
           {
               "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000",
               "Status": "CREATE_COMPLETE",
               "ChangeSetName": "SampleChangeSet-replacement",
               "CreationTime": "2020-11-18T21:03:37.706Z",
               "StackName": "MyStack",
               "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet-replacement/1a2345b6-0000-00a0-a123-00abc0abc000"
           }
       ]
   }
   ```

1. 執行 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-change-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-change-set.html) 命令，藉此指定要檢視的變更集 ID。例如：

   ```
   aws cloudformation describe-change-set \
     --change-set-name {{arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet/1a2345b6-0000-00a0-a123-00abc0abc000}}
   ```

   CloudFormation 會傳回特定變更集的相關資訊。

   ```
   {
       "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000",
       "Status": "CREATE_COMPLETE",
       "ChangeSetName": "SampleChangeSet-direct",
       "Parameters": [
           {
               "ParameterValue": "testing",
               "ParameterKey": "Purpose"
           },
           {
               "ParameterValue": "ellioty-useast1",
               "ParameterKey": "KeyPairName"
           },
           {
               "ParameterValue": "t2.micro",
               "ParameterKey": "InstanceType"
           }
       ],
       "Changes": [
           {
               "ResourceChange": {
                   "ResourceType": "AWS::EC2::Instance",
                   "PhysicalResourceId": "i-1abc23d4",
                   "Details": [
                       {
                           "ChangeSource": "DirectModification",
                           "Evaluation": "Static",
                           "Target": {
                               "Attribute": "Tags",
                               "RequiresRecreation": "Never"
                           }
                       }
                   ],
                   "Action": "Modify",
                   "Scope": [
                       "Tags"
                   ],
                   "LogicalResourceId": "MyEC2Instance",
                   "Replacement": "False"
               },
               "Type": "Resource"
           }
       ],
       "CreationTime": "2020-11-18T23:35:25.813Z",
       "Capabilities": [],
       "StackName": "MyStack",
       "NotificationARNs": [],
       "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet-direct/9edde307-960d-4e6e-ad66-b09ea2f20255"
   }
   ```

   使用 `--include-property-values` 搭配 **describe-change-set**，以列出屬性層級變更。

   `Changes` 金鑰會列出系統對資源進行的變更。CloudFormation 會更新 `i-1abc23d4` EC2 執行個體的標籤，讓您得以執行此變更集。如需各欄位的說明，請參閱《*AWS CloudFormation API 參考*》中的[`Change` 資料類型](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Change.html)。

   如需變更集的其他範例，請參閱[CloudFormation 堆疊的變更集範例](using-cfn-updating-stacks-changesets-samples.md)。

**檢視變更集中的屬性層級變更 (AWS CLI)**
+ 下列命令會列出與 `AWS::EC2::NetworkInterface` 資源變更集相關的屬性層級變更，該變更集會移除 `Ipv4Prefixes` 屬性、修改資源的 `Description`，並新增 `Tag`：

  ```
  aws cloudformation describe-change-set --include-property-values \
    --change-set-name {{arn:aws:cloudformation:us-east-1:123456789012:changeSet/ExampleChangeSet/9f7b541b-126b-44f7-998e-932174557841}}
  ```

  以下為範例輸出。

  ```
  "ChangeSetName": "ExampleChangeSet",
      "ChangeSetId": "arn:aws:cloudformation:us-east-1:803642222207:changeSet/ExampleChangeSet/9f7b541b-126b-44f7-998e-932174557841",
      "StackId": "arn:aws:cloudformation:us-east-1:803642222207:stack/ExampleStack/ab664180-f686-11ee-9e29-12cd92393671",
      "StackName": "ExampleStack",
      "Description": null,
      "Parameters": null,
      "CreationTime": "2024-04-09T18:04:59.935000+00:00",
      "ExecutionStatus": "AVAILABLE",
      "Status": "CREATE_COMPLETE",
      "StatusReason": null,
      "NotificationARNs": [],
      "RollbackConfiguration": {
          "RollbackTriggers": []
      },
      "Capabilities": [],
      "Tags": null,
      "ParentChangeSetId": null,
      "IncludeNestedStacks": true,
      "RootChangeSetId": null,
      "OnStackFailure": null,
   {
      "Changes": [
          {
              "Type": "Resource",
              "ResourceChange": {
                  "Action": "Modify",
                  "LogicalResourceId": "EC2NetworkInterface00eni067fd35b649a05b7100Tpyls",
                  "PhysicalResourceId": "eni-067fd35b649a05b71",
                  "ResourceType": "AWS::EC2::NetworkInterface",
                  "Replacement": "False",
                  "Scope": [
                      "Properties",
                      "Tags"
                  ],
                  "Details": [
                      {
                          "Target": {
                              "Attribute": "Properties",
                              "Name": "Ipv4Prefixes",
                              "RequiresRecreation": "Never",
                              "Path": "/Properties/Ipv4Prefixes",
                              "BeforeValue": "[]",
                              "AttributeChangeType": "Remove"
                          },
                          "Evaluation": "Static",
                          "ChangeSource": "DirectModification"
                      },
                      {
                          "Target": {
                              "Attribute": "Properties",
                              "Name": "Description",
                              "RequiresRecreation": "Never",
                              "Path": "/Properties/Description",
                              "BeforeValue": "",
                              "AfterValue": "Description",
                              "AttributeChangeType": "Modify"
                          },
                          "Evaluation": "Static",
                          "ChangeSource": "DirectModification"
                      },
                      {
                          "Target": {
                              "Attribute": "Tags",
                              "RequiresRecreation": "Never",
                              "Path": "/Properties/Tags/0",
                              "AfterValue": "{\"Key\":\"Test\",\"Value\":\"Test\"}",
                              "AttributeChangeType": "Add"
                          },
                          "Evaluation": "Static",
                          "ChangeSource": "DirectModification"
                      }
                  ],
                  "BeforeContext": "{\"Properties\":{\"Description\":\"\",\"PrivateIpAddress\":\"172.31.76.2\",\"PrivateIpAddresses\":[{\"PrivateIpAddress\":\"172.31.76.2\",\"Primary\":\"true\"}],\"SecondaryPrivateIpAddressCount\":\"0\",\"Ipv6PrefixCount\":\"0\",\"Ipv4Prefixes\":[],\"Ipv4PrefixCount\":\"0\",\"GroupSet\":[\"sg-05a45689b1059e82d\"],\"Ipv6Prefixes\":[],\"SubnetId\":\"subnet-455e8969\",\"SourceDestCheck\":\"true\",\"InterfaceType\":\"interface\",\"Tags\":[]},\"UpdateReplacePolicy\":\"Retain\",\"DeletionPolicy\":\"Retain\"}",
                  "AfterContext": "{\"Properties\":{\"Description\":\"Description\",\"PrivateIpAddress\":\"172.31.76.2\",\"PrivateIpAddresses\":[{\"PrivateIpAddress\":\"172.31.76.2\",\"Primary\":\"true\"}],\"SecondaryPrivateIpAddressCount\":\"0\",\"Ipv6PrefixCount\":\"0\",\"Ipv4PrefixCount\":\"0\",\"GroupSet\":[\"sg-05a45689b1059e82d\"],\"Ipv6Prefixes\":[],\"SubnetId\":\"subnet-455e8969\",\"SourceDestCheck\":\"true\",\"InterfaceType\":\"interface\",\"Tags\":[{\"Value\":\"Test\",\"Key\":\"Test\"}]},\"UpdateReplacePolicy\":\"Retain\",\"DeletionPolicy\":\"Retain\"}"
              }
          }
      ],
      "ChangeSetName": "ExampleChangeSet",
      "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/ExampleChangeSet/9f7b541b-126b-44f7-998e-932174557841",
      "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/ExampleStack/ab664180-f686-11ee-9e29-12cd92393671",
  ```