教學課程:搭配 Incident Manager 使用 Systems Manager Automation Runbook - Incident Manager

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

教學課程:搭配 Incident Manager 使用 Systems Manager Automation Runbook

您可以使用 AWS Systems Manager Automation Runbook 來簡化 AWS 服務的常見維護、部署和修復任務。在本教學課程中,您將建立自訂 Runbook,以在 Incident Manager 中自動化事件回應。本教學課程的案例涉及指派給 Amazon EC2 指標的 Amazon CloudWatch 警示。當執行個體進入觸發警示的狀態時,Inventation Manager 會自動執行下列任務:

  1. 在 Incident Manager 中建立事件。

  2. 啟動 Runbook,嘗試修復問題。

  3. 將 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
  1. 在 開啟 AWS Systems Manager 主控台https://console.aws.amazon.com/systems-manager/

  2. 在導覽窗格中,選擇 Documents (文件)

  3. 選擇 自動化

  4. 針對名稱 ,輸入 Runbook 的描述性名稱,例如 IncidentResponseRunbook

  5. 選擇 Editor (編輯器) 標籤,然後選擇 Edit (編輯)

  6. 將下方內容貼入編輯工具中:

    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
  7. 選擇 Create automation (建立自動化)

任務 2:建立IAM角色

使用下列教學課程來建立 AWS Identity and Access Management (IAM) 角色,讓 Incident Manager 有權啟動回應計劃中指定的 Runbook。本教學課程中的 Runbook 會重新啟動 Amazon EC2執行個體。當您將 Runbook 連接至回應計劃時,您將在下一個任務中指定此IAM角色。

建立從回應計劃啟動 Runbook IAM的角色
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在導覽窗格中,選擇 Roles (角色),然後選擇 Create role (建立角色)

  3. 信任的實體類型 下,確認已選取AWS 服務

  4. 使用案例 下,在其他 AWS 服務的 使用案例 欄位中,輸入 Incident Manager

  5. 選擇 Incident Manager ,然後選擇下一步。

  6. 新增許可頁面上,選擇建立政策 。許可編輯器會在新的瀏覽器視窗或索引標籤中開啟。

  7. 在編輯器中,選擇 JSON 索引標籤。

  8. 將下列許可政策複製並貼到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" ] } ] }
  9. 選擇下一步:標籤

  10. (選用) 如有需要,請將標籤新增至您的政策。

  11. 選擇下一步:檢閱

  12. 名稱欄位中,輸入名稱,協助您將此角色識別為用於本教學課程。

  13. (選用) 在描述欄位中輸入描述

  14. 選擇 建立政策

  15. 導覽回您要建立之角色的瀏覽器視窗或索引標籤。隨即顯示新增許可頁面。

  16. 選擇重新整理按鈕 (位於建立政策按鈕旁),然後在篩選條件方塊中輸入您建立的滲透政策名稱。

  17. 選擇您建立的許可政策,然後選擇下一步。

  18. 名稱、檢閱和建立頁面上,針對角色名稱 輸入名稱,協助您將此角色識別為用於本教學課程。

  19. (選用) 在描述欄位中輸入描述

  20. 檢閱角色詳細資訊,視需要新增標籤,然後選擇建立角色

任務 3:將 Runbook 連線至您的回應計劃

透過將 Runbook 連接至您的 Incident Manager 回應計劃,您可以確保一致、可重複且及時的緩解程序。Runbook 也做為解析程式決定下一個動作的起點。

將 Runbook 指派給您的回應計劃
  1. 開啟 Incident Manager 主控台

  2. 選擇 回應計劃

  3. 針對回應計劃 ,選擇現有的回應計劃,然後選擇編輯 。如果您沒有現有的回應計劃,請選擇建立回應計劃來建立新的計劃。

    完成下列欄位:

    1. Runbook 區段中,選擇選取現有的 Runbook

    2. 對於擁有者 ,請確認已選取我擁有的

    3. 針對 Runbook ,選擇您在 中建立的 Runbook任務 1:建立 Runbook

    4. 對於版本 ,請在執行時選擇預設

    5. 輸入區段中,針對 IncidentRecordArn 參數選擇事件 ARN

    6. 執行許可區段中,選擇您在 中建立IAM的角色任務 2:建立IAM角色

  4. 儲存您的變更。

任務 4:將 CloudWatch 警示指派給您的回應計劃

使用下列程序將 Amazon EC2執行個體的 CloudWatch 警示指派給您的回應計劃。

將 CloudWatch 警示指派給回應計劃
  1. 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽窗格中的警示 下,選擇所有警示

  3. 選擇您要連線至回應計畫的 Amazon EC2執行個體的警示。

  4. 選擇動作,然後選擇編輯。確認指標具有稱為 的維度InstanceId

  5. 選擇 Next (下一步)

  6. 針對設定動作精靈 ,選擇新增 Systems Manager 動作

  7. 選擇建立事件

  8. 選擇您在 中建立的回應計畫任務 3:將 Runbook 連線至您的回應計劃

  9. 選擇 Update alarm (更新警示)。

任務 5:驗證結果

若要驗證 CloudWatch 警示是否建立事件,然後處理回應計劃中指定的 Runbook,您必須觸發警示。觸發警示且 Runbook 完成處理後,您可以使用下列程序來驗證 Runbook 的結果。如需觸發警示的資訊,請參閱 命令參考 set-alarm-state 中的 。 AWS CLI

  1. 開啟 Incident Manager 主控台

  2. 選擇 CloudWatch 警示建立的事件。

  3. 選擇 Runbooks 索引標籤。

  4. Runbook 步驟區段中檢視在 Amazon EC2執行個體上執行的動作。

    下圖示範了您在本教學課程中建立的 Runbook 所採取的步驟如何在主控台中報告。每個步驟都會列出時間戳記和狀態訊息。

    來自 Automation Runbook 的步驟會報告時間戳記和狀態報告,例如「成功」。

    若要檢視 CloudWatch 警示中的所有詳細資訊,請展開 JsonDecode2 步驟,然後展開輸出

重要

您必須清除在本教學課程中實作的任何資源變更,而您不想保留。這包括對 Incident Manager 資源的變更,例如資源計劃和事件、 CloudWatch 警示的變更,以及您在本教學課程中建立IAM的角色。