Amazon SNS 通知を使用した Systems Manager ステータス変更のモニタリング - AWS Systems Manager

Amazon SNS 通知を使用した Systems Manager ステータス変更のモニタリング

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

Amazon SNS は、HTTP または HTTPS POST、E メール (SMTP、プレーンテキストまたは JSON 形式のいずれか)、あるいは Amazon Simple Queue Service (Amazon SQS) キューに投稿されるメッセージとして通知を配信できます。詳細については、Amazon Simple Notification Service 開発者ガイドの「Amazon SNS とは何ですか」を参照してください。Run Command と メンテナンスウィンドウ が提供する Amazon SNS 通知に含まれる JSON データの構造の例については、「AWS Systems Manager の Amazon SNS 通知の例」を参照してください。

AWS Systems Manager 用の Amazon SNS 通知の設定

メンテナンスウィンドウに登録されている Run Command および Run Command タスクは、以下のステータスに入るコマンドタスクについて Amazon SNS 通知を送信できます。これらのステータスのいずれかを入力するコマンドの条件については、「コマンドのステータスについて」を参照してください。

  • 進行中

  • 成功

  • 失敗

  • タイムアウト

  • Canceled

注記

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

コマンド概要の Amazon SNS 通知

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

フィールド タイプ 説明

eventTime

文字列

イベントがトリガーされた時刻。Amazon SNS はメッセージの配信順序を保証しないため、タイムスタンプは重要です。例: 2016-04-26T13:15:30Z

documentName

文字列

このコマンドの実行に使用された SSM ドキュメントの名前。

commandId

文字列

コマンドが送信された後に Run Command によって生成された ID です。

expiresAfter

この時間に達し、コマンドが既に実行を開始している場合は、実行されません。

outputS3BucketName 文字列 コマンド実行に対する応答を保存する Amazon Simple Storage Service (Amazon S3) バケットです。
outputS3KeyPrefix 文字列 コマンド実行に対する応答を保存するバケット内の Amazon S3 のディレクトリパスです。

requestedDateTime

文字列

リクエストがこの特定のインスタンスに送信された日時です。

instanceIds

StringList

コマンドの対象となるインスタンスです。

注記

インスタンス ID が概要メッセージに含まれるのは、Run Command タスクがインスタンス ID を直接ターゲットにしている場合のみです。Run Command タスクがタグベースのターゲティングを使用して発行された場合、インスタンス ID は概要メッセージに含まれません。

status

文字列

コマンドのコマンドステータスです。

呼び出しベースの Amazon SNS 通知

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

フィールド タイプ 説明

eventTime

文字列

イベントがトリガーされた時刻。Amazon SNS はメッセージの配信順序を保証しないため、タイムスタンプは重要です。例: 2016-04-26T13:15:30Z

documentName

文字列

このコマンドの実行に使用された Systems Manager ドキュメントの名前。

requestedDateTime

文字列

リクエストがこの特定のインスタンスに送信された日時です。

commandId

文字列

コマンドが送信された後に Run Command によって生成された ID です。

instanceId

文字列

コマンドの対象となるインスタンスを選択します。

status

文字列

この呼び出しのコマンドステータス。

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

注記

メンテナンスウィンドウの Amazon SNS 通知を設定していない場合は、以下のタスク 5 をスキップできます。

タスク 1: Amazon SNS トピックを作成してサブスクライブする

Amazon SNS トピックは、メンテナンスウィンドウに登録されている Run Command および Run Command タスクがコマンドのステータスに関する通知を送信するために使用する通信チャネルです。Amazon SNS では、HTTP/S、E メールに加え、Amazon SQS のような AWS のサービスなど、さまざまな通信プロトコルをサポートしています。迅速に開始するには、E メールプロトコルを使用して開始することをお勧めします。トピックを作成する方法については、Amazon Simple Notification Service 開発者ガイド の「トピックの作成」を参照してください。

注記

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

トピックを作成したら、[エンドポイント] を指定してサブスクライブします。E メールプロトコルを選択した場合、エンドポイントは、通知を受け取る E メールアドレスです。トピックをサブスクライブする方法の詳細については、Amazon Simple Notification Service 開発者ガイド の「Amazon SNS トピックにエンドポイントをサブスクライブする」を参照してください。

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

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

タスク 2: Amazon SNS 通知用の IAM ポリシーを作成する

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

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

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

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

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

  4. デフォルトコンテンツを以下のものと置き換えます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": "sns-topic-arn" } ] }

    sns-topic-arn は、Amazon Simple Notification Service 通知の送信に使用する既存の Amazon Simple Notification Service (Amazon SNS) トピックの ARN を arn:aws:sns::account-id:sns-topic-name. 形式で表します (例: arn:aws:sns::123456789012:my-sns-topic)。

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

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

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

  8. [ポリシーの作成] を選択します。

タスク 3: Amazon SNS 通知の IAM ロールを作成する

Amazon SNS 通知の IAM ロールを作成するには、次の手順を使用します。このサービスロールは、Amazon SNS 通知をトリガーするために Systems Manager によって使用されます。

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

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

  2. ナビゲーションペインで [Roles] を選択し、続いて [Create role] を選択します。

  3. [信頼されたエンティティの種類を選択] で、[AWS のサービス] を選択します。

  4. [Choose a use case (ユースケースの選択)] セクションで、[Systems Manager] を選択し、[Next: Permissions (次へ: アクセス許可)] を選択します。

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

  6. [次へ: タグ] を選択します。

  7. (オプション) 1 つ以上のタグ/値ペアを追加して、このロールのアクセスを整理、追跡、または制御し、[次へ: 確認] を選択します。

  8. [Review (確認)] ページで、[Role name (ロール名)] ボックスに my-sns-role などの名前を入力します。

  9. (オプション) デフォルトのロールの説明を変更して、このロールの目的を反映させます。例: Triggers SNS topics on your behalf.

  10. [Create role (ロールの作成)] を選択します。システムでは、[Roles] ページが返されます。

  11. [Role ARN (ロールの ARN)] をコピー、または書き留めます。Amazon SNS 通知を返すように設定されたコマンドを送信するときに、このロール ARN が使用されます。

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

タスク 4: ユーザーアクセスを設定する

AWS Identity and Access Management (IAM) ユーザーアカウント、グループ、またはロールに管理者アクセス許可が割り当てられている場合は、Systems Manager Run Command および メンテナンスウィンドウ にアクセスできます。管理者アクセス許可がない場合は、管理者に AmazonSSMFullAccess 管理ポリシーの割り当てを依頼するか、IAM アカウント、グループ、またはロールに同等のアクセス許可を付与するポリシーの割り当てを依頼してください。

Run Command と メンテナンスウィンドウ を使用するようにユーザーアカウントを設定するには、以下の手順を使用します。新規ユーザーアカウントを作成する必要がある場合、IAM ユーザーガイド の「AWS アカウントでの IAM ユーザーの作成」を参照してください。

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

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

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

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

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

  5. [Service (サービス)]、[IAM] の順に選択します。

  6. [アクションの選択] を選択します。

  7. [Filter actions (フィルタアクション)] テキストボックスに「PassRole」と入力し、[PassRole] オプションを選択します。

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

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

  10. [Add (追加)] を選択します。

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

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

タスク 5: iam:PassRole ポリシーをメンテナンスウィンドウロールにアタッチする

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

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

注記

登録された Run Command タスクに関連する通知を送信するには、メンテナンスウィンドウのカスタムサービスロールを使用する必要があります。詳細については、サービスにリンクされたロール、またはカスタムサービスロールを使用してメンテナンスウィンドウタスクを実行しますか? を参照してください。

カスタムサービスロールを作成する必要がある場合は、次のいずれかのトピックを参照してください。

メンテナンスウィンドウ ロールに iam:PassRole ポリシーをアタッチするには

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

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

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

  4. 作成したカスタム メンテナンスウィンドウ サービスロールを選択します ([Role (ロール)] 名の下)。

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

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

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

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

  9. [Actions (アクション)] で、[PassRole] を選択します。

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

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

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

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