Amazon SNS 通知を使用した Systems Manager のステータス変更のモニタリング
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 とは」を参照してください。Run Command と Maintenance Windows が提供する Amazon SNS 通知に含まれる JSON データの構造の例については、「AWS Systems Manager の Amazon SNS 通知の例」を参照してください。
AWS Systems Manager の Amazon SNS 通知の設定
メンテナンスウィンドウに登録されている Run Command および Maintenance Windows のタスクは、以下のステータスに入るコマンドタスクについて 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 は概要メッセージに含まれません。 |
ステータス |
文字列 |
コマンドのコマンドステータスです。 |
呼び出しベースの Amazon SNS 通知
コマンドを複数のノードに送信する場合、Amazon SNS はコマンドの各コピーまたは呼び出しに関するメッセージを送信できます。メッセージには次の情報が含まれます。
フィールド | タイプ | 説明 |
---|---|---|
eventTime |
文字列 |
イベントが開始された時刻。Amazon SNS はメッセージの配信順序を保証しないため、タイムスタンプは重要です。例: 2016-04-26T13:15:30Z |
documentName |
文字列 |
このコマンドの実行に使用された Systems Manager ドキュメント (SSM ドキュメント) の名前。 |
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 Simple Queue Service (Amazon SQS) のような AWS サービスをサポートしています。開始するには、E メールプロトコルを使用して開始することをお勧めします。トピックの作成方法の詳細については、Amazon Simple Notification Service デベロッパーガイドの「Amazon SNS トピックの作成」を参照してください。
トピックを作成した後に [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 ポリシーを作成するには
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ナビゲーションペインで、Policies を選択し、Create Policy を選択します。([Get Started] ボタンが表示された場合は、そのボタンを選択してから、[Create Policy] を選択します)。
-
[JSON] タブを選択します。
-
デフォルトコンテンツを以下のものと置き換えます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": "
arn:aws:sns:
" } ] }region
:account-id
:sns-topic-name
リージョン
は、米国東部 (オハイオ) リージョンのus-east-2
のように、AWS Systems Manager でサポートされている AWS リージョン の識別子を表します。サポートされているregion
値の一覧については、アマゾン ウェブ サービスの全般リファレンスの「Systems Manager サービスエンドポイント」にある Region 列を参照してください。
は、AWS アカウントの 12 桁の識別子をaccount-id
123456789012
形式で表します。sns-topic-name
は、通知の発行に使用する Amazon SNS トピックの名前を表します。 -
[Next: Tags] (次へ: タグ) を選択します。
-
(オプション) 1 つ以上のタグキーと値のペアを追加して、このポリシーのアクセスを整理、追跡、または制御します。
-
次へ: レビューを選択します。
-
[Review policy (ポリシーの確認)] ページで、[Name (名前)] にインラインポリシーの名前を入力します。例:
my-sns-publish-permissions
。 -
(オプション) [Description (説明)] に、ポリシーの説明を入力します。
-
[Create policy] を選択します。
タスク 3: Amazon SNS 通知の IAM ロールを作成する
Amazon SNS 通知の IAM ロールを作成するには、次の手順を使用します。このサービスロールは、Systems Manager で Amazon SNS 通知を開始するために使用されます。以降の手順では、このロールは Amazon SNS IAM ロールと呼ばれます。
Amazon SNS 通知の IAM サービスロールを作成するには
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ナビゲーションペインで [Roles] を選択し、続いて [Create role] を選択します。
-
[Select type of trusted entity ] (信頼されたエンティティの種類を選択) の下で、[AWS service ] (AWS サービス) を選択します。
-
[Choose a use case (ユースケースを選択)] セクションで [Systems Manager] を選択します。
-
[Select your use case (ユースケースの選択)] セクションで [Systems Manager] を選んでから [Next: Permissions (次へ: 許可)] を選択します。
-
[Attach permissions policies (アクセス許可ポリシーのアタッチ)] ページで、タスク 2 で作成したカスタムポリシーの名前の左側にあるチェックボックスをオンにします。例:
my-sns-publish-permissions
。 -
[次へ: タグ] を選択します。
-
(オプション) 1 つ以上のタグキーと値のペアを追加して、このロールのアクセスを整理、追跡、または制御します。
-
次へ: レビューを選択します。
-
[Review] (確認) ページの [Role name] (ロール名) 欄にロールを識別するための名前 (
my-sns-role
など) を入力します。 -
(オプション) デフォルトのロールの説明を変更して、このロールの目的を反映させます。例:
Runs SNS topics on your behalf.
-
[ロールの作成] を選択します。[Roles] (ロール) ページが再度表示されます。
-
ロールの名前を選択してから、[Role ARN] (ロール ARN) 値をコピーまたはメモします。Amazon SNS 通知を返すように設定されたコマンドを送信するときに、ロールのこの Amazon リソースネーム (ARN) が使用されます。
-
[Summary (概要)] ページは開いたままにします。
タスク 4: ユーザーアクセスを設定する
IAM ユーザーアカウント、グループ、またはロールに管理者アクセス許可が割り当てられている場合は、AWS Systems Manager の一機能である Run Command と Maintenance Windows へのアクセス許可が与えられています。管理者アクセス許可がない場合は、管理者に AmazonSSMFullAccess
管理ポリシーの割り当てを依頼するか、IAM アカウント、グループ、またはロールに同等のアクセス許可を付与するポリシーの割り当てを依頼してください。
Run Command と Maintenance Windows を使用するようにユーザーアカウントを設定するには、以下の手順を使用します。新規ユーザーアカウントの作成が必要な場合は、IAM ユーザーガイドの「AWS アカウント アカウント内での IAM ユーザーの作成」を参照してください。
ユーザーアクセスを設定し、iam:PassRole
ポリシーをユーザーアカウントにアタッチするには
-
IAM のナビゲーションペインで、[ユーザー] を選択し、設定するユーザーアカウントを選択します。
-
[Permissions (アクセス許可)] タブのポリシーリストで、
AmazonSSMFullAccess
ポリシーがリストにあるか、またはアカウントに Systems Manager へのアクセス許可を与える同等のポリシーがあるかどうかを確認します。 -
[Add inline policy (インラインポリシーの追加)] を選択します。
-
[Create policy (ポリシーの作成)] ページの [Visual editor (ビジュアルエディタ)] タブを選択します。
-
[Choose a service (サービスの選択)] を選んでから、[IAM] を選択します。
-
[Actions] (アクション) の場合は、[Filter actions] (フィルタアクション) テキストボックスに「
PassRole
」を入力し、[PassRole] の横にあるチェックボックスを選択します。 -
[Resources (リソース)] の場合は、[Specific (固有)] が選択されていることを確認し、[Add ARN (ARN の追加)] を選択します。
-
[Specify ARN for role (ロールの ARN の指定)] フィールドに、タスク 3 の終わりでコピーした Amazon SNS IAM ロールの ARN を貼り付けます。システムによって、[アカウント] と [Role name with path (ロール名とパス)] フィールドが自動的に入力されます。
-
[Add] (追加) をクリックします。
-
[ポリシーの確認] を選択します。
-
[Review Policy] (ポリシーの確認) ページに名前を入力し、[Create Policy] (ポリシーの作成) を選択します。
タスク 5: iam:PassRole ポリシーをメンテナンスウィンドウロールにアタッチする
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 タスクに関連する通知を送信するには、メンテナンスウィンドウのカスタムサービスロールを使用します。詳細については、「サービスにリンクされたロール、またはカスタムサービスロールを使用してメンテナンスウィンドウタスクを実行しますか?」を参照してください。
カスタムサービスロールを作成する必要がある場合は、次のいずれかのトピックを参照してください。
iam:PassRole
ポリシーを Maintenance Windows ロールにアタッチするには
-
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
ナビゲーションペインで [Roles (ロール)] を選択し、タスク 3 で作成した Amazon SNS IAM ロールを選択します。
-
[Role ARN (ロールの ARN)] をコピー、または書き留めて、IAM コンソールの[Roles (ロール)] セクションに戻ります。
-
[Role name] (ロール名) リストから、作成したカスタム Maintenance Windows のサービスロールを選択します。
-
[Permissions] (許可) タブで、
AmazonSSMMaintenanceWindowRole
ポリシーが一覧に表示されていること、または Systems Manager API に対するメンテナンスウィンドウの許可を与える同等のポリシーがあることを確認します。そうでない場合は、[Attach policies] (ポリシーをアタッチ) を選択してアタッチします。 -
[Add inline policy] を選択します。
-
[Visual Editor (ビジュアルエディタ)] タブを選択します。
-
[Service (サービス)] で、[IAM] を選択します。
-
[Actions] (アクション) の場合は、[Filter actions] (フィルタアクション) テキストボックスに「
PassRole
」を入力し、[PassRole] の横にあるチェックボックスを選択します。 -
[Resources (リソース)] で、[Specific (特定)]、[Add ARN (ARN の追加)] の順に選択します。
-
[Specify ARN for role (ロールの ARN を指定)] ボックスで、タスク 3 で作成した Amazon SNS IAM ロールの ARN を貼り付けて、[Add (追加)] を選択します。
-
[ポリシーの確認] を選択します。
-
[Review Policy (ポリシーの確認)] ページで
PassRole
ポリシーの名前を入力し、[Create policy (ポリシーの作成)] を選択します。