

• AWS Systems Manager CloudWatch ダッシュボードは、2026 年 4 月 30 日以降は利用できなくなります。お客様は、これまでと同様に Amazon CloudWatch コンソールを使用して、Amazon CloudWatch ダッシュボードの表示、作成、管理を継続できます。詳細については、「[Amazon CloudWatch ダッシュボードのドキュメント](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)」を参照してください。

# Amazon SNS 通知を使用した Systems Manager のステータス変更のモニタリング
<a name="monitoring-sns-notifications"></a>

Amazon Simple Notification Service (Amazon SNS) を設定し、AWS Systems Manager のツールである Run Command または Maintenance Windows を使用して送信したコマンドのステータスに関する通知を送信できます。Amazon SNS は、Amazon SNS トピックをサブスクライブしているクライアントまたはエンドポイントへの通知の送信および配信を管理します。コマンドが新しい状態に変更、または*失敗*や*タイムアウト*のような状態に変更されるたびに通知を受け取ることができます。複数のノードにコマンドを送信する場合、特定ノードに送信されたコマンドの各コピーに対して通知を受けることができます。各コピーは、その*呼び出し*と呼ばれます。

Amazon SNS は、HTTP または HTTPS POST、E メール (SMTP、プレーンテキストまたは JSON 形式のいずれか)、あるいは Amazon Simple Queue Service (Amazon SQS) キューに投稿されるメッセージとして通知を配信できます。詳細については、*Amazon Simple Notification Service デベロッパーガイド*の「[Amazon SNS とは](https://docs.aws.amazon.com/sns/latest/dg/)」を参照してください。Run Command と Maintenance Windows が提供する Amazon SNS 通知に含まれる JSON データの構造の例については、「[AWS Systems Manager の Amazon SNS 通知の例](monitoring-sns-examples.md)」を参照してください。

**重要**  
次の重要な情報に注意してください。  
Amazon Simple 通知サービスの FIFO トピックはサポートされていません。
チャットアプリケーションの Amazon Q Developer は、Amazon SNS を使用した Systems Manager のモニタリングではサポートされていません。チャットアプリケーションの Amazon Q Developer を使って Systems Manager をモニタリングする場合は、Amazon EventBridge を使用します。EventBridge を使用して Systems Manager をモニタリングする方法については、「[Amazon EventBridge を使用して Systems Manager イベントをモニタリングする](monitoring-eventbridge-events.md)」を参照してください。チャットアプリケーションの Amazon EventBridge と Amazon Q Developer の詳細については、Amazon Q Developer in chat applications Administrator Guide の「[Tutorial: Create an EventBridge rule that send notifications to Amazon Q Developer in chat applications](https://docs.aws.amazon.com/chatbot/latest/adminguide/create-eventbridge-rule.html)」を参照してください。**

## AWS Systems Manager の Amazon SNS 通知の設定
<a name="monitoring-sns-configure"></a>

メンテナンスウィンドウに登録されている Run Command および Maintenance Windows のタスクは、以下のステータスに入るコマンドタスクについて Amazon SNS 通知を送信できます。
+ 進行中
+ 成功
+ 失敗
+ タイムアウト
+ Cancelled (キャンセル)

これらのステータスのいずれかを入力するコマンドの条件については、「[コマンドのステータスについて](monitor-commands.md)」を参照してください。

**注記**  
Run Command を使用してコマンドを送信すると、キャンセル中および保留中のステータスも報告されます。これらのステータスは、Amazon SNS 通知ではキャプチャされません。

### Amazon SNS 通知のコマンド概要
<a name="monitoring-sns-configure-summary"></a>

Amazon SNS 通知のメンテナンスウィンドウにある Run Command または Run Command のタスクを設定する場合、Amazon SNS は次の情報を含む概要メッセージを送信します。


****  

| フィールド | タイプ | 説明 | 
| --- | --- | --- | 
|  eventTime  |  文字列  |  イベントが開始された時刻。Amazon SNS はメッセージの配信順序を保証しないため、タイムスタンプは重要です。例: 2016-04-26T13:15:30Z   | 
|  documentName  |  文字列  |  このコマンドの実行に使用された SSM ドキュメントの名前。  | 
|  commandId  |  String  |  コマンドが送信された後に Run Command によって生成された ID です。  | 
|  expiresAfter  |  日付  |  この時間が経過したときにコマンドの実行がまだ開始されていない場合、コマンドは実行されません。  | 
|  outputS3BucketName  |  文字列  |  コマンド実行に対する応答を保存する Amazon Simple Storage Service (Amazon S3) バケットです。  | 
|  outputS3KeyPrefix  |  文字列  |  コマンド実行に対する応答を保存するバケット内の Amazon S3 のディレクトリパスです。  | 
|  requestedDateTime  |  String  |  リクエストがこの特定のノードに送信された日時です。  | 
|  instanceIds  |  StringList  |  コマンドの対象となるノードです。  インスタンス ID が概要メッセージに含まれるのは、Run Command タスクがインスタンス ID を直接ターゲットにしている場合のみです。Run Command タスクがタグベースのターゲティングを使用して発行された場合、インスタンス ID は概要メッセージに含まれません。   | 
|  ステータス  |  文字列  |  コマンドのコマンドステータスです。  | 

### 呼び出しベースの Amazon SNS 通知
<a name="monitoring-sns-configure-invocation"></a>

コマンドを複数のノードに送信する場合、Amazon SNS はコマンドの各コピーまたは呼び出しに関するメッセージを送信できます。メッセージには次の情報が含まれます。


****  

| フィールド | タイプ | 説明 | 
| --- | --- | --- | 
|  eventTime  |  文字列  |  イベントが開始された時刻。Amazon SNS はメッセージの配信順序を保証しないため、タイムスタンプは重要です。例: 2016-04-26T13:15:30Z   | 
|  documentName  |  文字列  |  このコマンドの実行に使用された Systems Manager ドキュメント (SSM ドキュメント) の名前。  | 
|  requestedDateTime  |  String  |  リクエストがこの特定のノードに送信された日時です。  | 
|  commandId  |  String  |  コマンドが送信された後に Run Command によって生成された ID です。  | 
|  instanceId  |  文字列  |  コマンドの対象となるインスタンスを選択します。  | 
|  status  |  文字列  |  この呼び出しのコマンドステータス。  | 

コマンドがステータスを変更したときに Amazon SNS 通知をセットアップするには、次のタスクを完了する必要があります。

**注記**  
メンテナンスウィンドウの Amazon SNS 通知を設定していない場合は、このトピックの「タスク 5」をスキップできます。

**Topics**
+ [Amazon SNS 通知のコマンド概要](#monitoring-sns-configure-summary)
+ [呼び出しベースの Amazon SNS 通知](#monitoring-sns-configure-invocation)
+ [タスク 1: Amazon SNS トピックを作成してサブスクライブする](#monitoring-configure-sns)
+ [タスク 2: Amazon SNS 通知用の IAM ポリシーを作成する](#monitoring-iam-policy)
+ [タスク 3: Amazon SNS 通知の IAM ロールを作成する](#monitoring-iam-notifications)
+ [タスク 4: ユーザーアクセスを設定する](#monitoring-sns-passpolicy)
+ [タスク 5: iam:PassRole ポリシーをメンテナンスウィンドウロールにアタッチする](#monitoring-sns-passpolicy-mw)

### タスク 1: Amazon SNS トピックを作成してサブスクライブする
<a name="monitoring-configure-sns"></a>

Amazon SNS *トピック*は、メンテナンスウィンドウに登録されている Run Command および Run Command タスクがコマンドのステータスに関する通知を送信するために使用する通信チャネルです。Amazon SNS では、HTTP/S、E メールに加え、Amazon Simple Queue Service (Amazon SQS) のような AWS のサービスをサポートしています。開始するには、E メールプロトコルを使用して開始することをお勧めします。トピックの作成方法の詳細については、*Amazon Simple Notification Service デベロッパーガイド*の「[Amazon SNS トピックの作成](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html)」を参照してください。

**注記**  
トピックを作成した後に [**Topic ARN (トピック ARN)**] をコピー、または書き留めます。ステータスの通知を返すように設定されたコマンドを送信するときに、この ARN を指定します。

トピックを作成したら、[**エンドポイント**] を指定してサブスクライブします。E メールプロトコルを選択した場合、エンドポイントは、通知を受け取る E メールアドレスです。トピックにサブスクライブする方法の詳細については、*Amazon Simple Notification Service デベロッパーガイド*の「[Amazon SNS トピックへのサブスクライブ](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html)」を参照してください。

Amazon SNS は、*AWS通知*の確認メールをお客様が指定した E メールアドレスに送信します。E メールを開き、[**サブスクリプションを確認**] へのリンクを選択します。

AWS からの確認メッセージが届きます。Amazon SNS は、通知を受信し、通知を E メールとして指定された E メールアドレスに送信するように設定されました。

### タスク 2: Amazon SNS 通知用の IAM ポリシーを作成する
<a name="monitoring-iam-policy"></a>

以下の手順を使用して、Amazon SNS 通知を開始するためのアクセス許可を提供するカスタム AWS Identity and Access Management (IAM) ポリシーを作成します。

**Amazon SNS 通知用のカスタム IAM ポリシーを作成するには**

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

1. ナビゲーションペインで、**Policies** を選択し、**Create Policy** を選択します。([**Get Started**] ボタンが表示された場合は、そのボタンを選択してから、[**Create Policy**] を選択します)。

1. [**JSON**] タブを選択します。

1. Amazon SNS トピックが AWS KMS 暗号化を使用しているかどうかに応じて、デフォルトの内容を次のいずれかに置き換えます。

------
#### [ SNS topic not encrypted ]

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sns:Publish"
               ],
               "Resource": "arn:aws:sns:us-east-1:111122223333:sns-topic-name"
           }
       ]
   }
   ```

------

   *region* は、米国東部 (オハイオ) リージョンの `us-east-2` のように、AWS Systems Manager でサポートされている AWS リージョン の識別子を表します。サポートされている*リージョン*値のリストについては、「*Amazon Web Services 全般のリファレンス*」の「[Systems Manager サービスエンドポイント](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region)」にある**リージョン**列を参照してください。

   **account-id** は、AWS アカウントの 12 桁の識別子を `123456789012` 形式で表します。

   *sns-topic-name* は、通知の発行に使用する Amazon SNS トピックの名前を表します。

------
#### [ SNS topic encrypted ]

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sns:Publish"
               ],
               "Resource": "arn:aws:sns:us-east-1:111122223333:sns-topic-name"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "kms:GenerateDataKey",
                   "kms:Decrypt"
               ],
               "Resource": "arn:aws:kms:us-east-1:111122223333:key/kms-key-id"
           }
       ]
   }
   ```

------

   *region* は、米国東部 (オハイオ) リージョンの `us-east-2` のように、AWS Systems Manager でサポートされている AWS リージョン の識別子を表します。サポートされている*リージョン*値のリストについては、「*Amazon Web Services 全般のリファレンス*」の「[Systems Manager サービスエンドポイント](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region)」にある**リージョン**列を参照してください。

   **account-id** は、AWS アカウントの 12 桁の識別子を `123456789012` 形式で表します。

   *sns-topic-name* は、通知の発行に使用する Amazon SNS トピックの名前を表します。

   *kms-key-id* は、トピックの暗号化と復号に使用する AWS KMS の対称暗号化 KMS キーの ID を、`1234abcd-12ab-34cd-56ef-12345EXAMPLE` という形式で表しています。

**注記**  
AWS KMS 暗号化の使用には料金がかかります。詳細については、「*AWS Key Management Service デベロッパーガイド*」の「[Managing Amazon SNS encryption keys and costs](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html)」を参照してください。

------

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

1. (オプション) 1 つ以上のタグキーと値のペアを追加して、このポリシーのアクセスを整理、追跡、または制御します。

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

1. [**Review policy (ポリシーの確認)**] ページで、[**Name (名前)**] にインラインポリシーの名前を入力します。例: **my-sns-publish-permissions**。

1. (オプション) [**Description (説明)**] に、ポリシーの説明を入力します。

1. [**Create policy**] を選択します。

### タスク 3: Amazon SNS 通知の IAM ロールを作成する
<a name="monitoring-iam-notifications"></a>

Amazon SNS 通知の IAM ロールを作成するには、次の手順を使用します。このサービスロールは、Systems Manager で Amazon SNS 通知を開始するために使用されます。以降の手順では、このロールは Amazon SNS IAM ロールと呼ばれます。

**Amazon SNS 通知の IAM サービスロールを作成するには**

1. AWS マネジメントコンソール にサインインして、IAM コンソール [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) を開きます。

1. IAM コンソールのナビゲーションペインで、**[ロール]**、**[ロールを作成]** を選択します。

1. **[AWS のサービス]**、[Systems Manager] の順にクリックします。

1. [Systems Manager のユースケース] を選択します。その後、**[Next]** を選択します。

1. [**Attach permissions policies (アクセス許可ポリシーのアタッチ)**] ページで、タスク 2 で作成したカスタムポリシーの名前の左側にあるチェックボックスをオンにします。例: **my-sns-publish-permissions**。

1. (オプション) [アクセス許可の境界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)を設定します。このアドバンスド機能は、サービスロールで使用できますが、サービスにリンクされたロールではありません。

   **[Permissions boundary]** (アクセス許可の境界) セクションを展開し、**[Use a permissions boundary to control the maximum role permissions]** (アクセス許可の境界を使用して、ロールのアクセス許可の上限を設定する) を選択します。IAM には、あなたのアカウント内の AWS 管理ポリシーとカスタマー管理ポリシーのリストがあります。アクセス許可の境界に使用するポリシーを選択するか、[**ポリシーを作成**] を選択して新しいブラウザタブを開き、新しいポリシーをゼロから作成します。詳細については、『*IAM ユーザーガイド*』の「[IAM ポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)」を参照してください。ポリシーを作成したら、そのタブを閉じて元のタブに戻り、アクセス許可の境界として使用するポリシーを選択します。

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

1. 可能な場合は、このロールの目的を識別するのに役立つロール名またはロール名サフィックスを入力します。ロール名は AWS アカウント アカウント内で一意である必要があります。大文字と小文字は区別されません。例えば、**PRODROLE** と **prodrole** というロール名を両方作成することはできません。多くのエンティティによりロールが参照されるため、作成後にロール名を変更することはできません。

1. (オプション) [**Description (説明)**] には、新しいロールの説明を入力します。

1. **[Step 1: Select trusted entities]** (ステップ 1: 信頼済みエンティティの選択) または **[Step 2: Select permissions]** (ステップ 2: 権限の選択) のセクションで **[Edit]** (編集) を選択し、ロールのユースケースと権限を変更します。

1. (オプション) タグをキーバリューペアとしてアタッチして、メタデータをユーザーに追加します。IAM でのタグの使用に関する詳細については、「IAM ユーザーガイド」の「[IAM リソースにタグを付ける](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html)」を参照してください。

1. ロール情報を確認し、**ロールの作成** を選択します。

1. ロールの名前を選択してから、**[Role ARN]** (ロール ARN) 値をコピーまたはメモします。Amazon SNS 通知を返すように設定されたコマンドを送信するときに、ロールのこの Amazon リソースネーム (ARN) が使用されます。

1. [**Summary (概要)**] ページは開いたままにします。

### タスク 4: ユーザーアクセスを設定する
<a name="monitoring-sns-passpolicy"></a>

IAM エンティティ (ユーザー、ロール、またはグループ) に管理者許可が割り当てられている場合、ユーザーまたはロールには Run Command と Maintenance Windows へのアクセスと AWS Systems Manager ツールが付与されます。

管理者許可のないエンティティの場合、管理者は IAM エンティティに次のアクセス許可を付与する必要があります。
+ `AmazonSSMFullAccess` マネージドポリシー、または同等のアクセス許可を付与するポリシー。
+ `iam:PassRole` で作成されたロールの [タスク 3: Amazon SNS 通知の IAM ロールを作成する](#monitoring-iam-notifications) アクセス許可。例えば、次のようになります。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111122223333:role/sns-role-name",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "ssm.amazonaws.com"
                }
            }
        }
    ]
}
```

------

アクセス権限を付与するにはユーザー、グループ、またはロールにアクセス許可を追加します。
+ AWS IAM アイデンティティセンター のユーザーとグループ:

  アクセス許可セットを作成します。「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[アクセス許可セットを作成する](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)」の手順に従ってください。
+ IAM 内で、ID プロバイダーによって管理されているユーザー:

  ID フェデレーションのロールを作成します。詳細については *IAM ユーザーガイド* の [サードパーティー ID プロバイダー (フェデレーション) 用のロールを作成する](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html) を参照してください。
+ IAM ユーザー:
  + ユーザーが担当できるロールを作成します。手順については *IAM ユーザーガイド* の [IAM ユーザーのロールの作成](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html) を参照してください。
  + (お奨めできない方法) ポリシーをユーザーに直接アタッチするか、ユーザーをユーザーグループに追加します。*IAM ユーザーガイド* の [ユーザー (コンソール) へのアクセス許可の追加](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) の指示に従います。

**ユーザーアクセスを設定し、`iam:PassRole` ポリシーをユーザーアカウントにアタッチするには**

1. IAM のナビゲーションペインで、[**ユーザー**] を選択し、設定するユーザーアカウントを選択します。

1. [**Permissions (アクセス許可)**] タブのポリシーリストで、**AmazonSSMFullAccess** ポリシーがリストにあるか、またはアカウントに Systems Manager へのアクセス許可を与える同等のポリシーがあるかどうかを確認します。

1. [**Add inline policy** (インラインポリシーの追加)] を選択します。

1. [**Create policy** (ポリシーの作成)] ページの [**Visual editor** (ビジュアルエディタ)] タブを選択します。

1. [**Choose a service** (サービスの選択)] を選んでから、[**IAM**] を選択します。

1. **[Actions]** (アクション) の場合は、**[Filter actions]** (フィルタアクション) テキストボックスに「**PassRole**」を入力し、**[PassRole]** の横にあるチェックボックスを選択します。

1. [**Resources** (リソース)] の場合は、[**Specific** (固有)] が選択されていることを確認し、[**Add ARN** (ARN の追加)] を選択します。

1. [**Specify ARN for role (ロールの ARN の指定)**] フィールドに、タスク 3 の終わりでコピーした Amazon SNS IAM ロールの ARN を貼り付けます。システムによって、[**アカウント**] と [**Role name with path (ロール名とパス)**] フィールドが自動的に入力されます。

1. [**Add**] (追加) をクリックします。

1. [**Review policy** (ポリシーの確認)] を選択します。

1. **[Review Policy]** (ポリシーの確認) ページに名前を入力し、**[Create Policy]** (ポリシーの作成) を選択します。

### タスク 5: iam:PassRole ポリシーをメンテナンスウィンドウロールにアタッチする
<a name="monitoring-sns-passpolicy-mw"></a>

Run Command タスクをメンテナンスウィンドウに登録する場合、サービスロール Amazon リソースネーム (ARN) を指定します。このサービスロールは、メンテナンスウィンドウに登録されているタスクを実行するために Systems Manager によって使用されます。登録された Run Command タスクの Amazon SNS 通知を設定するには、指定されたメンテナンスウィンドウサービスロールに `iam:PassRole` ポリシーをアタッチします。登録されたタスクを Amazon SNS 通知に設定しない場合、このタスクはスキップしてください。

`iam:PassRole` ポリシーを使用すると、Maintenance Windows サービスロールは、タスク 3 で作成した Amazon SNS IAM ロールを Amazon SNS サービスに渡すことができます。次の手順は、`iam:PassRole` ポリシーを Maintenance Windows サービスロールにアタッチする方法を示しています。

**注記**  
登録された Run Command タスクに関連する通知を送信するには、メンテナンスウィンドウのカスタムサービスロールを使用します。詳細については、「[Maintenance Windows を設定する](setting-up-maintenance-windows.md)」を参照してください。  
メンテナンスウィンドウのタスク用にカスタムサービスロールを作成する必要がある場合は、「[Maintenance Windows を設定する](setting-up-maintenance-windows.md)」を参照してください。

**`iam:PassRole` ポリシーを Maintenance Windows ロールにアタッチするには**

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

1. ナビゲーションペインで [**Roles (ロール)**] を選択し、タスク 3 で作成した Amazon SNS IAM ロールを選択します。

1. [**Role ARN** (ロールの ARN)] をコピー、または書き留めて、IAM コンソールの[**Roles** (ロール)] セクションに戻ります。

1. **[Role name]** (ロール名) リストから、作成したカスタム Maintenance Windows のサービスロールを選択します。

1. **[Permissions]** (許可) タブで、`AmazonSSMMaintenanceWindowRole` ポリシーが一覧に表示されていること、または Systems Manager API に対するメンテナンスウィンドウの許可を与える同等のポリシーがあることを確認します。付与されていない場合は、**[アクセス許可をアタッチ、ポリシーをアタッチ]** をクリックして、アタッチします。

1. **[Add permissions, Create inline policy]** (アクセス許可の追加、インラインポリシーの作成) を選択します。

1. [**Visual Editor** (ビジュアルエディタ)] タブを選択します。

1. [**Service** (サービス)] で、[**IAM**] を選択します。

1. **[Actions]** (アクション) の場合は、**[Filter actions]** (フィルタアクション) テキストボックスに「**PassRole**」を入力し、**[PassRole]** の横にあるチェックボックスを選択します。

1. [**Resources (リソース)**] で、[**Specific (特定)**]、[**Add ARN (ARN の追加)**] の順に選択します。

1. [**Specify ARN for role (ロールの ARN を指定)**] ボックスで、タスク 3 で作成した Amazon SNS IAM ロールの ARN を貼り付けて、[**Add (追加)**] を選択します。

1. [**ポリシーの確認**] を選択します。

1. **[ポリシーの確認]** ページで `PassRole` ポリシーの名前を入力し、**[ポリシーの作成]** をクリックします。

# AWS Systems Manager の Amazon SNS 通知の例
<a name="monitoring-sns-examples"></a>

Amazon Simple Notification Service (Amazon SNS) を設定し、AWS Systems Manager のツールである Run Command または Maintenance Windows を使用して送信したコマンドのステータスに関する通知を送信できます。

**注記**  
このガイドでは、Run Command または Maintenance Windows の通知を設定する方法は説明していません。Run Command または Maintenance Windows を設定してコマンドのステータスに関する Amazon SNS 通知を送信する方法については、「[AWS Systems Manager の Amazon SNS 通知の設定](monitoring-sns-notifications.md#monitoring-sns-configure)」を参照してください。

次の例は、Run Command または Maintenance Windows に設定されている場合に Amazon SNS 通知によって返される JSON 出力の構造を示しています。

**インスタンス ID ターゲティングを使用したコマンド概要メッセージの JSON 出力例**

```
{
    "commandId": "a8c7e76f-15f1-4c33-9052-0123456789ab",
    "documentName": "AWS-RunPowerShellScript",
    "instanceIds": [
        "i-1234567890abcdef0",
        "i-9876543210abcdef0"
    ],
    "requestedDateTime": "2019-04-25T17:57:09.17Z",
    "expiresAfter": "2019-04-25T19:07:09.17Z",
    "outputS3BucketName": "amzn-s3-demo-bucket",
    "outputS3KeyPrefix": "runcommand",
    "status": "InProgress",
    "eventTime": "2019-04-25T17:57:09.236Z"
}
```

**タグベースのターゲティングを使用したコマンド概要メッセージの JSON 出力例**

```
{
    "commandId": "9e92c686-ddc7-4827-b040-0123456789ab",
    "documentName": "AWS-RunPowerShellScript",
    "instanceIds": [],
    "requestedDateTime": "2019-04-25T18:01:03.888Z",
    "expiresAfter": "2019-04-25T19:11:03.888Z",
    "outputS3BucketName": "",
    "outputS3KeyPrefix": "",
    "status": "InProgress",
    "eventTime": "2019-04-25T18:01:05.825Z"
}
```

**呼び出しメッセージの JSON 出力例**

```
{
    "commandId": "ceb96b84-16aa-4540-91e3-925a9a278b8c",
    "documentName": "AWS-RunPowerShellScript",
    "instanceId": "i-1234567890abcdef0",
    "requestedDateTime": "2019-04-25T18:06:05.032Z",
    "status": "InProgress",
    "eventTime": "2019-04-25T18:06:05.099Z"
}
```

# Run Command を使用してステータス通知を返すコマンドを送信する
<a name="monitoring-sns-rc-send"></a>

以下の手順は、AWS Command Line Interface (AWS CLI) または AWS Systems Manager コンソールを使用し、ステータス通知を返すように設定されている Run Command (AWS Systems Manager のツール) 経由でコマンドを送信する方法を示しています。

## 通知を返す Run Command の送信 (コンソール)
<a name="monitoring-sns-rc-send-console"></a>

Systems Manager コンソールを使用してステータス通知を返すように設定されているコマンドを Run Command 経由で送信するには、以下の手順を使用します。

**通知を返すコマンドを送信するには (コンソール)**

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

1. ナビゲーションペインで、**[Run Command]** を選択します。

1. [**Run command (コマンドの実行)**] を選択します。

1. [**Command document**] リストで、Systems Manager ドキュメントを選択します。

1. [**Command parameters**] セクションで、必須パラメータの値を指定します。

1. **[Targets]** (ターゲット) セクションで、タグの指定、インスタンスやエッジデバイスの手動選択、リソースグループの指定により、このオペレーションを実行するマネージドノードを選択します。
**ヒント**  
表示されるはずのマネージドノードが表示されない場合は、トラブルシューティングのヒントについて「[マネージドノードの可用性のトラブルシューティング](fleet-manager-troubleshooting-managed-nodes.md)」を参照してください。

1. **[その他のパラメータ]** で、以下の操作を行います。
   + **[コメント]** に、このコマンドに関する情報を入力します。
   + **[タイムアウト (秒)]** に、コマンドの実行全体が失敗するまでにシステムが待機する秒数を指定します。

1. **[レート制御]** の場合:
   + **[同時実行数]** の場合、コマンドを同時に実行するマネージドノードの数または割合を指定します。
**注記**  
マネージドノードに適用されるタグを指定するか、AWS リソースグループを指定してターゲットを選択し、ターゲットとなるマネージドノードの数が不明な場合は、割合を指定してドキュメントを同時に実行できるターゲットの数を制限します。
   + **[エラーのしきい値]** で、ノードの数または割合のいずれかで失敗した後、他のマネージドノードでのコマンドの実行をいつ停止するか指定します。例えば、3 つのエラーを指定した場合、4 番目のエラーが受信されると、システムマネージャー はコマンドの送信を停止します。コマンドを処理しているマネージドノードもエラーを送信する可能性があります。

1. (オプション) コマンド出力をファイルに保存する場合は、**[出力オプション]** の **[S3 バケットにコマンド出力を書き込む]** ボックスを選択します。ボックスにバケット名とプレフィックス (フォルダ) 名を入力します。
**注記**  
S3 バケットにデータを書き込む機能を許可する S3 許可は、このタスクを実行する IAM ユーザーのものではなく、インスタンスに割り当てられたインスタンスプロファイル (EC2 インスタンスの場合) または IAM サービスロール (ハイブリッドアクティベーションマシン) のものです。詳細については、「[Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)」または「[ハイブリッド環境に IAM サービスロールを作成する](hybrid-multicloud-service-role.md)」を参照してください。さらに、指定された S3 バケットが別の AWS アカウント にある場合は、マネージドノードに関連付けられたインスタンスプロファイルまたは IAM サービスロールが、そのバケットへの書き込みに必要なアクセス許可があることを確認してください。

1. [**SNS Notifications** (SNS 通知)] セクションで、[**Enable SNS notifications** (SNS 通知の有効化)] を選択します。

1. **[IAM role]** (IAM ロール) で、[Amazon SNS 通知を使用した Systems Manager のステータス変更のモニタリング](monitoring-sns-notifications.md) のタスク 3 で作成した Amazon SNS IAM ロール ARN を選択します。

1. [**SNS topic** (SNS トピック)] では、使用する Amazon SNS トピック ARN を入力します。

1. [**Event notifications** (イベント通知)] の場合は、通知を受け取るイベントを選択します。

1. **[Change notifications]** (変更通知) で、コマンドの概要のみ (**[Command status changes]** (コマンドステータスの変更)) または複数のノードに送信されたコマンドの各コピー (**[Command status on each instance changes]** (各インスタンスのコマンドステータスの変更)) の通知を受信するように選択します。

1. [**Run (実行)**] を選択します。

1. Amazon SNS からのメッセージが E メールされていることを確認し、E メールを開きます。Amazon SNS では、E メールメッセージの送信に数分かかる場合があります。

## 通知を返す Run Command の送信 (CLI)
<a name="monitoring-sns-rc-send-cli"></a>

次の手順を使用して、AWS CLI を使用してステータス通知を返すように設定されたコマンドを Run Command 経由で送信します。

**通知を返すコマンドを送信するには (CLI)**

1. AWS CLI を開きます。

1. 以下のコマンドで、マネージドインスタンス ID に基づいてターゲットとなるパラメータを指定します。

   ```
   aws ssm send-command --instance-ids "ID-1, ID-2" --document-name "Name" --parameters '{"commands":["input"]}' --service-role "SNSRoleARN" --notification-config '{"NotificationArn":"SNSTopicName","NotificationEvents":["All"],"NotificationType":"Command"}'
   ```

   次に例を示します。

   ```
   aws ssm send-command --instance-ids "i-02573cafcfEXAMPLE, i-0471e04240EXAMPLE" --document-name "AWS-RunPowerShellScript" --parameters '{"commands":["Get-Process"]}' --service-role "arn:aws:iam::111122223333:role/SNS_Role" --notification-config '{"NotificationArn":"arn:aws:sns:us-east-1:111122223333:SNSTopic","NotificationEvents":["All"],"NotificationType":"Command"}'
   ```

**代替コマンド**  
タグを使用してマネージドインスタンスをターゲットにするには、以下のコマンドでパラメータを指定します。

   ```
   aws ssm send-command --targets "Key=tag:TagName,Values=TagKey" --document-name "Name" --parameters '{"commands":["input"]}' --service-role "SNSRoleARN" --notification-config '{"NotificationArn":"SNSTopicName","NotificationEvents":["All"],"NotificationType":"Command"}'
   ```

   次に例を示します。

   ```
   aws ssm send-command --targets "Key=tag:Environment,Values=Dev" --document-name "AWS-RunPowerShellScript" --parameters '{"commands":["Get-Process"]}' --service-role "arn:aws:iam::111122223333:role/SNS_Role" --notification-config '{"NotificationArn":"arn:aws:sns:us-east-1:111122223333:SNSTopic","NotificationEvents":["All"],"NotificationType":"Command"}'
   ```

1. **[Enter]** キーを押します。

1. Amazon SNS からのメッセージが E メールされていることを確認し、E メールを開きます。Amazon SNS では、E メールメッセージの送信に数分かかる場合があります。

詳細については、*AWS CLI コマンドリファレンス*の [https://docs.aws.amazon.com/cli/latest/reference/ssm/send-command.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/send-command.html) を参照してください。

# メンテナンスウィンドウを使用して、ステータス通知を返すコマンドを送信する
<a name="monitoring-sns-mw-register"></a>

以下の手順は、AWS Systems Manager コンソールまたは AWS Command Line Interface (AWS CLI) を使用して、メンテナンスウィンドウで Run Command タスクを登録する方法を示しています。Run Command は AWS Systems Manager のツールです。この手順では、ステータス通知を返すように Run Command タスクを設定する方法についても説明します。

**[開始する前に]**  
メンテナンスウィンドウを作成していない、またはターゲットを登録していない場合は、メンテナンスウィンドウを作成してターゲットを登録する方法の手順について、「[コンソールを使用してメンテナンスウィンドウを作成および管理する](sysman-maintenance-working.md)」を参照してください。

Amazon Simple Notification Service (Amazon SNS) サービスから通知を受け取るには、登録されたタスクで指定された Maintenance Windows サービスロールに `iam:PassRole` ポリシーをアタッチします。Maintenance Windows サービスローに `iam:PassRole` アクセス許可を追加していない場合は、「[タスク 5: iam:PassRole ポリシーをメンテナンスウィンドウロールにアタッチする](monitoring-sns-notifications.md#monitoring-sns-passpolicy-mw)」を参照してください。

## 通知を返す Run Command タスクをメンテナンスウィンドウに登録する (コンソール)
<a name="monitoring-sns-mw-register-console"></a>

以下の手順で、Systems Manager コンソールを使用してステータス通知をメンテナンスウィンドウに返すように設定されている Run Command タスクを登録します。

**通知を返す Run Command タスクをメンテナンスウィンドウに登録するには (コンソール)**

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

1. ナビゲーションペインで、**[Maintenance Windows]** を選択します。

1. Amazon Simple Notification Service (Amazon SNS) 通知を送信するように設定された Run Command タスクを登録するメンテナンスウィンドウを選択します。

1. [**Actions** (アクション)] を選択し、[**Register Run command task** (Run command タスクの登録)] を選択します。

1. (オプション) [**Name** (名前)] フィールドにタスクの名前を入力します。

1. (オプション) [**Description** (説明)] にリポジトリの説明を入力します。

1. **[Command document]** (コマンドドキュメント) で、コマンドドキュメントを選択します。

1. [**タスクの優先順位**] で、このタスクの優先度を指定します。ゼロ (`0`) が最高の優先度になります。メンテナンスウィンドウのタスクは、優先順位に従ってスケジュールされます。優先度が同じタスクは並行してスケジュールされます。

1. [**Targets** (ターゲット)] セクションで登録済みのターゲット グループを選択するか、未登録のターゲットを選択します。

1. **[レート制御]** の場合:
   + **[同時実行数]** の場合、コマンドを同時に実行するマネージドノードの数または割合を指定します。
**注記**  
マネージドノードに適用されるタグを指定するか、AWS リソースグループを指定してターゲットを選択し、ターゲットとなるマネージドノードの数が不明な場合は、割合を指定してドキュメントを同時に実行できるターゲットの数を制限します。
   + **[エラーのしきい値]** で、ノードの数または割合のいずれかで失敗した後、他のマネージドノードでのコマンドの実行をいつ停止するか指定します。例えば、3 つのエラーを指定した場合、4 番目のエラーが受信されると、システムマネージャー はコマンドの送信を停止します。コマンドを処理しているマネージドノードもエラーを送信する可能性があります。

1. [**IAM service role** (IAM サービスロール)] 領域で、SNS ロールへの `iam:PassRole` アクセス許可を持つ Maintenance Windows サービスを選択します。
**注記**  
`iam:PassRole` アクセス許可を Maintenance Windows ロールに追加すると、Systems Manager は SNS ロールを Amazon SNS に渡せるようになります。`iam:PassRole` アクセス許可を追加していない場合は、トピック [Amazon SNS 通知を使用した Systems Manager のステータス変更のモニタリング](monitoring-sns-notifications.md) の「タスク 5」を参照してください。

1. (オプション) [**出力オプション**] で、コマンド出力をファイルに保存するには、[**S3 への出力の書き込みを有効にします**] ボックスをオンにします。ボックスにバケット名とプレフィックス (フォルダ) 名を入力してください。
**注記**  
S3 バケットにデータを書き込む機能を許可する S3 アクセス許可は、このタスクを実行する IAM ユーザーのものではなく、マネージドノードに割り当てられたインスタンスプロファイルのものです。詳細については、「[Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)」または「[ハイブリッド環境に IAM サービスロールを作成する](hybrid-multicloud-service-role.md)」を参照してください。さらに、指定された S3 バケットが別の AWS アカウント にある場合は、マネージドノードに関連付けられたインスタンスプロファイルまたは IAM サービスロールに、そのバケットへの書き込みに必要なアクセス許可があることを確認してください。

1. [**SNS notifications** (SNS 通知)] セクションで、以下を実行します。
   + [**Enable SNS Notifications** (SNS 通知を有効にする)] を選択します。
   + [**IAM role** (IAM ロール)] では、[Amazon SNS 通知を使用した Systems Manager のステータス変更のモニタリング](monitoring-sns-notifications.md) のタスク 3 で作成した Amazon SNS IAM ロール Amazon リソースネーム (ARN) を選択して、Amazon SNS を開始します。
   + [**SNS topic** (SNS トピック)] では、使用する Amazon SNS トピック ARN を入力します。
   + [**Event type** (イベントのタイプ)] では、通知を受け取るイベントを選択します。
   + [**Notification type**] (通知のタイプ) の場合は、複数のインスタンス (呼び出し) またはコマンドの概要に送信されたコマンドの各コピーの通知を受け取るよう選択します。

1. [**Parameters** (パラメータ)] セクションで、選択したコマンドドキュメントに基づいて必要なパラメータを入力します。

1. [**Register Run command task** (Run command タスクの登録)] を選択します。

1. メンテナンスウィンドウを次回実行した後、E メールで Amazon SNS からのメッセージを確認し、Eメールを開いてください。Amazon SNS では、E メールメッセージの送信に数分かかる場合があります。

## 通知を返す Run Command タスクをメンテナンスウィンドウに登録 (CLI)
<a name="monitoring-sns-mw-register-cli"></a>

AWS CLI を使用してステータス通知をメンテナンスウィンドウに返すように設定されている Run Command タスクを登録するには、次の手順を使用します。

**通知を返す Run Command タスクをメンテナンスウィンドウに登録するには (CLI)**
**注記**  
タスクオプションをより効率的に管理するために、この手順ではコマンドオプション `--cli-input-json` を使用します。オプション値は、JSON ファイルに保存されています。

1. ローカルマシンで、`RunCommandTask.json` という名前のファイルを作成します。

1.  ファイルに次の内容を貼り付けます。

   ```
   {
       "Name": "Name",
       "Description": "Description",
       "WindowId": "mw-0c50858d01EXAMPLE",
       "ServiceRoleArn": "arn:aws:iam::account-id:role/MaintenanceWindowIAMRole",
       "MaxConcurrency": "1",
       "MaxErrors": "1",
       "Priority": 3,
       "Targets": [
           {
               "Key": "WindowTargetIds",
               "Values": [
                   "e32eecb2-646c-4f4b-8ed1-205fbEXAMPLE"
               ]
           }
       ],
       "TaskType": "RUN_COMMAND",
       "TaskArn": "CommandDocumentName",
       "TaskInvocationParameters": {
           "RunCommand": {
               "Comment": "Comment",
               "TimeoutSeconds": 3600,
               "NotificationConfig": {
                   "NotificationArn": "arn:aws:sns:region:account-id:SNSTopicName",
                   "NotificationEvents": [
                       "All"
                   ],
                   "NotificationType": "Command"
               },
               "ServiceRoleArn": "arn:aws:iam::account-id:role/SNSIAMRole"
           }
       }
   }
   ```

1. サンプル値を自分のリソースの情報に置き換えます。

   この例で省略されているオプションを使用する場合は、復元することもできます。たとえば、コマンドの出力を S3 バケットに保存することができます。

   詳細については、AWS CLI コマンドリファレンスの「[https://docs.aws.amazon.com/cli/latest/reference/ssm/register-task-with-maintenance-window.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/register-task-with-maintenance-window.html)」を参照してください。

1. ファイルを保存します。

1. ファイルを保存したローカルマシン上のディレクトリで、次のコマンドを実行します。

   ```
   aws ssm register-task-with-maintenance-window --cli-input-json file://RunCommandTask.json
   ```
**重要**  
ファイル名の前に必ず `file://` を含めてください。このコマンドでは必須です。

   成功した場合、このコマンドは次のような情報を返します。

   ```
   {
       "WindowTaskId": "j2l8d5b5c-mw66-tk4d-r3g9-1d4d1EXAMPLE"
   }
   ```

1. メンテナンスウィンドウを次に実行した後、E メールで Amazon SNS からのメッセージを確認し、Eメールを開いてください。Amazon SNS では、E メールメッセージの送信に数分かかる場合があります。

コマンドラインからメンテナンスウィンドウのタスクを登録する方法の詳細については、「[メンテナンスウィンドウにタスクを登録する](mw-cli-tutorial-tasks.md)」を参照してください。