AWS Systems Manager Incident Manager不再開放給新客戶。現有客戶可以繼續正常使用該服務。如需詳細資訊,請參閱AWS Systems Manager Incident Manager可用性變更。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:搭配 Incident Manager 使用 Systems Manager Automation Runbook
您可以使用 AWS Systems Manager Automation Runbook 來簡化AWS服務的常見維護、部署和修復任務。在本教學課程中,您將建立自訂 Runbook,以在 Incident Manager 中自動化事件回應。本教學課程的案例涉及指派給 Amazon EC2 指標的 Amazon CloudWatch 警示。 Amazon EC2 當執行個體進入觸發警示的狀態時,Incident Manager 會自動執行下列任務:
-
在 Incident Manager 中建立事件。
-
啟動 Runbook,嘗試修復問題。
-
將 Runbook 結果發佈至 Incident Manager 中的事件詳細資訊頁面。
本教學中描述的程序也可以與 Amazon EventBridge 事件和其他類型的AWS資源搭配使用。透過自動化對警示和事件的修補回應,您可以減少事件對組織及其資源的影響。
本教學課程說明如何編輯指派給 Incident Manager 回應計劃的 Amazon EC2 執行個體的 CloudWatch 警示。如果您沒有設定警示、執行個體或回應計劃,建議您在開始之前設定這些資源。如需詳細資訊,請參閱下列主題:
-
《Amazon CloudWatch 使用者指南》中的使用 Amazon CloudWatch 警示
-
《Amazon EC2 使用者指南》中的 Amazon EC2 執行個體 Amazon EC2
-
《Amazon EC2 使用者指南》中的 Amazon EC2 執行個體 Amazon EC2
重要
您將透過建立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
在 https://https://console.aws.amazon.com/systems-manager/
開啟AWS 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/
。 -
在導覽窗格中,選擇角色,然後選擇建立角色。
-
在信任的實體類型下,確認已選取AWS服務。
-
在使用案例下,在其他AWS服務的使用案例中,輸入
Incident Manager。 -
選擇 Incident Manager,然後選擇下一步。
-
在新增許可頁面上,選擇建立政策。許可編輯器會在新的瀏覽器視窗或索引標籤中開啟。
-
在編輯器中,選擇 JSON 標籤。
-
將下列許可政策複製並貼到 JSON 編輯器中。以您的AWS 帳戶 ID 取代
account_ID。 -
選擇下一步:標籤。
-
(選用) 如有需要,請將標籤新增至您的政策。
-
選擇下一步:檢閱。
-
在名稱欄位中,輸入可協助您將此角色識別為用於本教學課程的名稱。
-
(選用) 在描述欄位中輸入描述。
-
選擇建立政策。
-
導覽回您要建立之角色的瀏覽器視窗或索引標籤。隨即顯示新增許可頁面。
-
選擇重新整理按鈕 (位於建立政策按鈕旁),然後在篩選條件方塊中輸入您建立的許可政策名稱。
-
選擇您建立的許可政策,然後選擇下一步。
-
在名稱、檢閱和建立頁面上,針對角色名稱輸入名稱,協助您將此角色識別為用於本教學課程。
-
(選用) 在描述欄位中輸入描述。
-
檢閱角色詳細資訊,視需要新增標籤,然後選擇建立角色。
任務 3:將 Runbook 連線至您的回應計劃
透過將 Runbook 連接到 Incident Manager 回應計劃,您可以確保一致、可重複且及時的緩解程序。Runbook 也可做為解析程式決定下一個動作的起點。
將 Runbook 指派給您的回應計劃
-
選擇回應計劃。
-
針對回應計劃,選擇現有的回應計劃,然後選擇編輯。如果您沒有現有的回應計劃,請選擇建立回應計劃來建立新的計劃。
完成下列欄位:
-
在 Runbook 區段中,選擇選取現有的 Runbook。
-
對於擁有者,確認已選取我擁有的 。
-
針對 Runbook,選擇您在 中建立的 Runbook任務 1:建立 Runbook。
-
對於版本,請在執行時選擇預設。
-
在輸入區段中,針對 IncidentRecordArn 參數,選擇事件 ARN。
-
在執行許可區段中,選擇您在 中建立的 IAM 角色任務 2:建立 IAM 角色。
-
-
儲存您的變更。
任務 4:將 CloudWatch 警示指派給您的回應計劃
使用下列程序將 Amazon EC2 執行個體的 CloudWatch 警示指派給您的回應計劃。
將 CloudWatch 警示指派給您的回應計劃
透過 https://console.aws.amazon.com/cloudwatch/
開啟 CloudWatch 主控台。 -
在導覽窗格中的警示下,選擇所有警示。
-
針對您要連線至回應計畫的 Amazon EC2 執行個體,選擇警示。
-
選擇動作,然後選擇編輯。確認指標具有稱為 的維度
InstanceId。 -
選擇下一步。
-
針對設定動作精靈,選擇新增 Systems Manager 動作。
-
選擇建立事件。
-
選擇您在 中建立的回應計畫任務 3:將 Runbook 連線至您的回應計劃。
-
選擇 Update alarm (更新警示)。
任務 5:驗證結果
若要驗證 CloudWatch 警示是否建立事件,然後處理回應計畫中指定的 Runbook,您必須觸發警示。觸發警示且 Runbook 完成處理後,您可以使用下列程序來驗證 Runbook 的結果。如需有關觸發警示的資訊,請參閱《 AWS CLI命令參考》中的 set-alarm-state。
-
選擇 CloudWatch 警示建立的事件。
-
選擇 Runbooks 索引標籤。
-
在 Runbook 步驟區段中檢視在 Amazon EC2 執行個體上執行的動作。
下圖示範如何在 主控台中報告您在本教學課程中建立的 Runbook 所採取的步驟。每個步驟都會列出時間戳記和狀態訊息。
若要檢視 CloudWatch 警示中的所有詳細資訊,請展開 JsonDecode2 步驟,然後展開輸出。
重要
您必須清除在本教學課程中實作且您不想保留的任何資源變更。這包括對 Incident Manager 資源的變更,例如資源計劃和事件、CloudWatch 警示的變更,以及您在本教學課程中建立的 IAM 角色。