本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:搭配 Incident Manager 使用 Systems Manager Automation Runbook
您可以使用 AWS Systems Manager Automation Runbook 來簡化 AWS 服務的常見維護、部署和修復任務。在本教學課程中,您將建立自訂 Runbook,以在 Incident Manager 中自動化事件回應。本教學課程的案例涉及指派給 Amazon EC2 指標的 Amazon CloudWatch 警示。當執行個體進入觸發警示的狀態時,Inventation Manager 會自動執行下列任務:
-
在 Incident Manager 中建立事件。
-
啟動 Runbook,嘗試修復問題。
-
將 Runbook 結果發佈至 Incident Manager 中的事件詳細資訊頁面。
本教學中描述的程序也可以與 Amazon EventBridge 事件和其他類型的 AWS 資源搭配使用。透過自動化對警示和事件的修復回應,您可以減少事件對組織及其資源的影響。
本教學課程說明如何編輯指派給 Amazon EC2執行個體的 CloudWatch 警示,以進行 Incident Manager 回應計劃。如果您沒有設定警示、執行個體或回應計劃,建議您在開始之前設定這些資源。如需詳細資訊,請參閱下列主題:
重要
您將透過建立 AWS 資源和使用 Runbook 自動化步驟來產生成本。如需詳細資訊,請參閱 AWS
定價
任務 1:建立 Runbook
使用下列程序在 Systems Manager 主控台中建立 Runbook。從 Incident Manager 事件叫用時, Runbook 會重新啟動 Amazon EC2執行個體,並使用有關 Runbook 執行的資訊更新事件。開始之前,請確認您擁有建立 Runbook 的許可。如需詳細資訊,請參閱 AWS Systems Manager 使用者指南 中的設定自動化。
重要
檢閱下列有關建立本教學課程 Runbook 的重要詳細資訊:
-
Runbook 適用於從 CloudWatch 警示來源建立的事件。如果您將此 Runbook 用於其他類型的事件,例如手動建立的事件,則第一個 Runbook 步驟中的時間軸事件將無法找到,且系統會傳回錯誤。
-
Runbook 需要 CloudWatch 警示包含一個名為 的維度
InstanceId
。Amazon EC2執行個體指標的警示具有此維度。如果您將此 Runbook 與其他指標 (或其他事件來源,例如 EventBridge) 搭配使用,則必須變更JsonDecode2
步驟以符合案例中擷取的資料。 -
Runbook 會嘗試透過重新啟動 Amazon EC2執行個體來修復觸發警示的問題。對於真實事件,您可能不想重新啟動執行個體。使用您希望系統採取的特定修復動作來更新 Runbook。
如需建立 Runbook 的詳細資訊,請參閱 AWS Systems Manager 使用者指南 中的使用 Runbook。
建立 Runbook
在 開啟 AWS Systems Manager 主控台https://console.aws.amazon.com/systems-manager/
。 -
在導覽窗格中,選擇 Documents (文件)。
-
選擇 自動化 。
-
針對名稱 ,輸入 Runbook 的描述性名稱,例如
IncidentResponseRunbook
。 -
選擇 Editor (編輯器) 標籤,然後選擇 Edit (編輯)。
-
將下方內容貼入編輯工具中:
description: This runbook attempts to restart an Amazon EC2 instance that caused an incident. schemaVersion: '0.3' parameters: IncidentRecordArn: type: String description: The incident mainSteps: - name: ListTimelineEvents action: 'aws:executeAwsApi' outputs: - Selector: '$.eventSummaries[0].eventId' Name: eventId Type: String inputs: Service: ssm-incidents Api: ListTimelineEvents incidentRecordArn: '{{IncidentRecordArn}}' filters: - key: eventType condition: equals: stringValues: - SSM Incident Trigger description: This step retrieves the ID of the first timeline event with the CloudWatch alarm details. - name: GetTimelineEvent action: 'aws:executeAwsApi' inputs: Service: ssm-incidents Api: GetTimelineEvent incidentRecordArn: '{{IncidentRecordArn}}' eventId: '{{ListTimelineEvents.eventId}}' outputs: - Name: eventData Selector: $.event.eventData Type: String description: This step retrieves the timeline event itself. - name: JsonDecode action: 'aws:executeScript' inputs: Runtime: python3.8 Handler: script_handler Script: |- import json def script_handler(events, context): data = json.loads(events["eventData"]) return data InputPayload: eventData: '{{GetTimelineEvent.eventData}}' outputs: - Name: rawData Selector: $.Payload.rawData Type: String description: This step parses the timeline event data. - name: JsonDecode2 action: 'aws:executeScript' inputs: Runtime: python3.8 Handler: script_handler Script: |- import json def script_handler(events, context): data = json.loads(events["rawData"]) return data InputPayload: rawData: '{{JsonDecode.rawData}}' outputs: - Name: InstanceId Selector: '$.Payload.detail.configuration.metrics[0].metricStat.metric.dimensions.InstanceId' Type: String description: This step parses the CloudWatch event data. - name: RestartInstance action: 'aws:executeAutomation' inputs: DocumentName: AWS-RestartEC2Instance DocumentVersion: $DEFAULT RuntimeParameters: InstanceId: '{{JsonDecode2.InstanceId}}' description: This step restarts the Amazon EC2 instance
-
選擇 Create automation (建立自動化)。
任務 2:建立IAM角色
使用下列教學課程來建立 AWS Identity and Access Management (IAM) 角色,讓 Incident Manager 有權啟動回應計劃中指定的 Runbook。本教學課程中的 Runbook 會重新啟動 Amazon EC2執行個體。當您將 Runbook 連接至回應計劃時,您將在下一個任務中指定此IAM角色。
建立從回應計劃啟動 Runbook IAM的角色
在 開啟IAM主控台https://console.aws.amazon.com/iam/
。 -
在導覽窗格中,選擇 Roles (角色),然後選擇 Create role (建立角色)。
-
在信任的實體類型 下,確認已選取AWS 服務。
-
在 使用案例 下,在其他 AWS 服務的 使用案例 欄位中,輸入
Incident Manager
。 -
選擇 Incident Manager ,然後選擇下一步。
-
在新增許可頁面上,選擇建立政策 。許可編輯器會在新的瀏覽器視窗或索引標籤中開啟。
-
在編輯器中,選擇 JSON 索引標籤。
-
將下列許可政策複製並貼到JSON編輯器中。Replace (取代)
account_ID
您的 AWS 帳戶 ID。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": [ "arn:aws:ssm:*:
account_ID
:automation-definition/IncidentResponseRunbook:*", "arn:aws:ssm:*::automation-definition/AWS-RestartEC2Instance:*" ], "Action": "ssm:StartAutomationExecution" }, { "Effect": "Allow", "Resource": "arn:aws:ssm:*:*:automation-execution/*", "Action": "ssm:GetAutomationExecution" }, { "Effect": "Allow", "Resource": "arn:aws:ssm-incidents:*:*:*", "Action": "ssm-incidents:*" }, { "Effect": "Allow", "Resource": "arn:aws:iam::*:role/AWS-SystemsManager-AutomationExecutionRole", "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Resource": "*", "Action": [ "ec2:StopInstances", "ec2:DescribeInstanceStatus", "ec2:StartInstances" ] } ] } -
選擇下一步:標籤。
-
(選用) 如有需要,請將標籤新增至您的政策。
-
選擇下一步:檢閱。
-
在名稱欄位中,輸入名稱,協助您將此角色識別為用於本教學課程。
-
(選用) 在描述欄位中輸入描述。
-
選擇 建立政策。
-
導覽回您要建立之角色的瀏覽器視窗或索引標籤。隨即顯示新增許可頁面。
-
選擇重新整理按鈕 (位於建立政策按鈕旁),然後在篩選條件方塊中輸入您建立的滲透政策名稱。
-
選擇您建立的許可政策,然後選擇下一步。
-
在名稱、檢閱和建立頁面上,針對角色名稱 輸入名稱,協助您將此角色識別為用於本教學課程。
-
(選用) 在描述欄位中輸入描述。
-
檢閱角色詳細資訊,視需要新增標籤,然後選擇建立角色 。
任務 3:將 Runbook 連線至您的回應計劃
透過將 Runbook 連接至您的 Incident Manager 回應計劃,您可以確保一致、可重複且及時的緩解程序。Runbook 也做為解析程式決定下一個動作的起點。
將 Runbook 指派給您的回應計劃
-
開啟 Incident Manager 主控台
。 -
選擇 回應計劃 。
-
針對回應計劃 ,選擇現有的回應計劃,然後選擇編輯 。如果您沒有現有的回應計劃,請選擇建立回應計劃來建立新的計劃。
完成下列欄位:
-
在 Runbook 區段中,選擇選取現有的 Runbook 。
-
對於擁有者 ,請確認已選取我擁有的 。
-
針對 Runbook ,選擇您在 中建立的 Runbook任務 1:建立 Runbook。
-
對於版本 ,請在執行時選擇預設 。
-
在輸入區段中,針對 IncidentRecordArn 參數選擇事件 ARN。
-
在執行許可區段中,選擇您在 中建立IAM的角色任務 2:建立IAM角色。
-
-
儲存您的變更。
任務 4:將 CloudWatch 警示指派給您的回應計劃
使用下列程序將 Amazon EC2執行個體的 CloudWatch 警示指派給您的回應計劃。
將 CloudWatch 警示指派給回應計劃
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 -
在導覽窗格中的警示 下,選擇所有警示 。
-
選擇您要連線至回應計畫的 Amazon EC2執行個體的警示。
-
選擇動作,然後選擇編輯。確認指標具有稱為 的維度
InstanceId
。 -
選擇 Next (下一步)。
-
針對設定動作精靈 ,選擇新增 Systems Manager 動作 。
-
選擇建立事件 。
-
選擇您在 中建立的回應計畫任務 3:將 Runbook 連線至您的回應計劃。
-
選擇 Update alarm (更新警示)。
任務 5:驗證結果
若要驗證 CloudWatch 警示是否建立事件,然後處理回應計劃中指定的 Runbook,您必須觸發警示。觸發警示且 Runbook 完成處理後,您可以使用下列程序來驗證 Runbook 的結果。如需觸發警示的資訊,請參閱 命令參考 set-alarm-state 中的 。 AWS CLI
-
開啟 Incident Manager 主控台
。 -
選擇 CloudWatch 警示建立的事件。
-
選擇 Runbooks 索引標籤。
-
在 Runbook 步驟區段中檢視在 Amazon EC2執行個體上執行的動作。
下圖示範了您在本教學課程中建立的 Runbook 所採取的步驟如何在主控台中報告。每個步驟都會列出時間戳記和狀態訊息。
若要檢視 CloudWatch 警示中的所有詳細資訊,請展開 JsonDecode2 步驟,然後展開輸出 。
重要
您必須清除在本教學課程中實作的任何資源變更,而您不想保留。這包括對 Incident Manager 資源的變更,例如資源計劃和事件、 CloudWatch 警示的變更,以及您在本教學課程中建立IAM的角色。