使用 CloudFormation 主控台或 偵測堆疊集偏離 AWS CLI - AWS CloudFormation

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

使用 CloudFormation 主控台或 偵測堆疊集偏離 AWS CLI

即使您透過 管理堆疊及其包含的資源 CloudFormation,使用者仍可在 之外變更這些資源 CloudFormation。使用者可以使用建立資源的基礎服務來直接編輯資源。藉由在堆疊集合上執行漂移偵測,您可以判斷是否有任何屬於該堆疊集合的堆疊執行個體與其預期組態出現差異 (或是產生了漂移)。

如何在堆疊集上執行 CloudFormation 偏離偵測

當 對堆疊集 CloudFormation 執行偏離偵測時,它會對與堆疊集中的每個堆疊執行個體相關聯的堆疊執行偏離偵測。若要這麼做, 會將堆疊中每個資源的目前狀態與該資源的預期狀態 CloudFormation 進行比較,如堆疊範本和任何指定的輸入參數所定義。如果資源目前的狀態與預期狀態不同,便會將該資源視為已偏離。如果堆疊中有一或多個資源產生偏離,便會將堆疊本身視為已偏離,且也會將與該堆疊建立關聯的堆疊執行個體視為已偏離。如果堆疊中有一或多個堆疊執行個體產生偏離,也會將堆疊集合本身視為已偏離。

漂移偵測會識別未受管的變更,也就是對 外部堆疊所做的變更 CloudFormation。直接 CloudFormation 對堆疊進行的變更,而不是在堆疊集層級,不被視為偏離。例如,假設您有一個與堆疊集合中堆疊執行個體建立關聯的堆疊。如果您使用 CloudFormation 更新堆疊以使用不同的範本,即使該堆疊現在具有與屬於堆疊集的任何其他堆疊不同的範本,也不會被視為偏離。這是因為堆疊仍然符合 中的預期範本和參數組態 CloudFormation。

如需如何在堆疊上執行 CloudFormation 偏離偵測的詳細資訊,請參閱 透過偏離偵測偵測偵測堆疊和資源的未受管組態變更

由於 會個別 CloudFormation 在每個堆疊上執行偏離偵測,因此在判斷堆疊是否已偏離時,會將任何覆寫的參數值納入考量。如需覆寫堆疊執行個體中範本參數的詳細資訊,請參閱 使用 CloudFormation主控台或 覆寫參數值 AWS CLI

如果您直接在與堆疊執行個體相關聯的堆疊上執行偏離偵測,這些偏離結果將無法從StackSets主控台頁面取得。

偵測堆疊集上的漂移 (主控台)
  1. https://console.aws.amazon.com/cloudformation 開啟 AWS CloudFormation 主控台。

  2. StackSets頁面上,選取您要在其中執行偏離偵測的堆疊集。

  3. Actions (動作) 選單中,選取 Detect drifts (偵測偏離)

    CloudFormation 會顯示資訊列,指出已針對選取的堆疊集啟動偏離偵測。

  4. 選用:監控漂移偵測操作的進度:

    1. 選取堆疊集合名稱,以顯示 Stackset details (堆疊集合詳細資訊) 頁面。

    2. 選取 Operations (操作) 標籤、選取漂移偵測操作,然後選取 View drift details (檢視漂移詳細資訊)

    CloudFormation 會顯示操作詳細資訊對話方塊。

  5. 等待 CloudFormation 完成漂移偵測操作。當漂移偵測操作完成時, 會 CloudFormation 更新堆疊集的漂移狀態上次漂移檢查時間。這些欄位會列在所選堆疊集StackSet 詳細資訊頁面的概觀索引標籤上。

    漂移偵測操作可能會耗費一些時間,這取決於堆疊集合中所包含的堆疊執行個體數,及包含在堆疊集合中的資源數。您一次只能在指定的堆疊集上執行單一漂移偵測操作。即使您關閉資訊列, 仍會 CloudFormation 繼續漂移偵測操作。

  6. 如要檢閱堆疊集合中堆疊執行個體的漂移偵測結果,請選取 Stack instances (堆疊執行個體) 標籤。

    Stack name (堆疊名稱) 行會列出與每個堆疊執行個體建立關聯的堆疊名稱,Drift status (偏離狀態) 行則會列出該堆疊的偏離狀態。如果堆疊的一個或多個資源已偏離,堆疊就視為已偏離。

  7. 檢閱與特定堆疊執行個體建立關聯的堆疊漂移偵測結果:

    1. 選擇操作子標籤。

    2. 選擇您想要檢視漂移偵測結果的漂移操作。分割面板將顯示堆疊執行個體狀態和所選操作的原因。對於漂移操作,狀態原因欄顯示堆疊執行個體的漂移狀態。

    3. 選擇您想檢視漂移詳細資訊的堆疊執行個體,然後選擇檢視資源漂移。在資源漂移頁面上,資源漂移狀態表單會列出每項堆疊資源及其漂移狀態,以及上次在資源上啟動漂移偵測的時間。每個資源會顯示邏輯 ID 和實體 ID,以協助您識別它們。

  8. 您可以根據資源的偏移狀態,使用 Drift status (偏離狀態) 欄排序資源。

    檢視已修改過的資源的詳細資訊:

    1. 在選取資源的情況下,選擇檢視漂移詳細資訊

      CloudFormation 會顯示該特定資源的偏離詳細資訊頁面。此頁面列出了資源的差異。其還會列出資源的預期屬性值和目前屬性值。

      注意

      如果堆疊屬於與您目前登入的區域和帳戶不同的區域和帳戶,偵測漂移按鈕將會停用,且您將無法檢視詳細資訊。

若要偵測堆疊集上的偏離 (AWS CLI)

若要使用 偵測整個堆疊上的漂移 AWS CLI,請使用下列aws cloudformation命令:

  • detect-stack-set-drift:在堆疊上啟動漂移偵測操作。

  • describe-stack-set-operation:監控堆疊漂移偵測操作的狀態。

  • 漂移偵測操作完成後,請使用以下命令來傳回您要的漂移資訊:

    • 使用 describe-stack-set 傳回堆疊集的詳細資訊,包括堆疊集上上次完成的偏離操作的詳細資訊。(正在進行的偏離操作資訊則不會包含在其中。)

    • 使用 list-stack-instances 傳回屬於堆疊集的堆疊執行個體清單,包括每個執行個體的偏離狀態和上次偏離時間檢查。

    • 使用 describe-stack-instance 傳回特定堆疊執行個體的詳細資訊,包括其漂移狀態和上次檢查的漂移時間。

    • 使用 list-stack-instance-resource-drifts 傳回堆疊執行個體中每個資源的偏離狀態詳細資訊,以及堆疊執行個體資源偏離的摘要資訊。

  1. 使用 detect-stack-set-drift 以偵測整個堆疊集合以及其相關聯堆疊執行個體上的偏離。

    以下範例會在堆疊集合 stack-set-drift-example 上啟動漂移偵測。

    aws cloudformation detect-stack-set-drift \ --stack-set-name stack-set-drift-example

    輸出:

    { "OperationId": "c36e44aa-3a83-411a-b503-cb611example" }
  2. 因為堆疊集合漂移偵測操作可能會長時間執行,請使用 describe-stack-set-operation 來監控漂移操作的狀態。此命令接受由 detect-stack-set-drift 命令傳回的堆疊集合操作 ID。

    下列範例會使用先前範例的操作 ID 來傳回堆疊集合漂移偵測操作的資訊。在此範例中,操作仍正在執行。在與堆疊集合建立關聯的七個堆疊執行個體中,已找到一個堆疊執行個體已產生漂移,兩個執行個體正在同步,而其餘四個堆疊執行個體的漂移偵測則仍在進行。由於一個執行個體已產生偏離,堆疊集合本身的偏離狀態現在是 DRIFTED

    aws cloudformation describe-stack-set-operation \ --stack-set-name stack-set-drift-example \ --operation-id c36e44aa-3a83-411a-b503-cb611example

    輸出:

    { "StackSetOperation": { "Status": "RUNNING", "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole", "OperationPreferences": { "RegionOrder": [] }, "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole", "StackSetDriftDetectionDetails": { "DriftedStackInstancesCount": 1, "TotalStackInstancesCount": 7, "LastDriftCheckTimestamp": "2019-12-04T20:34:28.543Z", "InSyncStackInstancesCount": 2, "InProgressStackInstancesCount": 4, "DriftStatus": "DRIFTED", "FailedStackInstancesCount": 0 }, "Action": "DETECT_DRIFT", "CreationTimestamp": "2019-12-04T20:33:13.673Z", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example", "OperationId": "c36e44aa-3a83-411a-b503-cb611example" } }

    稍後執行相同的命令,此範例便會顯示漂移偵測操作完成後傳回的資訊。與此堆疊集合建立關聯的七個堆疊執行個體中,有兩個已產生偏離,使堆疊集合本身的偏離狀態成為 DRIFTED

    aws cloudformation describe-stack-set-operation \ --stack-set-name stack-set-drift-example \ --operation-id c36e44aa-3a83-411a-b503-cb611example

    輸出:

    { "StackSetOperation": { "Status": "SUCCEEDED", "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole", "OperationPreferences": { "RegionOrder": [] } "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole", "EndTimestamp": "2019-12-04T20:37:32.829Z", "StackSetDriftDetectionDetails": { "DriftedStackInstancesCount": 2, "TotalStackInstancesCount": 7, "LastDriftCheckTimestamp": "2019-12-04T20:36:55.612Z", "InSyncStackInstancesCount": 5, "InProgressStackInstancesCount": 0, "DriftStatus": "DRIFTED", "FailedStackInstancesCount": 0 }, "Action": "DETECT_DRIFT", "CreationTimestamp": "2019-12-04T20:33:13.673Z", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example", "OperationId": "c36e44aa-3a83-411a-b503-cb611example" } }
  3. 完成堆疊集的漂移偵測操作時,請使用 describe-stack-setlist-stack-instancesdescribe-stack-instancelist-stack-instance-resource-drifts 命令來檢閱結果。

    describe-stack-set 命令會包含 describe-stack-set-operation 命令傳回的相同詳細偏離資訊。

    aws cloudformation describe-stack-set \ --stack-set-name stack-set-drift-example

    輸出:

    { "StackSet": { "Status": "ACTIVE", "Description": "Demonstration of drift detection on stack sets.", "Parameters": [], "Tags": [ { "Value": "Drift detection", "Key": "Feature" } ], "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole", "Capabilities": [], "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole", "StackSetDriftDetectionDetails": { "DriftedStackInstancesCount": 2, "TotalStackInstancesCount": 7, "LastDriftCheckTimestamp": "2019-12-04T20:36:55.612Z", "InProgressStackInstancesCount": 0, "DriftStatus": "DRIFTED", "DriftDetectionStatus": "COMPLETED", "InSyncStackInstancesCount": 5, "FailedStackInstancesCount": 0 }, "StackSetARN": "arn:aws:cloudformation:us-east-1:123456789012:stackset/stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22example", "TemplateBody": [details omitted], "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22ebexample", "StackSetName": "stack-set-drift-example" } }

    您可以使用 list-stack-instances 命令來傳回與堆疊集合建立關聯的堆疊執行個體摘要資訊,包括每個堆疊執行個體的偏離狀態。

    在此範例中,在範例堆疊集合上執行 list-stack-instances 並將漂移狀態篩選設為 DRIFTED,可讓您識別哪兩個堆疊執行個體的漂移狀態為 DRIFTED

    aws cloudformation list-stack-instances \ --stack-set-name stack-set-drift-example \ --filters Name=DRIFT_STATUS,Values=DRIFTED

    輸出:

    { "Summaries": [ { "StackId": "arn:aws:cloudformation:eu-west-1:123456789012:stack/StackSet-stack-set-drift-example-b0fb6083-60c0-4e39-af15-2f071e0db90c/0e4f0940-16d4-11ea-93d8-0641cexample", "Status": "CURRENT", "Account": "012345678910", "Region": "eu-west-1", "LastDriftCheckTimestamp": "2019-12-04T20:37:32.687Z", "DriftStatus": "DRIFTED", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample", "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example" }, { "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2988071a/008e6030-16d4-11ea-8090-12f89example", "Status": "CURRENT", "Account": "123456789012", "Region": "us-east-1", "LastDriftCheckTimestamp": "2019-12-04T20:34:28.275Z", "DriftStatus": "DRIFTED", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample", "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example" }, [additional stack instances omitted] ] }

    describe-stack-instance 命令也會傳回此資訊,但只會傳回單一堆疊執行個體的資訊,如以下範例所示。

    aws cloudformation describe-stack-instance \ --stack-set-name stack-set-drift-example \ --stack-instance-account 012345678910 --stack-instance-region us-east-1

    輸出:

    { "StackInstance": { "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/StackSet-stack-set-drift-example-b7fde68e-e541-44c2-b33d-ef2e2988071a/008e6030-16d4-11ea-8090-12f89example", "Status": "CURRENT", "Account": "123456789012", "Region": "us-east-1", "ParameterOverrides": [], "DriftStatus": "DRIFTED", "LastDriftCheckTimestamp": "2019-12-04T20:34:28.275Z", "StackSetId": "stack-set-drift-example:bd1f4017-d4f9-432e-a73f-8c22eexample", "LastOperationId": "c36e44aa-3a83-411a-b503-cb611example" } }
  4. 找出哪些堆疊執行個體偏離後,您可以使用 list-stack-instancesdescribe-stack-instance命令傳回的堆疊執行個體相關資訊來執行 list-stack-instance-resource-drifts。 此命令會傳回堆疊中哪些資源針對特定漂移操作漂移的詳細資訊。

    以下範例使用 stack-instance-resource-drift-statuses 參數,以請求在上一個漂移操作範例中已修改或已刪除資源的堆疊漂移資訊。該請求傳回已修改的一項資源的相關資訊,包括它的兩項屬性及其更改值的詳細資訊。未刪除任何資源。

    aws cloudformation list-stack-instance-resource-drifts \ --stack-set-name my-stack-set-with-resource-drift \ --stack-instance-account 123456789012 \ --stack-instance-region us-east-1 \ --operation-id c36e44aa-3a83-411a-b503-cb611example \ --stack-instance-resource-drift-statuses MODIFIED DELETED

    輸出:

    { "Summaries": [ { "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/my-stack-set-with-resource-drift/489e5570-df85-11e7-a7d9-50example", "ResourceType": "AWS::SQS::Queue", "Timestamp": "2018-03-26T17:23:34.489Z", "PhysicalResourceId": "https://sqs.us-east-1.amazonaws.com/123456789012/my-stack-with-resource-drift-Queue-494PBHCO76H4", "StackResourceDriftStatus": "MODIFIED", "PropertyDifferences": [ { "PropertyPath": "/DelaySeconds", "ActualValue": "120", "ExpectedValue": "20", "DifferenceType": "NOT_EQUAL" }, { "PropertyPath": "/RedrivePolicy/maxReceiveCount", "ActualValue": "12", "ExpectedValue": "10", "DifferenceType": "NOT_EQUAL" } ], "LogicalResourceId": "Queue" } ] }

停止堆疊集合上的漂移偵測

因為堆疊集合上的漂移偵測操作可能會耗費相當長的時間,有時候您可能會希望停止目前正在堆疊集合上執行的漂移偵測操作。

使用 停止堆疊集上的偏離偵測 AWS Management Console
  1. https://console.aws.amazon.com/cloudformation 開啟 AWS CloudFormation 主控台。

  2. 在頁面上StackSets,選取堆疊集的名稱。

    CloudFormation 會顯示所選堆疊集StackSets 的詳細資訊頁面。

  3. StackSets 詳細資訊頁面上,選取操作索引標籤,然後選取偏離偵測操作。

  4. 選取 Stop operation (停止操作)

使用 停止堆疊集上的偏離偵測 AWS CLI
  • 使用 stop-stack-set-operation 命令。您必須提供堆疊集合名稱和漂移偵測堆疊集合操作的操作 ID。

    aws cloudformation stop-stack-set-operation \ --stack-set-name stack-set-drift-example \ --operation-id 624af370-311a-11e8-b6b7-500cexample