本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 CloudFormation StackSets 上執行偏離偵測
即使您透過 CloudFormation 管理您的堆疊,以及這些堆疊中包含的資源,使用者仍然可以在 CloudFormation 外部變更這些資源。使用者可以使用建立資源的基礎服務來直接編輯資源。透過在 StackSet 上執行偏離偵測,您可以判斷屬於該 StackSet 的任何堆疊執行個體是否與其預期組態不同或已偏離。
主題
CloudFormation 如何在 StackSet 上執行偏離偵測
當 CloudFormation 在 StackSet 上執行偏離偵測時,它會在與 StackSet 中每個堆疊執行個體相關聯的堆疊上執行偏離偵測。為了執行此作業,CloudFormation 會將堆疊中每個資源目前的狀態與該資源的預期狀態進行比較,如堆疊範本及任何指定輸入參數所定義。如果資源目前的狀態與預期狀態不同,便會將該資源視為已偏離。如果堆疊中有一或多個資源產生偏離,便會將堆疊本身視為已偏離,且也會將與該堆疊建立關聯的堆疊執行個體視為已偏離。如果 StackSet 中的一或多個堆疊執行個體已漂移,則 StackSet 本身會被視為已漂移。
漂移偵測可以識別非受管的變更,即在 CloudFormation 外部對堆疊進行的變更。透過 CloudFormation 直接對堆疊所做的變更,而不是在 StackSet 層級所做的變更,不會被視為偏離。例如,假設您的堆疊與 StackSet 的堆疊執行個體相關聯。如果您使用 CloudFormation 更新該堆疊以使用不同的範本,即使該堆疊現在具有與屬於 StackSet 的任何其他堆疊不同的範本,也不會被視為偏離。這是因為堆疊仍然與其預期範本和 CloudFormation 中的參數組態相符。
如需 CloudFormation 在堆疊上執行漂移偵測方式的詳細資訊,請參閱 使用偏離偵測偵測堆疊和資源的未受管組態變更。
因為 CloudFormation 會在每個堆疊上個別執行漂移偵測,其會在判斷堆疊是否漂移時,將任何覆寫的參數值納入考量。如需覆寫堆疊執行個體中範本參數的詳細資訊,請參閱 覆寫 CloudFormation StackSet 中堆疊的參數值。
如果您直接在與堆疊執行個體建立關聯的堆疊上執行漂移偵測,這些漂移結果便無法從 StackSets (堆疊集合) 主控台頁面取得。
偵測 StackSet 上的偏離 (主控台)
在 StackSet 上偵測偏離
在 https://https://console.aws.amazon.com/cloudformation
開啟 AWS CloudFormation 主控台。 -
在 StackSets 頁面上,選取要在其中執行偏離偵測的 StackSet。
-
在 Actions (動作) 選單中,選取 Detect drifts (偵測偏離)。
CloudFormation 會顯示資訊列,指出已針對選取的 StackSet 啟動偏離偵測。
-
選用:監控漂移偵測操作的進度:
-
選取 StackSet 名稱以顯示 Stackset 詳細資訊頁面。
-
選取 Operations (操作) 標籤、選取漂移偵測操作,然後選取 View drift details (檢視漂移詳細資訊)。
CloudFormation 會顯示 Operation details (操作詳細資訊) 對話方塊。
-
-
等待 CloudFormation 完成漂移偵測操作。當偏離偵測操作完成時,CloudFormation 會更新 StackSet 的偏離狀態和上次偏離檢查時間。 StackSet 這些欄位列在所選 StackSet 的 StackSet 詳細資訊頁面的概觀索引標籤上。 StackSet
偏離偵測操作可能需要一些時間,取決於 StackSet 中包含的堆疊執行個體數量,以及 StackSet 中包含的資源數量。您一次只能在指定的 StackSet 上執行單一偏離偵測操作。即使關閉資訊列,CloudFormation 仍會繼續執行漂移偵測操作。
-
若要檢閱 StackSet 中堆疊執行個體的偏離偵測結果,請選取堆疊執行個體索引標籤。
Stack name (堆疊名稱) 行會列出與每個堆疊執行個體建立關聯的堆疊名稱,Drift status (偏離狀態) 行則會列出該堆疊的偏離狀態。如果堆疊的一個或多個資源已偏離,堆疊就視為已偏離。
-
檢閱與特定堆疊執行個體建立關聯的堆疊漂移偵測結果:
-
選擇操作子標籤。
-
選擇您想要檢視漂移偵測結果的漂移操作。分割面板將顯示堆疊執行個體狀態和所選操作的原因。對於漂移操作,狀態原因欄顯示堆疊執行個體的漂移狀態。
-
選擇您想檢視漂移詳細資訊的堆疊執行個體,然後選擇檢視資源漂移。在資源漂移頁面上,資源漂移狀態表單會列出每項堆疊資源及其漂移狀態,以及上次在資源上啟動漂移偵測的時間。每個資源會顯示邏輯 ID 和實體 ID,以協助您識別它們。
-
-
您可以根據資源的偏移狀態,使用 Drift status (偏離狀態) 欄排序資源。
檢視已修改過的資源的詳細資訊:
-
在選取資源的情況下,選擇檢視漂移詳細資訊。
CloudFormation 會顯示該特定資源的漂移詳細資訊頁面。此頁面列出了資源的差異。其還會列出資源的預期屬性值和目前屬性值。
注意
如果堆疊屬於與您目前登入的區域和帳戶不同的區域和帳戶,偵測漂移按鈕將會停用,且您將無法檢視詳細資訊。
-
偵測 StackSet 上的偏離 (AWS CLI)
若要使用 偵測整個堆疊上的偏離 AWS CLI,請使用下列程序:
在 StackSet 上偵測偏離
-
使用 detect-stack-set-drift命令來偵測整個 StackSet 及其相關聯堆疊執行個體上的偏離。
下列範例會在 StackSet 上啟動偏離偵測
stack-set-drift-example
。aws cloudformation detect-stack-set-drift \ --stack-set-name
stack-set-drift-example
輸出:
{ "OperationId": "c36e44aa-3a83-411a-b503-cb611example" }
-
由於 StackSet 偏離偵測操作可以是長時間執行的操作,請使用 describe-stack-set-operation命令來監控偏離操作的狀態。此命令接受 detect-stack-set-drift 命令傳回的 StackSet 操作 ID。
下列範例使用上一個範例中的操作 ID 來傳回 StackSet 偏離偵測操作的資訊。在此範例中,操作仍正在執行。在與此 StackSet 相關聯的七個堆疊執行個體中,已發現一個堆疊執行個體已漂移、兩個執行個體處於同步狀態,而其餘四個堆疊執行個體的漂移偵測仍在進行中。由於一個執行個體已漂移,因此 StackSet 本身的漂移狀態現在為
DRIFTED
。aws cloudformation describe-stack-set-operation \ --stack-set-name
stack-set-drift-example
\ --operation-idc36e44aa-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" } }
稍後執行相同的命令,此範例便會顯示漂移偵測操作完成後傳回的資訊。與此 StackSet 相關聯的七個堆疊執行個體中有兩個已漂移,將 StackSet 本身的漂移狀態轉譯為
DRIFTED
。aws cloudformation describe-stack-set-operation \ --stack-set-name
stack-set-drift-example
\ --operation-idc36e44aa-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" } }
-
當 StackSet 偏離偵測操作完成時,請使用 describe-stack-set、describe-stack-instance、 list-stack-instances和 list-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命令來傳回與 StackSet 相關聯之堆疊執行個體的摘要資訊,包括每個堆疊執行個體的偏離狀態。
在此範例中,在範例 StackSet list-stack-instances上執行並設定偏離狀態篩選條件,
DRIFTED
可讓您識別哪兩個堆疊執行個體的偏離狀態為DRIFTED
。aws cloudformation list-stack-instances \ --stack-set-name
stack-set-drift-example
\ --filtersName=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-account012345678910
--stack-instance-regionus-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" } }
-
識別哪些堆疊執行個體偏離後,您可以使用 list-stack-instances或 describe-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-account123456789012
\ --stack-instance-regionus-east-1
\ --operation-idc36e44aa-3a83-411a-b503-cb611example
\ --stack-instance-resource-drift-statusesMODIFIED 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" } ] }
在 StackSet 上停止偏離偵測
由於 StackSet 上的偏離偵測可能是長時間執行的操作,因此當您想要停止目前正在 StackSet 上執行的偏離偵測操作時,可能會有執行個體。
在 StackSet 上停止偏離偵測 (主控台)
在 https://https://console.aws.amazon.com/cloudformation
開啟 AWS CloudFormation 主控台。 -
在 StackSets 頁面上,選取 StackSet 的名稱。
CloudFormation 會顯示所選 StackSets 的 StackSets 詳細資訊頁面。 StackSet
-
在 StackSets details (堆疊集合詳細資訊) 頁面上,選取 Operations (操作) 標籤,然後選取漂移偵測操作。
-
選取 Stop operation (停止操作)。
在 StackSet 上停止偏離偵測 (AWS CLI)
-
使用 stop-stack-set-operation 命令。您必須同時提供偏離偵測 StackSet 操作的 StackSet 名稱和操作 ID。
aws cloudformation stop-stack-set-operation \ --stack-set-name
stack-set-drift-example
\ --operation-id624af370-311a-11e8-b6b7-500cexample