

AWS Systems Manager Incident Manager は新規顧客に公開されなくなりました。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「[AWS Systems Manager Incident Manager  可用性の変更](https://docs.aws.amazon.com/incident-manager/latest/userguide/incident-manager-availability-change.html)」を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# チュートリアル: Incident Manager での Systems Manager Automation ランブックの使用
<a name="tutorials-runbooks"></a>

Automation [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html)ランブックを使用すると、 AWS サービスの一般的なメンテナンス、デプロイ、修復タスクを簡素化できます。このチュートリアルでは、Incident Manager のインシデント対応を自動化するためのカスタムランブックを作成します。このチュートリアルのシナリオでは、Amazon EC2 メトリクスに割り当てられた Amazon CloudWatch アラームを使用します。インスタンスがアラームをトリガーする状態になると、Incident Manager は以下のタスクを自動的に実行します。

1. Incident Manager でインシデントを作成します。

1. 問題の修正を試みるランブックを開始します。

1. ランブックの結果を Incident Manager のインシデント詳細ページに発行します。

このチュートリアルで説明するプロセスは、Amazon EventBridge イベントやその他のタイプの AWS リソースでも使用できます。アラームおよびイベントへの修復対応を自動化することで、インシデントが組織およびそのリソースに与える影響を軽減できます。

このチュートリアルでは、Incident Manager 対応計画用に Amazon EC2 インスタンスに割り当てられた CloudWatch アラームを編集する方法について説明します。アラーム、インスタンス、または対応計画が設定されていない場合は、開始する前にそれらのリソースを設定することをお勧めします。詳細については、以下の各トピックを参照してください。
+ *Amazon CloudWatch ユーザーガイド*の「[Amazon CloudWatch アラームの使用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)」
+ [Amazon EC2 ユーザーガイド」の「Amazon EC2 インスタンス](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/Instances.html)*Amazon EC2*」
+ [Amazon EC2 ユーザーガイド」の「Amazon EC2 インスタンス](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Instances.html)*Amazon EC2*」
+ [Incident Manager での対応計画の作成と設定](response-plans.md)

**重要**  
 AWS リソースを作成し、ランブックの自動化ステップを使用することで、コストが発生します。詳細については、「[AWS 料金表](https://aws.amazon.com/pricing)」を参照してください。

**Topics**
+ [タスク 1: ランブックを作成する](#tutorials-runbook-create)
+ [タスク 2: IAM ロールの作成](#tutorials-runbook-IAM-role)
+ [タスク 3: ランブックを対応計画に接続する](#tutorials-runbook-response-plan)
+ [タスク 4: CloudWatch アラームを対応計画に割り当てる](#tutorials-runbook-alarm)
+ [タスク 5: 結果の検証](#tutorials-runbook-verify)

## タスク 1: ランブックを作成する
<a name="tutorials-runbook-create"></a>

Systems Manager コンソールでランブックを作成するには、以下の手順を使用します。Incident Manager のインシデントから呼び出されると、ランブックは Amazon EC2 インスタンスを再起動し、ランブックの実行に関する情報でインシデントを更新します。開始する前に、ランブックを作成するアクセス許可があることを確認します。詳細については、「AWS Systems Manager ユーザーガイド」の「[オートメーションの設定](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-setup.html)」を参照してください。

**重要**  
このチュートリアルのランブックの作成に関する以下の重要な詳細情報を確認してください。  
このランブックは、CloudWatch アラームソースから作成されたインシデントを対象としています。このランブックを他のタイプのインシデント (手動で作成したインシデントなど) に使用すると、ランブックの最初のステップのタイムラインイベントが見つからず、システムからエラーが返されます。
ランブックでは、CloudWatch アラームに `InstanceId` というディメンションを含める必要があります。Amazon EC2 インスタンスメトリクスのアラームにはこのディメンションがあります。このランブックを他のメトリクス (または EventBridge などの他のインシデントソース) と併用する場合は、シナリオでキャプチャされたデータと一致するように `JsonDecode2` ステップを変更する必要があります。
ランブックは Amazon EC2 インスタンスを再起動することで、アラームをトリガーした問題の修正を試みます。実際のインシデントでは、インスタンスを再起動したくない場合があります。システムに実行させたい具体的な修正アクションでランブックを更新してください。

ランブックの作成に関する詳細は、「AWS Systems Manager ユーザーガイド」の「[Working with runbooks](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-documents.html)」を参照してください。

**ランブックを作成するには**

1. [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) で AWS Systems Manager コンソールを開きます。

1. ナビゲーションペインで、**[ドキュメント]** を選択します。

1. **[オートメーション]** を選択します。

1. **[名前]** に、ランブックのわかりやすい名前 (**IncidentResponseRunbook** など) を入力します。

1. [**Editor (エディタ)**] タブを選択し、次に [**Edit (編集)**] を選択します。

1. エディタに、以下の内容を貼り付けます。

   ```
   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
   ```

1. [**Create automation (オートメーションを作成)**] を選択します。

## タスク 2: IAM ロールの作成
<a name="tutorials-runbook-IAM-role"></a>

次のチュートリアルを使用して、対応計画で指定されたランブックを開始するアクセス許可を Incident Manager に付与する AWS Identity and Access Management (IAM) ロールを作成します。このチュートリアルのランブックは、Amazon EC2 インスタンスを再起動します。この IAM ロールは次のタスクで、ランブックを対応計画に接続するときに指定します。

**対応計画からランブックを開始する IAM ロールを作成する**

1. IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

1. ナビゲーションペインで **ロール** を選択してから、**ロールを作成する** を選択します。

1. **[信頼されたエンティティタイプ]** で、**[AWS サービス]** が選択されていることを確認します。

1. **[ユースケース]** の **[その他の AWS サービスのユースケース]** フィールドに **Incident Manager** を入力します。

1. **[Incident Manager]** を選択し、**[次へ]** を選択します。

1. **[アクセス許可の追加]** ページで、**[ポリシーの作成]** を選択します。アクセス許可エディタが新しいブラウザウィンドウまたはタブで開きます。

1. エディタで、**[JSON]** タブを選択します。

1. 以下のアクセス許可ポリシーをコピーして、JSON エディタに貼り付けます。{{account\_ID}} を自分の AWS アカウント ID に置き換えます。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Resource": [
                   "arn:aws:ssm:*:{{111122223333}}:document/IncidentResponseRunbook",
                   "arn:aws:ssm:*::document/AWS-RestartEC2Instance",
                   "arn:aws:ssm:*:{{111122223333}}:automation-execution/*"
               ],
               "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"
               ]
           }
       ]
   }
   ```

------

1. **[Next: Tags]** (次へ: タグ) を選択します。

1. (オプション) 必要に応じて、タグをポリシーに追加します。

1. **[次へ: レビュー]** を選択します。

1. **[名前]** フィールドに、このロールがチュートリアルで使用されるものであることを識別するのに役立つ名前を入力します。

1. (オプション) **[説明]** フィールドに説明を入力します。

1. [**Create policy**] (ポリシーの作成) を選択します。

1. 作成しているロールのブラウザウィンドウまたはタブに戻ります。**[アクセス許可の追加]** ページが表示されます。

1. 更新ボタン (**[ポリシーの作成]** ボタンの横にあります) を選択し、作成したアクセス許可ポリシーの名前をフィルターボックスに入力します。

1. 作成したアクセス許可ポリシーを選択し、**[次へ]** を選択します。

1. **[名前、レビュー、および作成]** ページの **[ロール名]** に、このロールがチュートリアルで使用されるものであることを識別するのに役立つ名前を入力します。

1. (オプション) **[説明]** フィールドに説明を入力します。

1. ロールの詳細を確認し、必要に応じてタグを追加し、**[ロールの作成]** を選択します。

## タスク 3: ランブックを対応計画に接続する
<a name="tutorials-runbook-response-plan"></a>

ランブックを Incident Manager の対応計画に接続することで、一貫性があり、反復可能で、タイムリーな緩和プロセスを確保できます。このランブックは、リゾルバーが次の一連のアクションを決定するための出発点としても役立ちます。

**ランブックを対応計画に割り当てるには**

1. [Incident Manager コンソール](https://console.aws.amazon.com/systems-manager/incidents/home)を開きます。

1. **[対応計画]** を選択します。

1. **[対応計画]** では、既存の対応計画を選択し、**[編集]** を選択します。既存の対応計画がない場合は、**[対応計画の作成]** を選択して新しい対応計画を作成します。

   以下のフィールドに値を入力します。

   1. **[ランブック]** セクションで **[既存のランブックを選択]** を選択します。

   1. **[所有者]** に **[自分が所有]** が選択されていることを確認します。

   1. **[ランブック]** では、[タスク 1: ランブックを作成する](#tutorials-runbook-create) で作成したランブックを選択します。

   1. **[バージョン]** では、**[実行時のデフォルト]** を選択します。

   1. **[入力]** セクションの **[IncidentRecordArn]** パラメータで、**[インシデント ARN]** を選択します。

   1. **[実行アクセス許可]** セクションで、[タスク 2: IAM ロールの作成](#tutorials-runbook-IAM-role) で作成した IAM ロールを選択します。

1. 変更内容を保存します。

## タスク 4: CloudWatch アラームを対応計画に割り当てる
<a name="tutorials-runbook-alarm"></a>

以下の手順を使用して、Amazon EC2 インスタンスの CloudWatch アラームを対応計画に割り当てます。

**CloudWatch アラームを対応計画に割り当てるには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインの **[アラーム]** で、**[すべてのアラーム]** を選択します。

1. 対応計画に接続する Amazon EC2 インスタンスのアラームを選択します。

1. **[アクション]** を選択し、**[編集]** を選択します。メトリクスに `InstanceId` というディメンションがあることを確認します。

1. [**次へ**] を選択します。

1. **[アクションの設定ウィザード]** で、**[Systems Manager アクションを追加]** を選択します。

1. **[インシデントの作成]** を選択します。

1. [タスク 3: ランブックを対応計画に接続する](#tutorials-runbook-response-plan) で作成した対応計画を選択します。

1. **[Update alarm]** (アラームの更新) を選択します。

## タスク 5: 結果の検証
<a name="tutorials-runbook-verify"></a>

CloudWatch アラームがインシデントを作成し、対応計画で指定されたランブックを処理することを確認するには、アラームをトリガーする必要があります。アラームをトリガーしてランブックの処理が終了したら、以下の手順を使用してランブックの結果を確認できます。アラームをトリガーする方法については、「AWS CLI Command Reference」の「[set-alarm-state](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/set-alarm-state.html)」を参照してください。

1. [Incident Manager コンソール](https://console.aws.amazon.com/systems-manager/incidents/home)を開きます。

1. CloudWatch アラームによって作成されたインシデントを選択します。

1. **[ランブック]** タブを選択します。

1. Amazon EC2 インスタンスで実行されたアクションは、**[ランブックのステップ]** セクションで確認できます。

   次の図は、このチュートリアルで作成したランブックで実行されたステップがコンソールでどのようにレポートされるかを示しています。各ステップはタイムスタンプおよびステータスメッセージと共に一覧表示されます。  
![Automation ランブックのステップは、「成功」などのタイムスタンプとステータスレポートとともにレポートされます。](http://docs.aws.amazon.com/ja_jp/incident-manager/latest/userguide/images/tutorial-runbooks-1.png)

   CloudWatch アラームのすべての詳細を表示するには、**[JsonDecode2]** ステップを展開し、次に **[出力]** を展開します。

**重要**  
このチュートリアルで実装したリソースの変更のうち、残さないものはすべてクリーンアップする必要があります。これには、リソース計画およびインシデントなどの Incident Manager リソースへの変更、CloudWatch アラームの変更、このチュートリアル用に作成した IAM ロールの変更が含まれます。