メニュー
Amazon EC2 Systems Manager
ユーザーガイド

Run Command のための Amazon SNS 通知を設定する

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

Amazon SNS は、HTTP または HTTPS POST、E メール (SMTP、プレーンテキストまたは JSON フォーマット)、あるいは Amazon Simple Queue Service (Amazon SQS) キューに投稿されるメッセージとして通知を配信できます。詳細については、「Amazon SNS とは」 (Amazon Simple Notification Service Developer Guide) を参照してください。

コマンドステータスが失敗に変更されたときに通知を送信するように Amazon SNS を設定した場合は、SNS はコマンド実行の詳細の通知を E メールで送信します。

注記

必要に応じて、Amazon CloudWatch Events を使用してコマンドがステータスを変更した時に、AWS Lambda 関数を呼び出すターゲットを設定できます。詳細については、「Run Command のために CloudWatch Events を設定する」を参照してください。

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

Systems Manager 用の Amazon SNS 通知の設定

Run Command は、次のステータスを入力するコマンドの Amazon SNS 通知の送信をサポートします。これらのステータスのいずれかを入力するコマンドの条件については、イベントと通知のセットアップ を参照してください。

  • 進行中

  • Success

  • Failed

  • タイムアウト

  • Canceled

注記

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

SNS 通知の Run Command を設定する場合は、SNS は次の情報を含む概要メッセージを送信します:

フィールド タイプ 説明

EventTime

文字列

文字列SNS はメッセージの配信順序を保証しないため、タイムスタンプは重要です。例: 2016-04-26T13:15:30Z

DocumentName

文字列

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

CommandId

文字列

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

ExpiresAfter

日付

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

OutputS3BucketName

文字列

コマンド実行に対する応答を保存する Amazon Simple Storage Service (Amazon S3) バケットです。

OutputS3KeyPrefix

文字列

コマンド実行に対する応答を保存するバケット内の Amazon S3 のディレクトリパスです。

RequestedDateTime

文字列

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

InstanceId

文字列

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

ステータス

文字列

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

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

フィールド タイプ 説明

EventTime

文字列

文字列SNS はメッセージの配信順序を保証しないため、タイムスタンプは重要です。例: 2016-04-26T13:15:30Z

DocumentName

文字列

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

RequestedDateTime

文字列

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

CommandId

文字列

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

InstanceId

文字列

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

ステータス

文字列

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

アカウントのアクセス許可を設定する

通知に対して設定されたコマンドを送信する場合、サービスロール Amazon Resource Name (ARN) を指定します。たとえば、--service-role-arn=arn:aws:iam::123456789012:myrole とします。このサービスロールが SNS 通知をトリガーするために Systems Manager によって使用されます。

Amazon SNS サービスからの通知を受け取るには、iam:PassRole ポリシーを既存の AWS Identity and Access Management (IAM) ユーザーアカウントにアタッチするか、新規の IAM アカウントを作成してこのポリシーをアタッチする必要があります。新しいアカウントを作成する場合は、AmazonSSMFullAccess ポリシーをアタッチして、アカウントが Systems Manager API と通信できるようにする必要もあります。

以下の手順を使用して、ユーザーアカウントに IAM ポリシーをアタッチします。新規ユーザーアカウントを作成する必要がある場合、IAM User GuideAWS アカウント内での IAM ユーザーの作成を参照してください。

iam:PassRole ポリシーをユーザーアカウントにアタッチするには

  1. Open the IAM console at https://console.aws.amazon.com/iam/.

  2. ナビゲーションペインで、[Users] を選択し、ユーザー ([User name] の下) を選択します。

  3. ページの先頭で [User ARN] をクリップボードにコピーします。

  4. [Permissions] で、AmazonSSMFullAccess ポリシーが表示されていること、または Systems Manager API に対するアクセス許可を与える互換性のポリシーがあることを確認します。

  5. [Add inline policy] を選択します。

  6. [Set Permissions] ページで、[Custom Generator] を選択し、次に [Select] をクリックします。

  7. [Effect] が [Allow] に設定されていることを確認します。

  8. [AWS Service] で、[AWS Identity and Access Management] を選択します。

  9. [Actions] で、[PassRole] を選択します。

  10. [Amazon Resource Name (ARN)] フィールドで、ARN を貼り付けます。

  11. [Add Statement]、[Next ] の順に選択します。

  12. [Review Policy] ページで、[Apply Policy] を選択します。

通知用の IAM ロールを作成する

前の手順では、通知を返すコマンドを送信できるように、IAM ポリシーをユーザーアカウントに追加しました。次の手順では、通知を送信するときに Systems Manager サービスがユーザーに代わってタスクを実行するようにロールを作成します。

  1. Open the IAM console at https://console.aws.amazon.com/iam/.

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

  3. [Step 1: Set Role Name] で、このロールを通知用の Run Command ロールとして識別する名前を入力します。

  4. [Step 2: Select Role Type] で、[Amazon EC2] を選択します。これは管理ポリシーであるため、システムは [Step 3: Establish Trust] をスキップします。

  5. [Step 4: Attach Policy] で [AmazonSNSFullAccess] を選択します。

  6. [Next Step] を選択してから、[Create Role] を選択します。システムでは、[Roles] ページが返されます。

  7. 作成したロールを見つけ、ダブルクリックします。

  8. [Trust Relationships] タブを選択し、[Edit Trust Relationship] を選択します。

  9. 次のコードスニペットが示すように、"ssm.amazonaws.com" を既存のポリシーに追加します。

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com", "Service": "ssm.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

    注記

    既存のエントリの後にコンマを追加する必要があります。"Service": "sns.amazonaws.com"または JSON は検証されません。

  10. [Update Trust Policy] を選択します。

  11. [Role ARN] をコピー、または書き留めます。通知を返すように設定されたコマンドを送信するときに、ARN を指定します。

Amazon SNS の設定

Amazon SNS を使用して E メール通知を送信するには、最初にトピックを作成してから、そのトピックと共に E メールアドレスを登録する必要があります。

Amazon SNS トピックの作成

Amazon SNS トピックは、論理的アクセスポイント、あるいは Run Command が通知を送信するために使用する通信チャネルです。トピックの名前を指定することにより、トピックを作成します。

詳細については、「トピックの作成」 (Amazon Simple Notification Service Developer Guide) を参照してください。

注記

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

Amazon SNS トピックへの登録

Run Command がトピックに送信した通知を受信するには、そのトピックにエンドポイントを登録する必要があります。この手順では、[Endpoint] に、Run Command からの通知を受信する E メールアドレスを指定します。

詳細については、Amazon Simple Notification Service Developer GuideSubscribe to a Topic を参照してください。

Amazon SNS 受信登録の確認

Amazon SNS は、前のステップで指定した E メールアドレスに確認メールを送信します。

次のステップに進む前に、必ず AWS 通知の E メールを開き、リンクを選択して受信登録を確認してください。

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

ステータス通知を返すコマンドを送信します

このセクションでは、Amazon EC2 コンソールまたは AWS Command Line Interface (AWS CLI) のいずれかを使用してステータス通知を返すために設定されたコマンドを送信する方法を示します。

Amazon EC2 コンソールから通知を返すコマンドを送信する

  1. Open the Amazon EC2 console at https://console.aws.amazon.com/ec2/.

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

  3. [Run a command] を選択します。

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

  5. [Target instances] で、コマンドを実行するインスタンスを選択します。このリストに表示されていないインスタンスは、Run Command 用に適切に設定されていない場合があります。詳細については、「Systems Manager の前提条件」を参照してください。

  6. Systems Manager ドキュメントで必須のフィールドに情報を入力します。[SNS Notifications] セクションで、[Enable SNS notifications] を選択します。

  7. [Role] フィールドに、先に作成した IAM ロールの ARN を入力または貼り付けます。

  8. [SNS Topic] フィールドに、先に作成した Amazon SNS ARN を入力または貼り付けます。

  9. [Notify me on] フィールドで、通知を受け取るイベントを選択します。

  10. [Notify me for] フィールドで、複数のインスタンス (呼び出し) またはコマンドの概要に送信されたコマンドの各コピーの通知を受け取るかを選択します。

  11. [Run] を選択します。

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

AWS CLI からの通知に対して設定されたコマンドを送信する

  1. AWS CLI を開きます。

  2. 以下のコマンドでパラメータを指定します。

    Copy
    aws ssm send-command --instance-ids "ID-1, ID-2" --document-name "name" --parameters commands=date --service-role ServiceRole ARN --notification-config NotificationArn=SNS ARN

    Copy
    aws ssm send-command --instance-ids "i-12345678, i-34567890" --document-name "AWS-RunPowerShellScript" --parameters commands=date --service-role arn:aws-cn:iam:: 123456789012:myrole --notification-config NotificationArn=arn:aws-cn:sns:cn-north-1:123456789012:test
  3. Enter キーを押します。

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

コマンドラインから Run Command の設定の詳細については、Amazon EC2 Systems Manager API ReferenceSystems Manager AWS CLI Reference を参照してください。