Amazon CloudWatch Events ユーザーガイド Amazon CloudWatch Events ユーザーガイド Amazon CloudWatch Events ユーザーガイド Amazon CloudWatch Events : ユーザーガイド Copyright © 2017 Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's, in any manner that is likely to cause confusion among customers, or in any manner that disparages or discredits Amazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may not be affiliated with, connected to, or sponsored by Amazon. Amazon CloudWatch Events ユーザーガイド Table of Contents Amazon CloudWatch Events とは? .................................................................................................. 1 コンポーネント ..................................................................................................................... 1 前提条件 .............................................................................................................................. 2 リージョンとエンドポイント .................................................................................................. 2 制限 .................................................................................................................................... 2 関連 AWS サービス .............................................................................................................. 3 リソース .............................................................................................................................. 4 準備作業 ...................................................................................................................................... 5 アマゾン ウェブ サービス(AWS)にサインアップ .................................................................... 5 Amazon CloudWatch コンソールにサインインする .................................................................... 5 コマンドラインインターフェイスをセットアップする ................................................................ 6 はじめに ...................................................................................................................................... 7 シナリオ 1: Amazon EC2 インスタンスの状態をログに記録する .................................................. 7 ステップ 1: AWS Lambda 関数を作成する ....................................................................... 8 ステップ 2: Amazon CloudWatch Events ルールを作成する ................................................ 8 ステップ 3: Amazon CloudWatch Events ルールをテストする ............................................. 9 シナリオ 2: スケジュールされた EBS スナップショットを作成する .............................................. 9 ステップ 1: Amazon CloudWatch Events ルールを作成する ............................................... 10 ステップ 2: Amazon CloudWatch Events ルールをテストする ............................................ 10 シナリオ 3: AWS API 呼び出しをログに記録する ..................................................................... 10 ステップ 1: AWS Lambda 関数を作成する ...................................................................... 10 ステップ 2: Amazon CloudWatch Events ルールを作成する ............................................... 11 ステップ 3: インスタンスを停止することで Amazon CloudWatch Events ルールをテストす る ............................................................................................................................. 12 シナリオ 4: Auto Scaling グループの状態をログに記録する ....................................................... 12 ステップ 1: AWS Lambda 関数を作成する ...................................................................... 12 ステップ 2: Amazon CloudWatch Events ルールを作成する ............................................... 13 ステップ 3: Auto Scaling グループを使用して Amazon CloudWatch Events ルールをテスト する .......................................................................................................................... 13 シナリオ 5: Amazon Kinesis ストリームにイベントを中継する .................................................. 14 ステップ 1: Amazon Kinesis ストリームを作成する .......................................................... 14 ステップ 2: Amazon CloudWatch Events ルールを作成する ............................................... 15 ステップ 3: インスタンスを停止することで Amazon CloudWatch Events ルールをテストす る ............................................................................................................................. 15 ステップ 4: レコードを取得してイベントが中継されたことを確認する ................................ 16 シナリオ 6: スケジュールに基づいて AWS Lambda 関数を実行する ........................................... 17 ステップ 1: AWS Lambda 関数を作成する ...................................................................... 17 ステップ 2: Amazon CloudWatch Events ルールを作成する ............................................... 18 ステップ 3: Amazon CloudWatch Events ルールを確認する ............................................... 19 ルールのスケジュール式の構文 ..................................................................................................... 20 cron 式 .............................................................................................................................. 20 rate 式 ............................................................................................................................... 22 イベントとイベントパターン ......................................................................................................... 24 イベントパターン ................................................................................................................ 25 PutEvents を使用したイベントの追加 ............................................................................................. 27 PutEvents を使用するときのエラーの処理 .............................................................................. 28 AWS CLI を使用したイベントの送信 ...................................................................................... 29 PutEvents イベントエントリのサイズの計算 ........................................................................... 29 イベントタイプ .......................................................................................................................... 31 Amazon EC2 イベント ......................................................................................................... 31 Amazon EC2 Simple Systems Manager イベント .................................................................... 32 Auto Scaling イベント ......................................................................................................... 32 AWS API の呼び出しイベント ............................................................................................... 36 AWS CodeDeploy イベント .................................................................................................. 38 AWS Console のサインインイベント ..................................................................................... 39 iv Amazon CloudWatch Events ユーザーガイド 予定されているイベント ....................................................................................................... 40 認証とアクセスコントロール ......................................................................................................... 41 認証 .................................................................................................................................. 41 アクセスコントロール .......................................................................................................... 42 管理アクセスの概要 ............................................................................................................. 43 リソースおよびオペレーション ..................................................................................... 43 リソース所有権について ............................................................................................... 44 リソースへのアクセスの管理 ......................................................................................... 45 ポリシー要素の指定 : アクション、効果、プリンシパル .................................................... 46 ポリシーでの条件の指定 ............................................................................................... 47 アイデンティティベースのポリシー (IAM ポリシー) を使用する ................................................. 47 CloudWatch コンソールを使用するために必要なアクセス権限 ........................................... 48 CloudWatch イベント での AWS 管理 (事前定義) ポリシー ................................................ 49 お客様が管理するポリシーの例 ..................................................................................... 50 リソースベースのポリシーを利用する .................................................................................... 53 AWS Lambda アクセス許可 .......................................................................................... 53 Amazon SNS アクセス許可 .......................................................................................... 54 Amazon SQS アクセス許可 .......................................................................................... 55 CloudWatch イベント の権限リファレンス .............................................................................. 56 条件の使用 ......................................................................................................................... 58 例 1: 特定のソースへのアクセスの制限 ........................................................................... 60 例 2: イベントパターンで個々に使用できる複数のソースの定義 ......................................... 62 例 3: イベントパターンで使用できるソースと DetailType を定義する .................................. 63 例 4: ソースがイベントパターンに定義されていることを確認する ...................................... 64 例 5: イベントパターンに複数のソースがある場合にのみ許可されるソースのリストを定義 する .......................................................................................................................... 65 例 6: 特定の PrincipalId から発生した API コールの AWS CloudTrail イベントが使用されて いることを確認する ..................................................................................................... 66 API 呼び出しのログ作成 ............................................................................................................... 68 CloudTrail 内の CloudWatch イベント 情報 ............................................................................. 68 ログファイルエントリの概要 ................................................................................................. 69 トラブルシューティング ............................................................................................................... 71 ルールはトリガーされたが、Lambda 関数が呼び出されなかった ................................................ 71 ルールを修正/作成したが、テストイベントと一致しなかった ..................................................... 73 ScheduleExpression に指定されている時間にルールが自己トリガーされなかった ......................... 73 予期した時間にルールがトリガーされなかった ........................................................................ 73 ルールは IAM API 呼び出しに一致するが、トリガーされなかった .............................................. 74 ルールがトリガーされるときに、ルールに関連付けられている IAM ロールが無視されるため、 ルールが機能しない ............................................................................................................. 74 リソースに一致することを条件とする EventPattern を使用してルールを作成したが、このルール に一致するいずれのイベントも表示されない ........................................................................... 74 ターゲットへのイベントの配信で遅延が発生した ..................................................................... 74 2 つの同一のイベントに応じてルールが複数回トリガーされました。CloudWatch イベント で、 ルールのトリガーまたはターゲットへのイベントの提供で何が保証されますか。 .......................... 75 ルールがトリガーされているが、Amazon SNS トピックにいずれのメッセージもパブリッシュさ れません。 ......................................................................................................................... 75 Amazon SNS トピックに関連付けられたルールを削除した後でも、Amazon SNS トピックに CloudWatch イベント のアクセス権限がある ........................................................................... 76 CloudWatch イベント で使用できる IAM 条件キー ................................................................... 77 CloudWatch イベント ルールが壊れているときに通知するアラームを作成する方法 ....................... 77 ドキュメント履歴 ........................................................................................................................ 78 AWS の用語集 ............................................................................................................................ 79 v Amazon CloudWatch Events ユーザーガイド コンポーネント Amazon CloudWatch Events とは? Amazon CloudWatch Events は、アマゾン ウェブ サービス (AWS) リソースの変更を示すシステムイ ベントのほぼリアルタイムのストリームを、AWS Lambda 関数、Amazon SNS のトピック、Amazon Kinesis Streams での Amazon SQS キューのキューストリーム、または組み込みターゲットに振り 分けます。すぐに設定できる簡単なルールを使用して、ルールに一致したイベントを 1 つ以上の ターゲット関数またはストリームに振り分けることができます。オペレーションの変更が発生する と、CloudWatch イベント はその変更を認識します。CloudWatch イベント は、オペレーションの変 更に応答し、必要に応じて、応答メッセージを環境に送り、機能をアクティブ化し、変更を行い、状 態情報を収集することによって、修正アクションを実行します。 CloudWatch イベント コンポーネント CloudWatch イベント の 3 つの主要なコンポーネントはイベント、ルール、ターゲットです。 • イベント—4 つの方法で生成されます。まず、リソースの状態が変わると、AWS によって出力さ れます。たとえば、Amazon EC2 インスタンスの状態が保留中から実行中に変わったときや、Auto Scaling が Auto Scaling グループのインスタンスを起動または終了したとき、イベントが生成され ます。2 番目に、読み取り/書き込み API 呼び出しを行うときや、AWS マネジメントコンソールに サインインするとき、イベントは AWS CloudTrail によって出力されます。3 番目に、独自のコード はアプリケーションレベルのイベントを生成し、処理のために CloudWatch イベント にそれらのイ ベントをパブリッシュできます。4 番目に、それらのイベントはスケジュールに基づいて発行でき ます。定期的にするか Cron 形式のスケジューリングにするかは選択できます。 • ルール—一致した受信イベントを処理のために 1 つ以上のターゲットに振り分けます。ルールは特 定の順序で処理されません。これにより、1 つの組織のさまざまな部署がそれぞれ独立して目的の イベントを検索して処理できます。 • ターゲット—ルールで指定され、一致したイベントを受け取ります。ターゲットには、AWS Lambda 関数、Amazon SNS のトピック、Amazon SQS キュー、Amazon Kinesis Streams のスト リーム、または組み込みターゲット (CloudWatch アラームアクション) が含まれます。1 つのルー ルで、複数のターゲットを指定でき、それらのすべてが並列に処理されます。各イベントは JSON 形式でそれぞれのターゲットに渡されます。ルールでは、ターゲットにイベントの特定の部分のみ を渡すようにするか、一致したイベントを定数で上書きすることで、ターゲットに流れる JSON を カスタマイズできます。ターゲットタイプによっては、一部のリージョンで利用できません。各 リージョンを表すエンドポイントの詳細については、『アマゾン ウェブ サービス全般のリファレン ス』の「リージョンとエンドポイント」を参照してください。 トピック • Amazon CloudWatch Events の前提条件 (p. 2) 1 Amazon CloudWatch Events ユーザーガイド 前提条件 • リージョンとエンドポイント (p. 2) • CloudWatch イベント の制限 (p. 2) • 関連 AWS サービス (p. 3) • Amazon CloudWatch Events のリソース (p. 4) Amazon CloudWatch Events の前提条件 Amazon CloudWatch Events には、以下の前提条件があります。 • ユーザーアカウント—ルートアカウントを使用できますが、AWS Identity and Access Management (IAM) アカウントを使用することをお勧めします。IAM アカウントを使用する場合は、["events:*"] と ["iam:PassRole"] が必要です。 { "Version": "2012-10-17", "Statement": [ { "Action": [ "events:*", "iam:PassRole" ], "Effect": "Allow", "Resource": "*" } ] } • AWS CloudTrail ログ記録—CloudWatch イベント での AWS API 呼び出しをログに記録する場 合は、AWS CloudTrail を有効にする必要があります。詳細については、『AWS CloudTrail User Guide』の「他のリージョンの CloudTrail の有効化」を参照してください。 • AWS Security Token Service (AWS STS)—Amazon CloudWatch Events を使用するには、リージョ ンのエンドポイントを有効にする必要があります。詳細については、『IAM ユーザーガイド』の 「AWS リージョンでの AWS STS のアクティブ化と非アクティブ化」を参照してください。 リージョンとエンドポイント 特定の AWS リージョンでルールとターゲットを作成します。 CloudWatch イベント のリクエストを リージョン固有のエンドポイントに送信します。 対応する AWS のリージョンの一覧については、 『アマゾン ウェブ サービス全般のリファレンス』の「リージョンとエンドポイント」を参照してくだ さい。 CloudWatch イベント の制限 CloudWatch のイベントには、以下の制限があります。 リソース デフォルトの制限 API リクエスト PutEvents を除くすべての CloudWatch イベント API オペ レーションに対して毎秒 5 リクエスト。 PutEvents は毎秒 10 リクエストに制限されています。 イベントパターン 最大 2048 文字. 2 Amazon CloudWatch Events ユーザーガイド 関連 AWS サービス リソース デフォルトの制限 呼び出し 20/秒 (20 呼び出しの後、呼び出しは調整されます。引き 続き呼び出しは行われますが、遅延が発生します)。 ター ゲットの呼び出しが、ターゲットサービスの問題やアカウ ントのスロットリングなどにより失敗した場合、その呼び 出しは最大 24 時間、新たに試みられます。 ListRuleNamesByTarget リクエストについて 1 ページあたり最大 100 結果。 ListRules リクエストについて 1 ページあたり最大 100 結果。 ListTargetsByRule リクエストについて 1 ページあたり最大 100 結果。 PutEvents 10 エントリ/リクエストおよび 10 リクエスト/秒。 各リク エストのサイズは最大 256 KB まで可能です。 PutTargets 10 エントリ/リクエスト RemoveTargets 10 エントリ/リクエスト。 ルール 50/アカウント. 制限の引き上げをリクエストできます。手 順については、「AWS サービスの制限」を参照してくだ さい。 制限の引き上げをリクエストする前に、ルールを確認し ます。それぞれが非常に固有のイベントに一致する複数の ルールがある場合もあります。イベントとイベントパター ン (p. 24)で、より少ない識別子を使用して範囲を広げ ることを検討します。 さらに、ルールではイベントに一致 するたびに複数のターゲットを呼び出すことができます。 ルールにターゲットを追加することを検討してください。 ターゲット 5/ルール。 関連 AWS サービス CloudWatch イベント と併せて使用されるサービスは次のとおりです。 • AWS CloudTrail は、AWS マネジメントコンソール、コマンドラインインターフェース (CLI)、お よびその他のサービスからの呼び出しを含む、お客様のアカウントの CloudWatch イベント API に 対する呼び出しをモニタリングするために使用できるウェブサービスです。 CloudTrail のログ記録 をオンにすると、CloudWatch イベント は、CloudTrail の設定時に指定された Amazon S3 バケッ トにログファイルを書き込みます。 リクエストを満たすためにアクションをいくつ実行する必要が あったかに応じて、各ログファイルには 1 個以上のレコードが含まれる可能性があります。AWS CloudTrail の詳細については、「AWS CloudTrail とは」(『AWS CloudTrail User Guide』)を参 照してください。CloudWatch が CloudTrail のログファイルに書き込むデータのタイプの例につい ては、「AWS CloudTrail での Amazon CloudWatch Events API コールのログ作成 (p. 68)」を参 照してください。 • AWS Identity and Access Management (IAM) は、ユーザーに対して AWS リソースへのアクセスを 安全に制御するためのウェブサービスです。IAM により、どのユーザーがお客様の AWS リソース を使用できるか(認証)、それらのユーザーがどのリソースをどのような方法で使用できるか(承 認)を制御できます。詳細については、「IAM とは何ですか?」を参照してください。」(『IAM ユーザーガイド』)を参照してください。 • Amazon Kinesis Streams は、高速かつ継続的にデータの取り込みと集約を行うためのウェブサービ スです。使用されるデータのタイプには、IT インフラストラクチャのログデータ、アプリケーショ ンのログ、ソーシャルメディア、マーケットデータフィード、ウェブのクリックストリームデータ 3 Amazon CloudWatch Events ユーザーガイド リソース などがあります。データの取り込みと処理の応答時間はリアルタイムであるため、処理は一般的に 軽量です。詳細については、「Amazon Kinesis Streams とは何ですか?」を参照してください。」 (『Amazon Kinesis Streams 開発者ガイド』)を参照してください。 • AWS Lambda は、新しい情報にすばやく対応するアプリケーションを簡単に構築するためのウェブ サービスです。アプリケーションコードを Lambda 関数としてアップロードします。Lambda は可 用性の高いコンピューティングインフラストラクチャでお客様のコードを実行し、コンピューティ ングリソースの管理をすべて担当します。これにはサーバーおよびオペレーティングシステムの管 理、キャパシティーのプロビジョニングおよび自動スケーリング、コードおよびセキュリティパッ チのデプロイ、モニタリングおよびログ記録などが含まれます。必要な操作は、Lambda がサポー トするいずれかの言語でコードを指定するだけです。詳細については、「AWS Lambda とは何です か?」を参照してください。」(『AWS Lambda Developer Guide』)を参照してください。 Amazon CloudWatch Events のリソース Amazon CloudWatch を利用する際に役立つ関連リソースを次の表にまとめました。 リソース 説明 Amazon CloudWatch のよくある質問 本製品に関して開発者からよく寄せられる上位の質問で す。 リリースノート リリースノートには、最新リリースの概要が記載されてい ます。新機能、解決された問題、既知の問題が具体的に記 載されています。 AWS 開発者リソースセンター 資料、コード例、リリースノートをはじめとする、AWS ベースの革新的なアプリケーション開発に役立つさまざま な情報が収められた、中心的起点となるリソースセンター です。 AWS マネジメントコンソール コンソールでは、プログラミングを行うことな く、Amazon CloudWatch Events と他の各種 AWS 製品の ほとんどの機能を実行できます。 Amazon CloudWatch ディスカッショ ンフォーラム Amazon CloudWatch Events に関連する技術的な質問を ディスカッションできる、開発者向けコミュニティベース フォーラムです。 AWS サポート AWS サポートケースを作成および管理するためのハブ。 フォーラム、技術上のよくある質問、サービス状態ステー タス、AWS Trusted Advisor などの便利なリソースへのリ ンクも含まれています。 Amazon CloudWatch 製品情報 Amazon CloudWatch Events に関する情報の主要ウェブ ページです。 お問い合わせ AWS の支払い、アカウント設定その他に関する連絡先で す。 4 Amazon CloudWatch Events ユーザーガイド アマゾン ウェブ サービス(AWS)にサインアップ 準備作業 Amazon CloudWatch Events を使用するには、AWS アカウントが必要です。 AWS アカウントがあれ ば、Amazon EC2 などのサービスを利用して、CloudWatch コンソール (ポイントしてクリックする ウェブベースのインターフェース) で表示できるイベントを生成できます。加えて、AWS コマンドラ インインターフェイス(CLI)をインストールし、設定する必要があります。 トピック • アマゾン ウェブ サービス(AWS)にサインアップ (p. 5) • Amazon CloudWatch コンソールにサインインする (p. 5) • コマンドラインインターフェイスをセットアップする (p. 6) アマゾン ウェブ サービス(AWS)にサインアッ プ AWS アカウントを作成すると、すべての AWS サービスに自動的にサインアップされます。料金が発 生するのは、お客様が使用したサービスの分のみです。 既に AWS アカウントをお持ちの場合は次の手順に進んでください。AWS アカウントをお持ちでない 場合は、次に説明する手順にしたがってアカウントを作成してください。 サインアップして AWS アカウントを作成するには 1. 2. https://aws.amazon.com/ を開き、[AWS アカウントの作成] を選択します。 オンラインの手順に従います。 サインアップ手順の一環として、通話呼び出しを受け取り、電話のキーパッドを用いて PIN を入 力することが求められます。 Amazon CloudWatch コンソールにサインインす る Amazon CloudWatch コンソールにサインインするには 1. AWS マネジメントコンソール にサインインした後、 https://console.aws.amazon.com/ cloudwatch/にある CloudWatch コンソールを開きます。 5 Amazon CloudWatch Events ユーザーガイド コマンドラインインターフェイスをセットアップする 2. 必要に応じてリージョンを変更します。ナビゲーションバーから、必要に応じてリージョンを選 択します。詳細については、『アマゾン ウェブ サービス全般のリファレンス』の「リージョンと エンドポイント」を参照してください。 3. ナビゲーションペインの [Events] を選択します。 コマンドラインインターフェイスをセットアップ する CloudWatch イベント で AWS CLI を使用できます。 AWS CLI は、複数の AWS サービスを管理する ための統合ツールです。 ただし、CLI を用いる前に、CLI をインストールして設定する必要がありま す。 AWS CLI をインストールして設定する方法については、『AWS Command Line Interface ユーザーガ イド』の「Getting Set Up with the AWS Command Line Interface」を参照してください。 6 Amazon CloudWatch Events ユーザーガイド シナリオ 1: Amazon EC2 インス タンスの状態をログに記録する Amazon CloudWatch Events の使用 開始 すぐに設定できる簡単なルールを使用して、ルールに一致したイベントを 1 つ以上の AWS Lambda 関数、Amazon SNS のトピック、Amazon SQS キュー、Amazon Kinesis Streams のストリーム、ま たは組み込みターゲットに振り分けることができます。このセクションでは、CloudWatch イベント の使用を開始できるシナリオについて説明します。 制限 • ターゲットタイプによっては、一部のリージョンで利用できません。リージョンの詳細について は、『アマゾン ウェブ サービス全般のリファレンス』の「リージョンとエンドポイント」を参照し てください。 • 組み込みターゲットでのルール作成は、AWS マネジメントコンソール でのみサポートされていま す。 トピック • シナリオ 1: Amazon EC2 インスタンスの状態をログに記録する (p. 7) • シナリオ 2: スケジュールされた EBS スナップショットを作成する (p. 9) • シナリオ 3: AWS API 呼び出しをログに記録する (p. 10) • シナリオ 4: Auto Scaling グループの状態をログに記録する (p. 12) • シナリオ 5: Amazon Kinesis ストリームにイベントを中継する (p. 14) • シナリオ 6: スケジュールに基づいて AWS CLI で AWS Lambda 関数を実行する (p. 17) シナリオ 1: Amazon EC2 インスタンスの状態を ログに記録する Amazon EC2 インスタンスの状態の変化をログに記録する単純な AWS Lambda 関数を使用できま す。状態の遷移があると実行されるルールや、関心のある 1 以上の状態への遷移があると実行される 7 Amazon CloudWatch Events ユーザーガイド ステップ 1: AWS Lambda 関数を作成する ルールを作成することもできます。このシナリオでは、新しい Amazon EC2 インスタンスが起動され るたびにログに記録します。 ステップ 1: AWS Lambda 関数を作成する AWS Lambda 関数を作成するには 1. https://console.aws.amazon.com/lambda/ にある AWS Lambda コンソールを開きます。 2. [Create a Lambda function] を選択してから、[Select blueprint] 画面で [hello-world] を選択しま す。 3. [Configure function] 画面で、[Name] フィールドに「SomethingHappened」と入力します。 4. [Lambda function code] セクションで、以下の例に一致するようにサンプルコードを編集しま す。 console.log('Loading function'); exports.handler = function(event, context, callback) { console.log('SomethingHappened()'); console.log('Here is the event:', JSON.stringify(event, null, 2)); callback(null, "Ready"); }; 5. [Lambda function handler and role] の [Role field] フィールドで、lambda_basic_execution_rule が あれば、それを選択します。なければ、新しい基本的な実行ロールを作成します。 6. [Next] を選択してから、[Review] 画面で [Edit] を選択して、変更をすべて行います。関数が適切 であることを確認したら、[Create function] を選択します。 ステップ 2: Amazon CloudWatch Events ルールを 作成する CloudWatch イベント ルールを作成するには: 1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。 2. ナビゲーションペインの [Events] を選択します。 3. [Create rule] を選択してから、[Event selector] で [EC2 instance state-change notification] を選択 します。 4. [Specific state(s)] を選択し、リストから [Running] を選択します。 5. 次のいずれかを行ってください。 • ルールがリージョン内のインスタンスのいずれにも応答するようにするには、[Any instance] を 選択します。 • ルールが特定のインスタンスに応答するようにするには、[Specific instance(s)] を選択し、テキ ストボックスにインスタンス ID を入力します。 6. [Targets] で、[Add target] を選択します。[Select target type] リストで、[AWS Lambda function] を選択します。 7. [Function] リストで、[Step 1: Create an AWS Lambda Function] で作成した [SomethingHappened] 関数を選択します。 8. [Configure input] を選択してから、以下のいずれかのオプションを選択します。 • Matched event—イベントのデータフィールドのすべてを CloudWatch Logs に送ります。 8 Amazon CloudWatch Events ユーザーガイド ステップ 3: Amazon CloudWatch Events ルールをテストする • Part of the matched event—イベントの指定されたデータフィールドのみを CloudWatch Logs に送ります。イベントの一部を指定するために、$.first_parameter.second_parameter で書式設定した文字列を使用します。たとえば、Amazon EC2 インスタンス ID のみを送るに は、フィールドに「$.detail.state」と入力します。 • Constant—指定した JSON 形式のテキスト文字列を CloudWatch Logs に送ります。たとえ ば、イベントのテキスト文字列を送るには、「{"Name":"MyInstance"}」と入力します。定数は 有効な JSON である必要があります。 9. [Configure details] を選択します。[Configure rule details] 画面で、[Name] フィールドにルールの 名前を入力します。 10. [Description] フィールドに、ルールの簡単な説明として、たとえば「Log when an EC2 instance is ready to accept traffic」と入力します。 11. ルールが適切であることを確認したら、[Create rule] を選択します。 ステップ 3: Amazon CloudWatch Events ルールを テストする Amazon EC2 コンソールを使用して Amazon EC2 インスタンスを起動することで、ルールをテスト できます。インスタンスが起動されて初期化されるまで数分間待ったら、Amazon CloudWatch コン ソールで AWS Lambda メトリクスを調べて、関数が呼び出されたことを確認します。 コンソールを使用して CloudWatch イベント ルールをテストするには 1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。 2. Amazon EC2 インスタンスの起動インスタンスの起動方法の詳細については、『Linux インスタ ンス用 Amazon EC2 ユーザーガイド』の「インスタンスの起動」を参照してください。 3. AWS Lambda メトリクスを表示するには、CloudWatch コンソール https:// console.aws.amazon.com/cloudwatch/ を開きます。 4. ナビゲーションペインの [Metrics] で、[Lambda] を選択して、Lambda 関数によって生成された メトリクスを表示します。 5. 関数からの出力を表示するには、ナビゲーションペインで、[Logs] を選択し、[Log Groups] リス トで、データを含む [/aws/lambda] ロググループを選択します。 6. [Log Streams] で、起動したインスタンスに関するデータを表示するログストリームを選択しま す。 シナリオ 2: スケジュールされた EBS スナップ ショットを作成する スケジュールに従って CloudWatch イベント ルールを実行できます。このシナリオでは、スケジュー ルに基づいて既存の Amazon Elastic Block Store (Amazon EBS) ボリュームのスナップショットを作 成します。スナップショットは、一定の速度(数分ごと)で作成することも、特定の時間帯を指定し て作成することもできます。Amazon EBS スナップショットの操作方法の詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「Amazon EBS スナップショット」を参照してく ださい。 Important 組み込みターゲットでのルール作成は、AWS マネジメントコンソール でのみサポートされて います。 9 Amazon CloudWatch Events ユーザーガイド ステップ 1: Amazon CloudWatch Events ルールを作成する ステップ 1: Amazon CloudWatch Events ルールを 作成する CloudWatch イベント ルールを作成するには: 1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。 2. ナビゲーションペインの [Events] を選択します。 3. 4. [Create rule] を選択してから、[Event selector] で [Schedule] を選択します。 次のいずれかを行ってください。 • 一定の時間間隔でスナップショットを作成するには、[Fixed rate of] を選択し、フィールドに分 数の値([5] など)を入力し、リストから [minutes] を選択します。 • 時間帯を指定してスナップショットを作成するには、[Cron expression] を選択し、cron 式 (0/5 * * * ? * など)をフィールドに入力します。cron 式の設定の詳細については、「ルールの スケジュール式の構文 (p. 20)」を参照してください。 5. [Targets] で、[Add target] を選択します。 6. [Select target type] リストで [Built-in-target] を選択し、[Action] リストで [Create a snapshot of an EBS volume] を選択します。 7. [Volume ID] ドロップダウンリストで、スナップショットを作成する EBS ボリュームの ID を入力 します。 8. [Configure details] を選択します。[Configure rule details] 画面で、[Name] フィールドにルールの 名前を入力します。 9. [Description] フィールドに、ルールの簡単な説明として、たとえば「Create EBS snapshot」と入 力します。 10. ルールが適切であることを確認したら、[Create rule] を選択します。 ステップ 2: Amazon CloudWatch Events ルールを テストする Amazon EBS のスナップショットが作成されたら、Amazon EC2 コンソールを表示してルールをテス トできます。 CloudWatch イベント ルールをテストするには 1. 2. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。 ナビゲーションペインで [Elastic Block Store] の [Snapshots] を選択します。 3. スナップショットのリストで、スナップショットが表示されていることを確認します。 シナリオ 3: AWS API 呼び出しをログに記録する 各 AWS API 呼び出しをログに記録する単純な AWS Lambda 関数を使用できます。たとえ ば、Amazon EC2 内のオペレーションをすべてログに記録するルールを作成したり、特定の API 呼 び出しのみをログに記録するようにこのルールを制限したりできます。このシナリオでは、Amazon EC2 インスタンスが停止されるたびにログに記録します。 ステップ 1: AWS Lambda 関数を作成する AWS Lambda 関数を作成するには 1. https://console.aws.amazon.com/lambda/ にある AWS Lambda コンソールを開きます。 10 Amazon CloudWatch Events ユーザーガイド ステップ 2: Amazon CloudWatch Events ルールを作成する 2. [Create a Lambda function] を選択してから、[Select blueprint] 画面で [hello-world] を選択しま す。 3. [Configure function] 画面で、[Name] フィールドに「LogIncomingEvent」と入力します。 4. [Lambda function code] セクションで、以下の例に一致するようにサンプルコードを編集しま す。 console.log('Loading function'); exports.handler = function(event, context) { console.log('LogIncomingEvent()'); console.log('Here is the event:', JSON.stringify(event, null, 2)); context.succeed('Ready'); }; 5. [Lambda function handler and role] の [Role field] フィールドで、lambda_basic_execution_rule が あれば、それを選択します。なければ、新しい基本的な実行ロールを作成します。 6. [Next] を選択してから、[Review] 画面で [Edit] を選択して、変更をすべて行います。ルールが適 切であることを確認したら、[Create rule] を選択します。 ステップ 2: Amazon CloudWatch Events ルールを 作成する CloudWatch イベント ルールを作成するには: 1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。 2. ナビゲーションペインの [Events] を選択します。 3. [Create rule] を選択してから、[Event selector] で [AWS API call] を選択します。 4. [Service name] リストで、[EC2] を選択します。 5. [Specific operation] ラジオボタンを選択し、[Specific operation] フィールドでリストから [StopInstances] を選択します。 6. [Targets] で、[Add target] を選択します。[Select target type] リストで、[Lambda function] を選択 します。 7. [Function] リストで、[Step 1: Create an AWS Lambda Function] で作成した [EC2InstanceStopped] 関数を選択します。 8. [Configure input] を選択してから、以下のいずれかのオプションを選択します。 9. a. Matched event—イベントのデータフィールドのすべてを CloudWatch Logs に送ります。 b. Part of the matched event—イベントの指定されたデータフィールドのみを CloudWatch Logs に送ります。イベントの一部を指定するために、$.first_parameter.second_parameter で書式設定した文字列を使用します。たとえば、イベントの詳細部分のみを送るには、 「$.detail」と入力します。 c. Constant—指定した JSON 形式のテキスト文字列を CloudWatch Logs に送ります。たとえ ば、イベントのテキスト文字列を送るには、「{"Name":"MyInstance"}」と入力します。定数 は有効な JSON である必要があります。 [Configure details] を選択します。[Configure rule details] 画面で、[Name] フィールドにルールの 名前を入力します。 10. [Description] フィールドに、ルールの簡単な説明として、たとえば「Log when an EC2 StopInstances API call is made」と入力します。 11. ルールが適切であることを確認したら、[Create rule] を選択します。 11 Amazon CloudWatch Events ユーザーガイド ステップ 3: インスタンスを停止することで Amazon CloudWatch Events ルールをテストする ステップ 3: インスタンスを停止することで Amazon CloudWatch Events ルールをテストする Amazon EC2 コンソールを使用して Amazon EC2 インスタンスを停止することで、ルールをテストで きます。インスタンスが停止されるまで数分間待ったら、CloudWatch コンソールで AWS Lambda メ トリクスを調べて、関数が呼び出されたことを確認します。 インスタンスを停止することで CloudWatch イベント ルールをテストするには 1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。 2. Amazon EC2 インスタンスの起動インスタンスの起動方法の詳細については、『Linux インスタ ンス用 Amazon EC2 ユーザーガイド』の「インスタンスの起動」を参照してください。 3. Amazon EC2 インスタンスを停止します。詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「インスタンスの停止と起動」を参照してください。 4. CloudWatch イベント メトリクスを表示するには、CloudWatch コンソール https:// console.aws.amazon.com/cloudwatch/ を開きます。 5. ナビゲーションペインの [Metrics] で、[Events] を選択してから、[ec2-start-stop-invocations] を選 択して、グラフに呼び出し回数を表示します。先ほど停止したインスタンスからの 1 つのデータ ポイントがグラフに表示されます。 6. 関数からの出力を表示するには、ナビゲーションペインで、[Logs] を選択し、[Log Groups] リス トで、データを含む [/aws/lambda] ロググループを選択します。 [Log Streams] で、起動したインスタンスに関するデータを表示するログストリームを選択しま す。 7. シナリオ 4: Auto Scaling グループの状態をログに 記録する Auto Scaling グループが Amazon EC2 インスタンスを起動または終了するたびにその起動または終了 が成功したかどうかをログに記録する AWS Lambda 関数を実行できます。 Auto Scaling イベントを使用した他の CloudWatch イベント シナリオについては、『Auto Scaling ユーザーガイド』の「Getting CloudWatch イベント When Your Auto Scaling Group Scales」を参照 してください。 ステップ 1: AWS Lambda 関数を作成する AWS Lambda 関数を作成するには 1. https://console.aws.amazon.com/lambda/ にある AWS Lambda コンソールを開きます。 2. [Create a Lambda function] を選択してから、[Select blueprint] 画面で [hello-world] を選択しま す。 [Configure function] 画面で、[Name] フィールドに「AutoScalingLaunchTerminate」と入力しま す。 3. 4. [Lambda function code] セクションで、以下の例に一致するようにサンプルコードを編集しま す。 console.log('Loading function'); exports.handler = function(event, context) { console.log('AutoScalingLaunchTerminate()'); console.log('Here is the event:', JSON.stringify(event, null, 2)); 12 Amazon CloudWatch Events ユーザーガイド ステップ 2: Amazon CloudWatch Events ルールを作成する context.succeed('Ready'); }; 5. [Lambda function handler and role] の [Role field] フィールドで、lambda_basic_execution_rule が あれば、それを選択します。なければ、新しい基本的な実行ロールを作成します。 6. [Next] を選択してから、[Review] 画面で [Edit] を選択して、変更をすべて行います。ルールが適 切であることを確認したら、[Create rule] を選択します。 ステップ 2: Amazon CloudWatch Events ルールを 作成する CloudWatch イベント ルールを作成するには: 1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。 2. ナビゲーションペインの [Events] を選択します。 3. [Create rule] を選択してから、[Event selector] で [Auto Scaling] を選択します。 4. すべての成功と失敗の起動および終了アクションを収集するには、[Any instance event] を選択し ます。 5. 次のいずれかを行ってください。 • ルールがリージョン内のいずれかの Auto Scaling グループに応答するようにするには、[Any group name] を選択します。 • ルールが特定の Auto Scaling グループに応答するようにするには、[Specific group name(s)] を 選択し、テキストボックスに Auto Scaling グループ名を入力します。 6. [Targets] で、[Add target] を選択します。[Select target type] リストで、[Lambda function] を選択 します。 7. [Function] リストで、[Step 1: Create an AWS Lambda Function] で作成した [AutoScalingLaunchTerminate] 関数を選択します。 8. [Configure input] を選択してから、以下のいずれかのオプションを選択します。 • Matched event—イベントのデータフィールドのすべてを CloudWatch Logs に送ります。 • Part of the matched event—イベントの指定されたデータフィールドのみを CloudWatch Logs に送ります。イベントの一部を指定するために、$.first_parameter.second_parameter で書式設定した文字列を使用します。たとえば、イベントの詳細部分のみを送るには、 「$.detail」と入力します。 • Constant—指定した JSON 形式のテキスト文字列を CloudWatch Logs に送ります。たとえ ば、イベントのテキスト文字列を送るには、「{"Name":"MyInstance"}」と入力します。定数は 有効な JSON である必要があります。 9. [Configure details] を選択します。[Configure rule details] 画面で、[Name] フィールドにルールの 名前を入力します。 10. [Description] フィールドに、ルールの簡単な説明として、たとえば「Log whenever an Auto Scaling group launches or terminates」と入力します。 11. ルールが適切であることを確認したら、[Create rule] を選択します。 ステップ 3: Auto Scaling グループを使用して Amazon CloudWatch Events ルールをテストする Amazon EC2 コンソールを使用して Auto Scaling グループを起動および終了することで、ルールをテ ストできます。アクションがログに記録されるまで数分間待ったら、CloudWatch コンソールで AWS Lambda メトリクスを調べて、Lambda 関数が呼び出されたことを確認します。 13 Amazon CloudWatch Events ユーザーガイド シナリオ 5: Amazon Kinesis ス トリームにイベントを中継する Auto Scaling グループを使用して CloudWatch イベント ルールをテストするには 1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。 インスタンスの起動方法の詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイ ド』の「インスタンスの起動」を参照してください。 2. Auto Scaling グループを作成し、そのグループによって Amazon EC2 インスタンスが起動され るようにします。Auto Scaling グループの詳細については、『Auto Scaling ユーザーガイド』の 「インスタンスの起動」を参照してください。 3. ナビゲーションペインの [Metrics] で、[Lambda] を選択して、Lambda 関数によって生成された メトリクスを表示します。 4. 関数からの出力を表示するには、ナビゲーションペインで、[Logs] を選択し、[Log Groups] リス トで、データを含む [/aws/lambda] ロググループを選択します。 5. [Log Streams] で、起動または終了する Auto Scaling グループに関するデータを表示するログス トリームを選択します。 シナリオ 5: Amazon Kinesis ストリームにイベン トを中継する このシナリオでは、Amazon Kinesis ストリームに CloudWatch イベント での AWS API 呼び出しイベ ントを中継します。 ステップ 1: Amazon Kinesis ストリームを作成する Amazon Kinesis ストリームを作成するには 1. 「テスト」という名前のストリームを作成します。コマンドプロンプトで、次のように入力しま す。 aws kinesis create-stream --stream-name test --shard-count 1 2. ストリームの作成の進行状況を確認します。コマンドプロンプトで、次のように入力します。 aws kinesis describe-stream --stream-name test 以下の例のように、ストリームの状態に ACTIVE が表示されるまで待ちます。 { "StreamDescription": { "StreamStatus": "ACTIVE", "StreamName": "test", "StreamARN": "arn:aws:kinesis:us-east-1:123456789012:stream/test", "Shards": [ { "ShardId": "shardId-000000000000", "HashKeyRange": { "EndingHashKey": "170141183460469231731687303715884105727", "StartingHashKey": "0" }, "SequenceNumberRange": { "StartingSequenceNumber": "49546986683135544286507457935754639466300920667981217794" 14 Amazon CloudWatch Events ユーザーガイド ステップ 2: Amazon CloudWatch Events ルールを作成する } } ] } } ステップ 2: Amazon CloudWatch Events ルールを 作成する CloudWatch イベント ルールを作成するには: 1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。 2. ナビゲーションペインの [Events] を選択します。 3. [Create rule] を選択してから、[Event selector] で [AWS API call] を選択します。 4. [Service name] リストで、[EC2] を選択します。 5. [Specific operation] ラジオボタンを選択し、[Specific operation] フィールドでリストから [StopInstances] を選択します。 6. [Targets] で、[Add target] を選択します。[Select target type] リストで、[Kinesis stream] を選択し ます。 7. [Stream] リストで、[Step 1: Create an Amazon Kinesis Stream] で作成した [test] ストリーム を選 択します。 8. [Configure input] を選択してから、以下のいずれかのオプションを選択します。 9. a. Matched event—イベントのデータフィールドのすべてを CloudWatch Logs に送ります。 b. Part of the matched event—イベントの指定されたデータフィールドのみを CloudWatch Logs に送ります。イベントの一部を指定するために、$.first_parameter.second_parameter で書式設定した文字列を使用します。たとえば、イベントの詳細部分のみを送るには、 「$.detail」と入力します。 c. Constant—指定した JSON 形式のテキスト文字列を CloudWatch Logs に送ります。たとえ ば、イベントのテキスト文字列を送るには、「{"Name":"MyInstance"}」と入力します。定数 は有効な JSON である必要があります。 [Configure details] を選択します。[Configure rule details] 画面で、[Name] フィールドにルールの 名前を入力します。 10. [Description] フィールドに、ルールの簡単な説明として、たとえば「Relay the event to an Amazon Kinesis stream when an EC2 StopInstances API call is made」と入力します。 11. ルールが適切であることを確認したら、[Create rule] を選択します。 ステップ 3: インスタンスを停止することで Amazon CloudWatch Events ルールをテストする Amazon EC2 コンソールを使用して Amazon EC2 インスタンスを停止することで、ルールをテストで きます。インスタンスが停止されるまで数分間待ったら、CloudWatch コンソールで AWS Lambda メ トリクスを調べて、関数が呼び出されたことを確認します。 インスタンスを停止することで CloudWatch イベント ルールをテストするには 1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。 2. Amazon EC2 インスタンスの起動インスタンスの起動方法の詳細については、『Linux インスタ ンス用 Amazon EC2 ユーザーガイド』の「インスタンスの起動」を参照してください。 15 Amazon CloudWatch Events ユーザーガイド ステップ 4: レコードを取得してイ ベントが中継されたことを確認する 3. Amazon EC2 インスタンスを停止します。詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「インスタンスの停止と起動」を参照してください。 4. CloudWatch イベント メトリクスを表示するには、CloudWatch コンソール https:// console.aws.amazon.com/cloudwatch/ を開きます。 5. ナビゲーションペインの [Metrics] で、[Events] を選択してから、[ec2-start-stop-invocations] を選 択して、グラフに呼び出し回数を表示します。先ほど停止したインスタンスからの 1 つのデータ ポイントがグラフに表示されます。 ステップ 4: レコードを取得してイベントが中継さ れたことを確認する レコードを取得してイベントが中継されたことを確認するには 1. Amazon Kinesis ストリームからの読み取りを開始するイテレーターを取得し、コマンドプロンプ トで以下のように入力します。 aws kinesis get-shard-iterator --shard-id shardId-000000000000 --sharditerator-type TRIM_HORIZON --stream-name test コマンドが成功した場合は、以下の例のような出力が表示されます。 { "ShardIterator": "AAAAAAAAAAHSywljv0zEgPX4NyKdZ5wryMzP9yALs8NeKbUjp1IxtZs1Sp +KEd9I6AJ9ZG4lNR1EMi+9Md/nHvtLyxpfhEzYvkTZ4D9DQVz/ mBYWRO6OTZRKnW9gd+efGN2aHFdkH1rJl4BL9Wyrk +ghYG22D2T1Da2EyNSH1+LAbK33gQweTJADBdyMwlo5r6PqcP2dzhg=" } 2. 以下のコマンドを入力します(前のコマンドの出力として取得したシャードイテレーターを使 用)。 aws kinesis get-records --shard-iterator AAAAAAAAAAHSywljv0zEgPX4NyKdZ5wryMzP9yALs8NeKbUjp1IxtZs1Sp +KEd9I6AJ9ZG4lNR1EMi+9Md/nHvtLyxpfhEzYvkTZ4D9DQVz/ mBYWRO6OTZRKnW9gd+efGN2aHFdkH1rJl4BL9Wyrk +ghYG22D2T1Da2EyNSH1+LAbK33gQweTJADBdyMwlo5r6PqcP2dzhg= get-records コマンドが正常に終了すると、以下の例のように、シャードイテレーターを取得 するときに指定したシャードに対応するストリーム内のレコードがリクエストされます。 { "Records":[ { "Data":"<Base64EncodedEvent>", "PartitionKey":"123”, "ApproximateArrivalTimestamp": 1.441215410867E9, "SequenceNumber":"49544985256907370027570885864065577703022652638596431874" } ], "MillisBehindLatest":24000, "NextShardIterator":"AAAAAAAAAAEDOW3ugseWPE4503kqN1yN1UaodY8unE0sYslMUmC6lX9hlig5+t4RtZ 16 Amazon CloudWatch Events ユーザーガイド シナリオ 6: スケジュールに基づ いて AWS Lambda 関数を実行する tALfiI4QGjunVgJvQsjxjh2aLyxaAaPr +LaoENQ7eVs4EdYXgKyThTZGPcca2fVXYJWL3yafv9dsDwsYVedI66dbMZFC8rPMWc797zxQkv4pSKvPOZvrUIud } Note GetRecords API は、ストリームにレコードがある場合でも何らかのレコードを受け取 る可能性のあることを意味するリクエストです。返されたレコードは、ストリーム内の 現在のすべてのレコードを表していない場合があります。探しているデータを受け取ら ない場合は、空のレコードのある出力が表示されるまで、get-records を呼び出し続け ます。 Amazon Kinesis のレコードは Base64 エンコードされています。ただし、AWS CLI での ストリームのサポートでは、Base64 のデコードは用意されていません。Base64 デコー ダーを使用して、データ <Base64EncodedEvent> を手動で復号する場合、それは JSON 形式でストリームに中継されたイベントであることがわかります。 シナリオ 6: スケジュールに基づいて AWS CLI で AWS Lambda 関数を実行する スケジュールに基づいて AWS Lambda 関数を実行するルールを設定できます。このシナリオで は、AWS CLI を使用してルールを作成します。 Note CloudWatch イベント は、スケジュール式で第 2 レベルの精度を提供しません。Cron 式を 使用した最小の解決は分です。CloudWatch イベント とターゲットサービスが持つ分散性の 特質により、スケジュールされたルールがトリガーされてから、ターゲットサービスがター ゲットリソースの実行を優先するまでの遅延は、数秒となる可能性があります。スケジュー ルされたルールは、その分のうちにトリガーされますが、正確に 0 秒にトリガーされませ ん。 ステップ 1: AWS Lambda 関数を作成する AWS Lambda 関数を作成するには 1. 2. 3. 4. https://console.aws.amazon.com/lambda/ にある AWS Lambda コンソールを開きます。 [Create a Lambda function] を選択してから、[Select blueprint] 画面で [hello-world] を選択しま す。 [Configure function] 画面で、[Name] フィールドに「SomethingHappened」と入力します。 [Lambda function code] セクションで、以下の例に一致するようにサンプルコードを編集しま す。 console.log('Loading function'); exports.handler = function(event, context) { console.log('SomethingHappened()'); console.log('Here is the event:', JSON.stringify(event, null, 2)); context.succeed('Ready'); }; 5. [Lambda function handler and role] の [Role field] フィールドで、lambda_basic_execution_rule が あれば、それを選択します。なければ、新しい基本的な実行ロールを作成します。 17 Amazon CloudWatch Events ユーザーガイド ステップ 2: Amazon CloudWatch Events ルールを作成する 6. [Next] を選択してから、[Review] 画面で [Edit] を選択して、変更をすべて行います。関数が適切 であることを確認したら、[Create function] を選択します。 ステップ 2: Amazon CloudWatch Events ルールを 作成する CloudWatch イベント ルールを作成するには: 1. コマンドプロンプトで以下のように入力して、events.amazonaws.com を信頼します。 aws lambda add-permission \ --function-name SomethingHappened \ --statement-id MyId \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/MyScheduledRule Note 特定の Lambda エイリアスまたはバージョンを使用する場合は、aws lambda addpermission コマンドに --qualifier パラメーターを追加する必要があります。 aws lambda add-permission \ --function-name SomethingHappened \ --statement-id MyId \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:useast-1:123456789012:rule/MyScheduledRule --qualifier alias or version 2. コマンドプロンプトで以下のように入力して、スケジュールに基づいて自己トリガーするルール を作成します。 aws events put-rule \ --name MyScheduledRule \ --schedule-expression 'rate(5 minutes)' 上記のルールが自己トリガーすると、このルールのターゲットへの入力として使用できる以下の ようなイベントが生成されます。 { "id": "53dc4d37-cffa-4f76-80c9-8b7d4a4d2eaa", "detail-type": "Scheduled Event", "source": "aws.events", "account": "123456789012", "time": "2015-10-08T16:53:06Z", "region": "us-east-1", "resources": ["arn:aws:events:useast-1:123456789012:rule/MyScheduledRule"], "detail": {} } 18 Amazon CloudWatch Events ユーザーガイド ステップ 3: Amazon CloudWatch Events ルールを確認する 3. 以下のコマンドを実行して、[Step 1] で作成した AWS Lambda 関数をこのルールに追加すること で、その関数が 5 分ごとに実行されるようにします。 aws events put-targets \ --rule MyScheduledRule \ --targets '{"Id" : "1", "Arn": "arn:aws:lambda:useast-1:123456789012:function:SomethingHappened"}' ステップ 3: Amazon CloudWatch Events ルールを 確認する Amazon CloudWatch コンソールで AWS Lambda メトリクスを調べて、ルールを確認できます。 コンソールを使用して CloudWatch イベント ルールを確認するには 1. AWS Lambda メトリクスを表示するには、CloudWatch コンソール https:// console.aws.amazon.com/cloudwatch/ を開きます。 2. ナビゲーションペインの [Metrics] で、[Lambda] を選択して、Lambda 関数によって生成された メトリクスを表示します。 3. 関数からの出力を表示するには、ナビゲーションペインで、[Logs] を選択し、[Log Groups] リス トで、データを含む [/aws/lambda] ロググループを選択します。 4. [Log Streams] で、起動したインスタンスに関するデータを表示するログストリームを選択しま す。 19 Amazon CloudWatch Events ユーザーガイド cron 式 ルールのスケジュール式の構文 cron または rate 式を使用して、CloudWatch イベント でスケジュールに基づいて自己トリガーする ルールを作成できます。すべてのスケジュールされたイベントは UTC タイムゾーンを使用し、スケ ジュールの最小精度は 1 分です。 Note CloudWatch イベント は、スケジュール式で第 2 レベルの精度を提供しません。Cron 式を 使用した最小の解決は分です。CloudWatch イベント とターゲットサービスが持つ分散性の 特質により、スケジュールされたルールがトリガーされてから、ターゲットサービスがター ゲットリソースの実行を優先するまでの遅延は、数秒となる可能性があります。スケジュー ルされたルールは、その分のうちにトリガーされますが、正確に 0 秒にトリガーされませ ん。 CloudWatch イベント では、以下の形式がサポートされています。 • cron(<Fields>) • rate(<Value> <Unit>) cron 式 cron 式は 6 つの必須フィールドがあります。フィールドは空白で区切ります。cron 式の詳細について は、Wikipedia ウェブサイトの、「CRON 式」を参照してください。 フィールド 値 ワイルドカード 分 0-59 ,-*/ 時間 0-23 ,-*/ 日 1-31 ,-*?/LW 月 1-12 または JAN-DEC ,-*/ 曜日 1-7 または SUN-SAT ,-*?/L 20 Amazon CloudWatch Events ユーザーガイド cron 式 フィールド 値 ワイルドカード 製造年 1970-2199 ,-*/ Note cron 式の Day-of-month フィールドおよび Day-of-week フィールドに同じ 値を指定すること はできません。 一方のフィールドに値を指定すると、もう一方のフィールドで ? (疑問符) を 使用する必要があります。 ワイルドカード: ワイルドカード , (カンマ) には追加の値が含まれます。 月フィールドの、「JAN,FEB,MAR」は、1 月、2 月、3 月を含みます。 ワイルドカード - (ダッシュ) は範囲を指定します。 日フィールドの、「1-15」は、指定した月の 1 日 から 15 日を含みます。 ワイルドカード * (アスタリスク) にはフィールドのすべての値が含まれます。 時間フィールドの、* にはすべての時間が含まれています。 ワイルドカード / (スラッシュ) で増分を指定します。 分フィールドで、「1/10」と入力して、その時 間の最初の分から始めて、10 分毎を指定できます (11 分、21 分、31 分など)。 ? (疑問符) ワイルドカードは任意を意味します。 Day-of-month フィールドで 7 と入力し、7 日が何曜 日であってもかまわない場合、Day-of-week フィールドに ? を入力します。 Day-of-month フィールドまたは Day-of-week フィールドの、ワイルドカード L は月または週の最終日 を指定します。 Day-of-month フィールドの、ワイルドカード W は、平日を指定します。 Day-of-month フィールド で、「3W」は月の 3 番目の平日に最も近い日を指定します。 スケジュールに基づいたルールを作成するときは、以下のサンプルの cron 文字列を使用できます。 Note 1 分より短い間隔を導き出す cron 式はサポートされていません。曜日と日の値の両方を指定 はまだサポートされていません(現時点では「?」文字をこれらのフィールドのいずれかで使 用する必要があります)。 分 時間 日 月 曜日 年 意味 0 10 * * ? * 毎日午前 10:00(UTC) に実行 15 12 * * ? * 毎日午後 12:15 (UTC) に実行 0 18 ? * MON-FRI * 毎週月曜日 から金曜日 まで午後 6:00 (UTC) に実行 21 Amazon CloudWatch Events ユーザーガイド rate 式 分 時間 日 月 曜日 年 意味 0 8 1 * ? * 毎月 1 日 の午前 8:00(UTC) に実行 0/15 * * * ? * 15 分ごとに 実行 0/10 * ? * MON-FRI * 月曜日から 金曜日まで 10 分ごとに 実行 0/5 8-17 ? * MON-FRI * 月曜日から 金曜日まで 午前 8:00 から午後 5:55(UTC) の間に 5 分 ごとに実行 以下の例に示しているのは、AWS CLI で cron 式を使用する方法です。 aws events put-rule --schedule-expression 'cron(0 12 * * ? *)' --name MyRule1 aws events put-rule --schedule-expression 'cron(15 10 ? * 6L 2002-2005)' -name MyRule2 rate 式 rate 式には以下の 2 つの必須フィールドがあります。フィールドは空白で区切ります。 フィールド 値 値 正数 単位 分、時間、または日 Note 値が 1 に等しい場合、単位は単数形であることが必要です。同様に、1 より大きい値の場合、 単位は複数であることが必要です。たとえば、rate(1 hours) と rate(5 hour) は有効ではありま せんが、rate(1 hour) と rate(5 hours) は有効です。 以下の例に示しているのは、AWS CLI で rate 式を使用する方法です。 aws events put-rule --schedule-expression rate(5 minutes)' --name MyRule3 aws events put-rule --schedule-expression rate(1 hour)' --name MyRule4 22 Amazon CloudWatch Events ユーザーガイド rate 式 aws events put-rule --schedule-expression rate(1 day)' --name MyRule5 23 Amazon CloudWatch Events ユーザーガイド イベントとイベントパターン Amazon CloudWatch Events でのイベントは、JSON オブジェクトとして表されます。JSON オブ ジェクトの詳細については、「RFC 7159」を参照してください。以下に示しているのは、イベントの 例です。 { "version": "0", "id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "111122223333", "time": "2015-12-22T18:43:48Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-12345678" ], "detail": { "instance-id": "i-12345678", "state": "terminated" } } イベントについて以下の詳細を覚えておくことが重要です。 • 上記の例に示しているように、同じ最上位のフィールドがあり、それらは必須です。 • [detail] の最上位のフィールドの内容は、どのサービスがイベントを生成したか、そのイベントが何 であるかによって異なります。 • 最上位の [source] フィールドと [detail-type] フィールドの組み合わせは、[detail] フィールドで見つ かるフィールドと値を識別するために役立ちます。 以下に説明しているのは、各イベントフィールドです。 バージョン デフォルトでは、これはすべてのイベントで 0(ゼロ)に設定されます。 id 一意の値はすべてのイベントに対して生成されます。これは、イベントがルールからターゲット に移動して処理されるとき、それらのイベントを追跡するために役立ちます。 24 Amazon CloudWatch Events ユーザーガイド イベントパターン detail-type [source] フィールドと組み合わせて、[detail] フィールドに表示されるフィールドと値を識別しま す。 source イベントを発生したサービスを識別します。AWS 内から発生したすべてのイベントは「AWS」 で終わります。顧客から発生したイベントは、「AWS」で始まらない限り、このフィールドに値 があります。Java パッケージ名のスタイルには逆ドメイン名の文字列を使用することをお勧めし ます。 アカウント AWS アカウントを識別する 12 桁の数字。 time イベントを発生したサービスによって指定できるイベントのタイムスタンプ。イベントが時間間 隔にまたがる場合、サービスは開始時間をレポートするように選択可能であるため、この値は、 イベントが実際に受け取られるより大幅に前の時間になることがあります。 リージョン イベントが発生した AWS リージョンを識別します。 リソース この JSON 配列には、イベントにかかわるリソースを識別する ARN が格納されます。これらの ARN を格納するかどうかは、サービスによって異なります。たとえば、Amazon EC2 インスタン スの状態変更では、Amazon EC2 インスタンス ARN が格納され、Auto Scaling イベントでは、 インスタンスと Auto Scaling グループの両方の ARN が格納されますが、AWS CloudTrail での API 呼び出しでは、リソース ARN は格納されせん。 detail JSON オブジェクトであり、その内容はイベントを発生したサービスによって異なります。上記 の例の detail の内容は、非常に単純な 2 つのフィールドのみです。AWS API 呼び出しイベントに は、約 50 個のフィールドがいく層もの入れ子になった detail オブジェクトあります。 イベントパターン ルールでは、イベントパターンを使用してイベントを選択し、ターゲットに振り分けます。パターン は、イベントに一致するか、一致しないかのいずれかになります。イベントパターンは、イベントと 同様の構造になった JSON オブジェクトとして表されます。たとえば、以下のようになります。 { "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ], "detail": { "state": [ "running" ] } } イベントパターンマッチングについて以下のことを覚えておくことが重要です。 • パターンがイベントに一致する場合、イベントには、パターンに登録されているすべてのフィール ド名が含まれます。フィールド名は、同じ入れ子構造になったイベントに表示されます。 • パターンに登録されていないイベントの他のフィールドは無視されます。実際には、登録されてい ないフィールドには "*": "*" ワイルドカードがあります。 • パターン内の各フィールドの値は 1 つ以上の値を格納する配列であり、配列の値のいずれかがイベ ントの値と一致すれば、パターンが一致したとみなされます。 • イベントの値が配列の場合、パターン配列とイベント配列の交差部分が空でないなら、パターンが 一致したとみなされます。 • マッチングは厳密(文字単位)であり、大文字の小文字化など文字列の正規化は行われません。 25 Amazon CloudWatch Events ユーザーガイド イベントパターン • 値、つまり、引用符で囲まれた文字列、数字、引用符で囲まれていないキーワード (true、false、null)は JSON 形式のルールに従ってマッチングが調べられます。 • 数字のマッチングは文字列表現レベルで調べられます。たとえば、300、300.0、3.0e2 は等しいと はみなされません。 以下のイベントパターンは上記のイベントに一致します。 { "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-12345678", "arn:aws:ec2:us-east-1:123456789012:instance/i-abcdefgh" ] } { "detail": { "state": [ "terminated" ] } } 以下のイベントパターンは上記のイベントに一致しません。 { "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ], "detail": { "state": [ "pending" ] } } { "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ], "resources": [ "arn:aws:ec2:us-east-1::image/ami-12345678" ] } 26 Amazon CloudWatch Events ユーザーガイド PutEvents を使用したイベントの追 加 PutEvents アクションは、1 つのリクエストで CloudWatch イベント に複数のイベントを送りま す。各 PutEvents リクエストでサポートされているエントリの数は制限されています。詳細につ いては、「CloudWatch イベント の制限 (p. 2)」を参照してください。PutEvents オペレーショ ンでは、リクエストの自然な順序ですべてのエントリを処理するように試みます。各イベントに は、PutEvents を呼び出した後に CloudWatch イベント によって固有の ID が割り当てられます。 以下の Java コード例は CloudWatch イベント に 2 つの同一のイベントを送っています。 PutEventsRequestEntry requestEntry = new PutEventsRequestEntry() .withTime(new Date()) .withSource("com.mycompany.myapp") .withDetailType("myDetailType") .withResources("resource1", "resource2") .withDetail("{ \"key1\": \"value1\", \"key2\": \"value2\" }"); PutEventsRequest request = new PutEventsRequest() .withEntries(requestEntry, requestEntry); PutEventsResult result = awsEventsClient.putEvents(request); for (PutEventsResultEntry resultEntry : result.getEntries()) { if (resultEntry.getEventId() != null) { System.out.println("Event Id: " + resultEntry.getEventId()); } else { System.out.println("Injection failed with Error Code: " + resultEntry.getErrorCode()); } } PutEvents の結果には、応答配列のエントリが含まれます。応答配列の各エントリは、リクエスト配 列のエントリと自然な順序(リクエストや応答の上から下へ)で直接相互に関連付けられます。応答 Entries 配列には、常にリクエスト配列と同じ数のエントリが含まれます。 27 Amazon CloudWatch Events ユーザーガイド PutEvents を使用するときのエラーの処理 PutEvents を使用するときのエラーの処理 デフォルトでは、リクエスト内の個々のエントリでエラーが発生しても、リクエスト内のそれ以降の エントリの処理は停止されません。つまり、応答 Entries 配列には、正常に処理されたレコードと、 正常に処理されなかったエントリの両方が含まれます。正常に処理されなかったエントリを検出し、 それ以降の呼び出しに含める必要があります。 成功した結果エントリには ID 値が含まれ、失敗した結果エントリには ErrorCode および ErrorMessage 値が含まれます。ErrorCode パラメータにはエラーのタイプが反映されて います。ErrorMessage には、エラーに関する詳細な情報が提供されています。以下の例で は、PutEvents リクエストに対する 3 つの結果エントリがあります。2 番目のエントリは失敗し、応 答に反映されています。 Example: PutEvents Response Syntax { "FailedEntryCount": 1, "Entries": [ { "EventId": "11710aed-b79e-4468-a20b-bb3c0c3b4860" }, { "ErrorCode": "InternalFailure", "ErrorMessage": "Internal Service Failure" }, "EventId": "d804d26a-88db-4b66-9eaf-9a11c708ae82" } ] } 正常に処理されなかったエントリは、以降の PutEvents リクエストに含めることができます。最初 に、PutEventsResult の FailedRecordCount パラメータを調べて、リクエスト内にエラーとなっ たレコードがあるかどうかを確認します。このようなレコードがある場合は、Entry が null 以外であ る各 ErrorCode を、以降のリクエストに追加してください。このタイプのハンドラーの例について は、次のコードを参照してください。 Example: PutEvents failure handler PutEventsRequestEntry requestEntry = new PutEventsRequestEntry() .withTime(new Date()) .withSource("com.mycompany.myapp") .withDetailType("myDetailType") .withResources("resource1", "resource2") .withDetail("{ \"key1\": \"value1\", \"key2\": \"value2\" }"); List<PutEventsRequestEntry> putEventsRequestEntryList = new ArrayList<>(); for (int i = 0; i < 3; i++) { putEventsRequestEntryList.add(requestEntry); } PutEventsRequest putEventsRequest = new PutEventsRequest(); putEventsRequest.withEntries(putEventsRequestEntryList); PutEventsResult putEventsResult = awsEventsClient.putEvents(putEventsRequest); while (putEventsResult.getFailedEntryCount() > 0) { final List<PutEventsRequestEntry> failedEntriesList = new ArrayList<>(); 28 Amazon CloudWatch Events ユーザーガイド AWS CLI を使用したイベントの送信 final List<PutEventsResultEntry> PutEventsResultEntryList = putEventsResult.getEntries(); for (int i = 0; i < PutEventsResultEntryList.size(); i++) { final PutEventsRequestEntry putEventsRequestEntry = putEventsRequestEntryList.get(i); final PutEventsResultEntry putEventsResultEntry = PutEventsResultEntryList.get(i); if (putEventsResultEntry.getErrorCode() != null) { failedEntriesList.add(putEventsRequestEntry); } } putEventsRequestEntryList = failedEntriesList; putEventsRequest.setEntries(putEventsRequestEntryList); putEventsResult = awsEventsClient.putEvents(putEventsRequest); } AWS CLI を使用したイベントの送信 AWS CLI を使用してカスタムイベントを送ることができます。以下の例では、CloudWatch イベント に 1 つのカスタムイベントを送っています。 aws events put-events \ --entries '[{"Time": "2016-01-14T01:02:03Z", "Source": "com.mycompany.myapp", "Resources": ["resource1", "resource2"], "DetailType": "myDetailType", "Detail": "{ \"key1\": \"value1\", \"key2\": \"value2\" }"}]' また、以下のようにファイル(entries.json など)を作成できます。 [ { "Time": "2016-01-14T01:02:03Z", "Source": "com.mycompany.myapp", "Resources": [ "resource1", "resource2" ], "DetailType": "myDetailType", "Detail": "{ \"key1\": \"value1\", \"key2\": \"value2\" }" } ] AWS CLI を使用して、このファイルからエントリを読み込み、イベントを送ることができます。コマ ンドプロンプトで、次のように入力します。 aws events put-events --entries file://entries.json PutEvents イベントエントリのサイズの計算 PutEvents アクションを使用して CloudWatch イベント にカスタムイベントを挿入できます。エン トリの合計サイズが 256 KB 未満である限り、PutEvents アクションを使用して複数のイベントを挿 入できます。以下の手順に従ってイベントエントリのサイズをあらかじめ計算できます。その後、効 率化のために複数の同サイズのエントリを 1 つのリクエストにまとめることができます。 29 Amazon CloudWatch Events ユーザーガイド PutEvents イベントエントリのサイズの計算 Note サイズ制限はエントリに適用されます。エントリがサイズ制限よりも小さくて も、CloudWatch イベント でのイベントが同じくこのサイズより小さくなるわけではありま せん。逆に、イベントのサイズは常に、JSON 形式のイベントの必要な文字やキーのため、 エントリのサイズよりも大きくなります。詳細については、「イベントとイベントパター ン (p. 24)」を参照してください。 以下のように PutEventsRequestEntry サイズが計算されます。 • Time パラメータが指定されている場合は、14 バイトとして測定されます。 • Source および DetailType パラメータは、UTF-8 エンコード形式のバイト数として測定されま す。 • Detail パラメータが指定されている場合は、UTF-8 エンコード形式のバイト数として測定されま す。 • Resources パラメータが指定されている場合は、各エントリは UTF-8 エンコード形式のバイト数 として測定されます。 以下の Java コード例は、指定された PutEventsRequestEntry オブジェクトのサイズを計算しま す。 int getSize(PutEventsRequestEntry entry) { int size = 0; if (entry.getTime() != null) { size += 14; } size += entry.getSource().getBytes(StandardCharsets.UTF_8).length; size += entry.getDetailType().getBytes(StandardCharsets.UTF_8).length; if (entry.getDetail() != null) { size += entry.getDetail().getBytes(StandardCharsets.UTF_8).length; } if (entry.getResources() != null) { for (String resource : entry.getResources()) { if (resource != null) { size += resource.getBytes(StandardCharsets.UTF_8).length; } } } return size; } 30 Amazon CloudWatch Events ユーザーガイド Amazon EC2 イベント CloudWatch イベント 用のイベント タイプ Amazon CloudWatch Events では、以下のイベントがサポートされています。 イベントタイプ • Amazon EC2 イベント (p. 31) • Amazon EC2 Simple Systems Manager イベント (p. 32) • Auto Scaling イベント (p. 32) • AWS API の呼び出しイベント (p. 36) • AWS CodeDeploy イベント (p. 38) • AWS Console のサインインイベント (p. 39) • 予定されているイベント (p. 40) Amazon EC2 イベント Amazon EC2 インスタンスが pending 状態である EC2 インスタンスの状態変更通知イベントの例 を、次に示します。 { "id": "7bf73129-1428-4cd3-a780-95db273d1602", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "123456789012", "time": "2015-11-11T21:29:54Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111" ], "detail": { "instance-id": "i-abcd1111", "state": "pending" } } 31 Amazon CloudWatch Events ユーザーガイド Amazon EC2 Simple Systems Manager イベント Amazon EC2 Simple Systems Manager イベント 以下は、Amazon EC2 Simple Systems Manager (SSM) イベントの例です。 詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「Run Command のコマンド実行ステータスの変更 をログに記録する」を参照してください。 EC2 コマンドステータス変更の通知 { "version": "0", "id": "51c0891d-0e34-45b1-83d6-95db273d1602", "detail-type": "EC2 Command Status-change Notification", "source": "aws.ssm", "account": "123456789012", "time": "2016-07-10T21:51:32Z", "region": "us-east-1", "resources": ["arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111"], "detail": { "command-id": "e8d3c0e4-71f7-4491-898f-c9b35bee5f3b", "document-name": "AWS-RunPowerShellScript", "expire-after": "2016-07-14T22:01:30.049Z", "parameters": { "executionTimeout": ["3600"], "commands": ["date"] }, "requested-date-time": "2016-07-10T21:51:30.049Z", "status": "Success" } } EC2 コマンド呼び出しステータス変更の通知 { "version": "0", "id": "4780e1b8-f56b-4de5-95f2-95db273d1602", "detail-type": "EC2 Command Invocation Status-change Notification", "source": "aws.ssm", "account": "123456789012", "time": "2016-07-10T21:51:32Z", "region": "us-east-1", "resources": ["arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111"], "detail": { "command-id": "e8d3c0e4-71f7-4491-898f-c9b35bee5f3b", "document-name": "AWS-RunPowerShellScript", "instance-id": "i-9bb89e2b", "requested-date-time": "2016-07-10T21:51:30.049Z", "status": "Success" } } Auto Scaling イベント 以下は、Auto Scaling イベントの例です。 Amazon EC2 Instance-launch Lifecycle Action 32 Amazon CloudWatch Events ユーザーガイド Auto Scaling イベント { "version": "0", "id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718", "detail-type": "EC2 Instance-launch Lifecycle Action", "source": "aws.autoscaling", "account": "123456789012", "time": "2015-12-22T18:43:48Z", "region": "us-east-1", "resources": [ "arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroup:59fcbb81bd02-485d-80ce-563ef5b237bf:autoScalingGroupName/sampleASG" ], "detail": { "LifecycleActionToken": "c613620e-07e2-4ed2-a9e2-ef8258911ade", "AutoScalingGroupName": "sampleASG", "LifecycleHookName": "SampleLifecycleHook-12345", "EC2InstanceId": "i-12345678", "LifecycleTransition": "autoscaling:EC2_INSTANCE_LAUNCHING" } } Amazon EC2 Instance Launch Successful { "id": "3e3c153a-8339-4e30-8c35-687ebef853fe", "detail-type": "EC2 Instance Launch Successful", "source": "aws.autoscaling", "account": "123456789012", "time": "2015-11-11T21:31:47Z", "region": "us-east-1", "resources": [ "arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroup:eb56d16bbbf0-401d-b893-d5978ed4a025:autoScalingGroupName/ASGLaunchSuccess", "arn:aws:ec2:us-east-1:123456789012:instance/i-b188560f" ], "detail": { "StatusCode": "InProgress", "AutoScalingGroupName": "ASGLaunchSuccess", "ActivityId": "9cabb81f-42de-417d-8aa7-ce16bf026590", "Details": { "Availability Zone": "us-east-1b", "Subnet ID": "subnet-95bfcebe" }, "RequestId": "9cabb81f-42de-417d-8aa7-ce16bf026590", "EndTime": "2015-11-11T21:31:47.208Z", "EC2InstanceId": "i-b188560f", "StartTime": "2015-11-11T21:31:13.671Z", "Cause": "At 2015-11-11T21:31:10Z a user request created an Auto Scaling group changing the desired capacity from 0 to 1. At 2015-11-11T21:31:11Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 0 to 1." } } Amazon EC2 Instance Launch Unsuccessful { 33 Amazon CloudWatch Events ユーザーガイド Auto Scaling イベント "id": "1681ab87-4a09-459f-95a2-7fa09403c4b7", "detail-type": "EC2 Instance Launch Unsuccessful", "source": "aws.autoscaling", "account": "123456789012", "time": "2015-11-11T21:42:36Z", "region": "us-east-1", "resources": [ "arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroup:528ffce5ef9f-4c1d-8d18-5d005b4a438c:autoScalingGroupName/brokenASG", "arn:aws:ec2:us-east-1:123456789012:instance/" ], "detail": { "StatusCode": "Failed", "AutoScalingGroupName": "brokenASG", "ActivityId": "06076c51-4874-487d-b15b-7895a713ab55", "Details": { "Availability Zone": "us-east-1e", "Subnet ID": "subnet-16c5df2c" }, "RequestId": "06076c51-4874-487d-b15b-7895a713ab55", "EndTime": "2015-11-11T21:42:36.000Z", "EC2InstanceId": "", "StartTime": "2015-11-11T21:42:36.698Z", "Cause": "At 2015-11-11T21:42:09Z a user request update of Auto Scaling group constraints to min: 0, max: 10, desired: 2 changing the desired capacity from 0 to 2. At 2015-11-11T21:42:35Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 0 to 2." } } Amazon EC2 Instance-terminate Lifecycle Action { "version": "0", "id": "468fe059-f4b7-445f-bb22-2a271b94974d", "detail-type": "EC2 Instance-terminate Lifecycle Action", "source": "aws.autoscaling", "account": "123456789012", "time": "2015-12-22T18:43:48Z", "region": "us-east-1", "resources": [ "arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroup:59fcbb81bd02-485d-80ce-563ef5b237bf:autoScalingGroupName/sampleASG" ], "detail": { "LifecycleActionToken": "630aa23f-48eb-45e7-aba6-799ea6093a0f", "AutoScalingGroupName": "sampleASG", "LifecycleHookName": "SampleLifecycleHook-6789", "EC2InstanceId": "i-12345678", "LifecycleTransition": "autoscaling:EC2_INSTANCE_TERMINATING" } } Amazon EC2 Instance Terminate Successful { "id": "156d01c9-a6c3-4d7e-b883-5758266b95af", 34 Amazon CloudWatch Events ユーザーガイド Auto Scaling イベント "detail-type": "EC2 Instance Terminate Successful", "source": "aws.autoscaling", "account": "123456789012", "time": "2015-11-11T21:36:57Z", "region": "us-east-1", "resources": [ "arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroup:eb56d16bbbf0-401d-b893-d5978ed4a025:autoScalingGroupName/ASGTerminate", "arn:aws:ec2:us-east-1:123456789012:instance/i-b188560f" ], "detail": { "StatusCode": "InProgress", "AutoScalingGroupName": "ASGTerminate", "ActivityId": "56472e79-538a-4ba7-b3cc-768d889194b0", "Details": { "Availability Zone": "us-east-1b", "Subnet ID": "subnet-95bfcebe" }, "RequestId": "56472e79-538a-4ba7-b3cc-768d889194b0", "EndTime": "2015-11-11T21:36:57.498Z", "EC2InstanceId": "i-b188560f", "StartTime": "2015-11-11T21:36:12.649Z", "Cause": "At 2015-11-11T21:36:03Z a user request update of Auto Scaling group constraints to min: 0, max: 1, desired: 0 changing the desired capacity from 1 to 0. At 2015-11-11T21:36:12Z an instance was taken out of service in response to a difference between desired and actual capacity, shrinking the capacity from 1 to 0. At 2015-11-11T21:36:12Z instance ib188560f was selected for termination." } } Amazon EC2 Instance Terminate Unsuccessful { "id": "5e3df53a-0239-4e31-7d15-087ebef903ce", "detail-type": "EC2 Instance Terminate Unsuccessful", "source": "aws.autoscaling", "account": "123456789012", "time": "2015-12-01T23:34:57Z", "region": "us-east-1", "resources": [ "arn:aws:autoscaling:useast-1:123456789012:autoScalingGroup:cf5ebd9c-8e2a-4197abe2-2fb94e8d1f87:autoScalingGroupName/ASGTermFail", "arn:aws:ec2:us-east-1:123456789012:instance/i-b188560f" ], "detail": { "StatusCode": "InProgress", "Description": "Terminating EC2 instance: i-b188560f", "AutoScalingGroupName": "ASGTermFail", "ActivityId": "c1a8f6ce-82e8-4517-96ba-67d1999ceee4", "Details": { "Availability Zone": "us-east-1e", "Subnet ID": "subnet-915643ba" }, "RequestId": "c1a8f6ce-82e8-4517-96ba-67d1999ceee4", "StatusMessage": "", "EndTime": "2015-12-01T23:34:57.721Z", 35 Amazon CloudWatch Events ユーザーガイド AWS API の呼び出しイベント "EC2InstanceId": "i-b188560f", "StartTime": "2015-12-01T23:33:48.489Z", "Cause": "At 2015-12-01T23:33:41Z a user request explicitly set group desired capacity changing the desired capacity from 2 to 0. At 2015-12-01T23:33:47Z an instance was taken out of service in response to a difference between desired and actual capacity, shrinking the capacity from 2 to 0. At 2015-12-01T23:33:47Z instance i-0867b4292c0cff474 was selected for termination. At 2015-12-01T23:33:48Z instance i-b188560f was selected for termination." } } AWS API の呼び出しイベント バケットを作成するための Amazon S3 への AWS API call イベントの例を次に示します。 { "version": "0", "id": "36eb8523-97d0-4518-b33d-ee3579ff19f0", "detail-type": "AWS API Call via CloudTrail", "source": "aws.s3", "account": "123456789012", "time": "2016-02-20T01:09:13Z", "region": "us-east-1", "resources": [], "detail": { "eventVersion": "1.03", "userIdentity": { "type": "Root", "principalId": "123456789012", "arn": "arn:aws:iam::123456789012:root", "accountId": "123456789012", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2016-02-20T01:05:59Z" } } }, "eventTime": "2016-02-20T01:09:13Z", "eventSource": "s3.amazonaws.com", "eventName": "CreateBucket", "awsRegion": "us-east-1", "sourceIPAddress": "100.100.100.100", "userAgent": "[S3Console/0.4]", "requestParameters": { "bucketName": "bucket-test-iad" }, "responseElements": null, "requestID": "9D767BCC3B4E7487", "eventID": "24ba271e-d595-4e66-a7fd-9c16cbf8abae", "eventType": "AwsApiCall" } } 36 Amazon CloudWatch Events ユーザーガイド AWS API の呼び出しイベント 次のサービスからの読み取り/書き込みイベントのみがサポートされます。読み取り専用 API(List、Get、または Describe などで始まる API)はサポートされていません。また、256 KB よ りも大きい AWS API 呼び出しイベントはサポートされていません。 • Auto Scaling • AWS Certificate Manager • AWS CloudFormation • Amazon CloudFront • AWS CloudHSM • Amazon CloudSearch • AWS CloudTrail • Amazon CloudWatch • Amazon CloudWatch Events • Amazon CloudWatch Logs • AWS CodeDeploy • AWS CodePipeline • Amazon Cognito ID • Amazon Cognito Sync • AWS Config • AWS Data Pipeline • AWS Device Farm • AWS Direct Connect • AWS Directory Service • AWS Database Migration Service • Amazon DynamoDB • Amazon EC2 Container Registry • Amazon EC2 Container Service • Amazon EC2 Simple Systems Manager • Amazon ElastiCache • AWS Elastic Beanstalk • Amazon Elastic Compute Cloud • Amazon Elastic File System • Elastic Load Balancing • Amazon EMR • Amazon Elastic Transcoder • Amazon Elasticsearch Service • Amazon GameLift • Amazon Glacier • AWS Identity and Access Management(米国東部 (バージニア北部) リージョン でサポートされて いる場合のみ) • Amazon Inspector • AWS IoT • AWS Key Management Service • Amazon Kinesis • Amazon Kinesis Firehose • AWS Lambda • Amazon Machine Learning 37 Amazon CloudWatch Events ユーザーガイド AWS CodeDeploy イベント • AWS OpsWorks • Amazon Redshift • Amazon Relational Database Service • Amazon Route 53 • AWS Security Token Service • Amazon Simple Email Service • Amazon Simple Notification Service • Amazon Simple Queue Service • Amazon Simple Storage Service • Amazon Simple Workflow Service • AWS Storage Gateway • AWS サポート • AWS WAF • Amazon WorkDocs • Amazon WorkSpaces AWS CodeDeploy イベント 以下は、AWS CodeDeploy イベントの例です。 詳細については、『AWS CodeDeploy User Guide』 の「CloudWatch イベント を使用したデプロイのモニタリング」を参照してください。 AWS CodeDeploy のデプロイ状態変更通知 { "account": "123456789012", "region": "us-east-1", "detail-type": "CodeDeploy Deployment State-change Notification", "source": "aws.codedeploy", "version": "0", "time": "2016-06-30T22:06:31Z", "id": "c071bfbf-83c4-49ca-a6ff-3df053957145", "resources": [ "arn:aws:codedeploy:us-east-1:123456789012:application:myApplication", "arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:myApplication/ myDeploymentGroup" ], "detail": { "instanceGroupId": "9fd2fbef-2157-40d8-91e7-6845af69e2d2", "region": "us-east-1", "application": "myApplication", "deploymentId": "d-123456789", "state": "SUCCESS", "deploymentGroup": "myDeploymentGroup" } } AWS CodeDeploy インスタンスの状態変更通知 { "account": "123456789012", "region": "us-east-1", "detail-type": "CodeDeploy Instance State-change Notification", 38 Amazon CloudWatch Events ユーザーガイド AWS Console のサインインイベント "source": "aws.codedeploy", "version": "0", "time": "2016-06-30T23:18:50Z", "id": "fb1d3015-c091-4bf9-95e2-d98521ab2ecb", "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-0000000aaaaaaaaaa", "arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:myApplication/ myDeploymentGroup", "arn:aws:codedeploy:us-east-1:123456789012:application:myApplication" ], "detail": { "instanceId": "i-0000000aaaaaaaaaa", "region": "us-east-1", "state": "SUCCESS", "application": "myApplication", "deploymentId": "d-123456789", "instanceGroupId": "8cd3bfa8-9e72-4cbe-a1e5-da4efc7efd49", "deploymentGroup": "myDeploymentGroup" } } AWS Console のサインインイベント AWS コンソールのサインインイベントは、米国東部 (バージニア北部) リージョン でのみサポートさ れます。 以下は、AWS console sign-in イベントの例です。 { "id": "6f87d04b-9f74-4f04-a780-7acf4b0a9b38", "detail-type": "AWS Console Sign In via CloudTrail", "source": "aws.signin", "account": "123456789012", "time": "2016-01-05T18:21:27Z", "region": "us-east-1", "resources": [], "detail": { "eventVersion": "1.02", "userIdentity": { "type": "Root", "principalId": "123456789012", "arn": "arn:aws:iam::123456789012:root", "accountId": "123456789012" }, "eventTime": "2016-01-05T18:21:27Z", "eventSource": "signin.amazonaws.com", "eventName": "ConsoleLogin", "awsRegion": "us-east-1", "sourceIPAddress": "0.0.0.0", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36", "requestParameters": null, "responseElements": { "ConsoleLogin": "Success" }, "additionalEventData": { "LoginTo": "https://console.aws.amazon.com/console/home? state=hashArgs%23&isauthcode=true", 39 Amazon CloudWatch Events ユーザーガイド 予定されているイベント "MobileVersion": "No", "MFAUsed": "No" }, "eventID": "324731c0-64b3-4421-b552-dfc3c27df4f6", "eventType": "AwsConsoleSignIn" } } 予定されているイベント 予定されているイベントの例を次に示します。 { "id": "53dc4d37-cffa-4f76-80c9-8b7d4a4d2eaa", "detail-type": "Scheduled Event", "source": "aws.events", "account": "123456789012", "time": "2015-10-08T16:53:06Z", "region": "us-east-1", "resources": [ "arn:aws:events:us-east-1:123456789012:rule/ MyScheduledRule" ], "detail": {} } 40 Amazon CloudWatch Events ユーザーガイド 認証 Amazon CloudWatch Events に対す る認証とアクセスコントロール Amazon CloudWatch Events へのアクセスには、AWS によってリクエストの認証に使用される認証情 報が必要です。これらの認証情報には、他の AWS リソースからのイベントデータの取得などの AWS リソースへのアクセス権限が必要です。次のセクションでは、AWS Identity and Access Management (IAM) と CloudWatch イベント を使用して、リソースにアクセスできるユーザーを制御することで、 リソースをセキュリティで保護する方法について詳しく説明します。 • 認証 (p. 41) • アクセスコントロール (p. 42) 認証 AWS には、次のタイプのアイデンティティでアクセスできます。 • AWS アカウントのルートユーザー – AWS にサインアップするときは、AWS アカウントに関連付 けられた E メールアドレスとパスワードを指定します。これらは ルート認証情報であり、これらの 情報を使用すると、すべての AWS リソースへの完全なアクセスが可能になります。 Important セキュリティ上の理由から、AWS アカウントへの完全なアクセス権限を持つ管理者ユー ザー (IAM ユーザー) を作成するためにのみ、ルート認証情報を使用することをお勧めし ます。その後、この管理者ユーザーを使用して、制限されたアクセス権限を持つ他の IAM ユーザーとロールを作成できます。詳細については、『IAM ユーザーガイド』の「IAM の ベストプラクティス」および「管理者のユーザーおよびグループの作成」を参照してくだ さい。 • IAM ユーザー – IAM ユーザーは、特定のカスタム権限 (たとえば、CloudWatch イベント でター ゲットにイベントデータを送信するアクセス権限) を持つ AWS アカウント内の ID です。 IAM の ユーザー名とパスワードを使用して、AWS マネジメントコンソール、AWS ディスカッション フォーラム、AWS Support Center などのセキュリティ保護された AWS ウェブページにサインイン できます。 41 Amazon CloudWatch Events ユーザーガイド アクセスコントロール ユーザー名とパスワードに加えて、各ユーザーのアクセスキーを生成することもできます。いくつ かの SDK の 1 つまたは AWS Command Line Interface (AWS CLI) を使ってプログラムで AWS サー ビスにアクセスするときに、これらのキーを使用します。SDK と CLI ツールでは、アクセスキーを 使用してリクエストが暗号で署名されます。AWS ツールを使用しない場合は、リクエストを自分で 署名する必要があります。CloudWatch イベント supports では、署名バージョン 4 がサポートされ ています。これは、インバウンド API リクエストを認証するためのプロトコルです。リクエストの 認証の詳細については、『AWS General Reference』の「署名バージョン 4 の署名プロセス」を参 照してください。 • IAM ロール – IAM ロールは、特定のアクセス権限を持ち、アカウントで作成できるもう 1 つの IAM ID です。 これは IAM ユーザーに似ていますが、特定のユーザーに関連付けられていません。IAM ロールでは、AWS サービスおよびリソースにアクセスするために使用できる一時的なアクセスキー を取得することができます。IAM ロールと一時的な認証情報は、次の状況で役立ちます。 • フェデレーティッドユーザーアクセス – IAM ユーザーを作成するのではなく、AWS Directory Service、エンタープライズユーザーディレクトリ、またはウェブアイデンティティプロバイダー の既存のユーザーアイデンティティを使用することもできます。このようなユーザーはフェデ レーティッドユーザーと呼ばれます。AWS では、アイデンティティプロバイダーを通じてアク セスがリクエストされたときに、フェデレーティッドユーザーにロールを割り当てます。フェデ レーティッドユーザーの詳細については、『IAM ユーザーガイド』の「フェデレーティッドユー ザーとロール」を参照してください。 • クロスアカウントアクセス – アカウントで IAM ロールを使って、お客様のアカウントのリソース へのアクセス権を別の AWS アカウントに付与できます。この例については、『IAM ユーザーガ イド』の「チュートリアル: AWS アカウント間の IAM ロールを使用したアクセスの委任」を参照 してください。 • AWS サービスアカウント – アカウントで IAM ロールを使って、お客様のアカウントのリソース にアクセスする AWS サービスのアクセス権限を付与できます。たとえば、Amazon Redshift が お客様に代わって Amazon S3 バケットにアクセスし、バケットに保存されたデータを Amazon Redshift クラスターにロードすることを許可するロールを作成できます。 詳細については、 『IAM ユーザーガイド』の「AWS ユーザーにアクセス権限を委任するロールの作成」を参照して ください。 • Amazon EC2 で実行されるアプリケーション – インスタンスで実行し、AWS API リクエストを 作成するアプリケーションで使用されるアクセスキーを EC2 インスタンス内に保存する代わり に、IAM ロールを使用して、これらのアプリケーション用の一時認証情報を管理できます。AWS ロールを EC2 インスタンスに割り当て、そのすべてのアプリケーションで使用できるようにする には、インスタンスにアタッチされたインスタンスプロファイルを作成できます。インスタンス プロファイルにはロールが含まれ、EC2 インスタンスで実行されるプログラムは一時認証情報を 取得することができます。詳細については、『IAM ユーザーガイド』の「Amazon EC2 上のアプ リケーションに対するロールの使用」を参照してください。 アクセスコントロール 有効な認証情報があればリクエストを認証できますが、許可を持っていないかぎり CloudWatch イベ ント リソースの作成やアクセスはできません。たとえば、CloudWatch イベント ルールに関連付け 42 Amazon CloudWatch Events ユーザーガイド 管理アクセスの概要 られた AWS Lambda、Amazon Simple Notification Service (Amazon SNS)、および Amazon Simple Queue Service (Amazon SQS) ターゲットを呼び出すためのアクセス権限が必要です。 以下のセクションでは、CloudWatch イベント のアクセス権限を管理する方法について説明します。 最初に概要のセクションを読むことをお勧めします。 • CloudWatch イベント リソースへのアクセス権限の管理の概要 (p. 43) • CloudWatch イベント でアイデンティティベースのポリシー (IAM ポリシー) を使用する (p. 47) • CloudWatch イベント のリソースベースのポリシーを使用する (p. 53) • CloudWatch イベント の権限リファレンス (p. 56) CloudWatch イベント リソースへのアクセス権限 の管理の概要 すべての AWS リソースは AWS アカウントによって所有され、となり、リソースの作成またはアク セスは、アクセス権限のポリシーによって管理されます。アカウント管理者は、アクセス権限ポリ シーを IAM アイデンティティ (ユーザー、グループ、ロール) にアタッチできます。一部のサービス (AWS Lambda など) では、アクセス権限ポリシーをリソースにアタッチすることもできます。 Note アカウント管理者 (または管理者ユーザー) は、管理者権限を持つユーザーです。詳細につい ては、IAM ユーザーガイド の「IAM のベストプラクティス」を参照してください。 アクセス権限を付与する場合、アクセス権限を取得するユーザー、取得するアクセス権限の対象とな るリソース、およびそれらのリソースに対して許可される特定のアクションを決定します。 トピック • CloudWatch イベント リソースおよびオペレーション (p. 43) • リソース所有権について (p. 44) • リソースへのアクセスの管理 (p. 45) • ポリシー要素の指定 : アクション、効果、プリンシパル (p. 46) • ポリシーでの条件の指定 (p. 47) CloudWatch イベント リソースおよびオペレーショ ン CloudWatch イベント では、プライマリリソースはルールです。CloudWatch イベント は、イベント などのプライマリリソースとともに使用できるその他のリソースをサポートします。これらはサブリ ソースと呼ばれます。これらのリソースとサブリソースには、一意の Amazon リソースネーム (ARN) が関連付けられています。ARN の詳細については、『アマゾン ウェブ サービス全般のリファレン ス』の「Amazon リソースネーム(ARN)と AWS サービスの名前空間」を参照してください。 リソースタイプ ARN 形式 ルール arn:aws:events:region:account:rule/rule-name すべての CloudWatch イ ベント リソース arn:aws:events:* 43 Amazon CloudWatch Events ユーザーガイド リソース所有権について リソースタイプ ARN 形式 特定リージョンの特定ア カウントが所有するすべ ての CloudWatch イベン ト リソース arn:aws:events:region:account:* Note AWS のほとんどのサービスでは、ARN 内のコロン (:) またはスラッシュ (/) は同じ文字として 扱われます。ただし、CloudWatch イベント では、イベントパターンとルールで完全一致が 使用されます。イベントパターンの作成時に正しい ARN 文字を使用して、一致させるイベン ト内の ARN 構文とそれらの文字が一致するようにしてください。 たとえば、以下のように ARN を使用して、ステートメント内で特定のルール(myRule)を指定でき ます。 "Resource": "arn:aws:events:us-east-1:123456789012:rule/myRule" また、特定のアカウントに属するすべてのルールを指定するには、以下のようにアスタリスク(*)ワ イルドカードを使用します。 "Resource": "arn:aws:events:us-east-1:123456789012:rule/*" すべてのリソースを指定する場合、または特定の API アクションが ARN をサポートしていない場合 は、以下のように Resource 要素内でアスタリスク(*)ワイルドカードを使用します。 "Resource": "*" 一部の CloudWatch イベント API アクション (PutTargets など) は複数のリソースを受け入れます。単 一のステートメントに複数のリソースを指定するには、以下のようにコンマで ARN を区切ります。 "Resource": ["arn1", "arn2"] CloudWatch イベント には、CloudWatch イベント リソースを操作するための一連のオペレーション が用意されています。使用可能なオペレーションのリストについては、「CloudWatch イベント の権 限リファレンス (p. 56)」を参照してください。 リソース所有権について AWS アカウントは、誰がリソースを作成したかにかかわらず、アカウントで作成されたリソースを所 有します。 具体的には、リソース所有者は、リソースの作成リクエストを認証するプリンシパルエン ティティ (ルートアカウント、IAM ユーザー、または IAM ロール) の AWS アカウントです。 以下の 例では、このしくみを示しています。 • AWS アカウントの root アカウントの認証情報を使用してルールを作成する場合、AWS アカウント は CloudWatch イベント リソースの所有者です。 • AWS アカウントに IAM ユーザーを作成し、そのユーザーに CloudWatch イベント リソースを作成 するためのアクセス権限を付与する場合、そのユーザーは CloudWatch イベント リソースを作成で きます。ただし、ユーザーが属する AWS アカウントは CloudWatch イベント リソースを所有して いるとします。 44 Amazon CloudWatch Events ユーザーガイド リソースへのアクセスの管理 • CloudWatch イベント リソースを作成するためのアクセス権限を持つ AWS アカウントに IAM ロー ルを作成する場合は、ロールを引き受けることのできるいずれのユーザーも CloudWatch イベント リソースを作成できます。ロールが属する AWS アカウントは CloudWatch イベント リソースを所 有しているとします。 リソースへのアクセスの管理 アクセスポリシーでは、誰が何にアクセスできるかを記述します。以下のセクションで、アクセス権 限のポリシーを作成するために使用可能なオプションについて説明します。 Note このセクションでは、CloudWatch イベント のコンテキストでの IAM の使用について説明し ます。これは、IAM サービスに関する詳細情報を取得できません。完全な IAM ドキュメント については、「IAM とは?」 (『IAM ユーザーガイド』) を参照してください。IAM ポリシー構 文の詳細および説明については、『IAM ユーザーガイド』の「AWS IAM ポリシーリファレン ス」を参照してください。 IAM アイデンティティにアタッチされたポリシーはアイデンティティベースのポリシー (IAM ポ リシー) と呼ばれ、リソースにアタッチされたポリシーはリソースベースのポリシーと呼ばれま す。CloudWatch イベント では、アイデンティティーベースのポリシー (IAM ポリシー) とリソース ベースのポリシーの両方がサポートされています。 トピック • アイデンティティベースのポリシー (IAM ポリシー) (p. 45) • リソースベースのポリシー (p. 46) アイデンティティベースのポリシー (IAM ポリシー) ポリシーを IAM アイデンティティにアタッチできます。たとえば、次の操作を実行できます。 • アカウントのユーザーまたはグループにアクセス権限ポリシーをアタッチする – CloudWatch コン ソールのルールを表示するアクセス権限を付与するために、ユーザーが所属するユーザーまたはグ ループにアクセス許可のポリシーをアタッチできます。 • アクセス権限ポリシーをロールにアタッチする (クロスアカウントのアクセス権限を付与) – アイデ ンティティベースのアクセス権限ポリシーを IAM ロールにアタッチして、クロスアカウントのアク セス権限を付与することができます。たとえば、アカウント A の管理者は、次のように他のまたは AWS にクロスアカウントのアクセス権限を別の AWS アカウント (アカウント B) または AWS サー ビスに付与するロールを作成することができます。 1. アカウント A の管理者は、IAM ロールを作成して、アカウント A のリソースに権限を付与する ロールに権限ポリシーをアタッチします。 2. アカウント A の管理者は、アカウント B をそのロールを引き受けるプリンシパルとして識別する ロールに、信頼ポリシーをアタッチします。 3. アカウント B の管理者は、アカウント B のユーザーにロールを引き受ける権限を委任できるよう になります。これにより、アカウント B のユーザーにアカウント A のリソースの作成とアクセス が許可されます。AWS サービスのアクセス権限を付与してロールを引き受けさせたい場合は、 信頼ポリシー内のプリンシパルも、AWS サービスのプリンシパルとなることができます。 IAM を使用したアクセス権限の委任の詳細については、『IAM ユーザーガイド』の「アクセス管 理」を参照してください。 次のポリシーでは、CloudWatch イベント に対して、お客様のアカウントの Amazon Kinesis スト リーム内のストリームにイベントを中継することを許可します。 45 Amazon CloudWatch Events ユーザーガイド ポリシー要素の指定 : アクション、効果、プリンシパル { "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchEventsInvocationAccess", "Effect": "Allow", "Action": [ "kinesis:PutRecord" ], "Resource": "*" } ] } お客様のアカウントのユーザーがアクセスを許可される呼び出しとリソースを制限する IAM ポリシー を作成し、IAM ユーザーにそれらのポリシーをアタッチできます。IAM ロールを作成する方法、お よび CloudWatch イベント の IAM ポリシーステートメントの例を調べる方法の詳細については、 「CloudWatch イベント リソースへのアクセス権限の管理の概要 (p. 43)」を参照してください。 リソースベースのポリシー ルールが CloudWatch イベント でトリガーされたら、ルールに関連付けられているすべてのター ゲットが呼び出されます。呼び出しとは、AWS Lambda 関数を呼び出し、イベントを Amazon SNS トピックにパブリッシュして、Amazon Kinesis ストリームに中継することです。 所有する リソースに対する API コールを行うには、CloudWatch イベント に適切なアクセス権限が必要で す。Lambda、Amazon SNS、および Amazon SQS リソースの場合、CloudWatch イベント はリソー スベースのポリシーに依存します。Amazon Kinesis ストリームの場合、CloudWatch イベント は IAM ロールに依存します。 IAM ロールの作成方法、および CloudWatch イベント のリソースベースのポリシーステートメン ト例の活用方法に関する詳細は、「CloudWatch イベント のリソースベースのポリシーを使用す る (p. 53)」を参照してください ポリシー要素の指定 : アクション、効果、プリンシ パル CloudWatch イベント リソースごとに、このサービスは、一連の API オペレーションを定義します。 これらの API オペレーションを実行するためのアクセス権限を付与するために、CloudWatch イベン ト ではポリシーに一連のアクションを定義できます。一部の API オペレーションは、API オペレー ションを実行するために複数のアクションに対するアクセス許可を要求できます。 リソースおよび API オペレーションに関する詳細については、「CloudWatch イベント リソースおよびオペレーショ ン (p. 43)」および「CloudWatch イベント の権限リファレンス (p. 56)」を参照してください。 以下は、基本的なポリシーの要素です。 • リソース - Amazon リソースネーム (ARN) を使用して、ポリシーを適用するリソースを識別しま す。詳細については、「CloudWatch イベント リソースおよびオペレーション (p. 43)」を参照し てください。 • アクション – アクションのキーワードを使用して、許可または拒否するリソースオペレーションを 識別します。たとえば、events:Describe 権限は、Describe オペレーションの実行をユーザー に許可します。 • 効果 - ユーザーが特定のアクションをリクエストする際の効果を指定します。許可または拒否のい ずれかになります。リソースへのアクセスを明示的に許可していない場合、アクセスは暗黙的に拒 否されます。また、明示的にリソースへのアクセスを拒否すると、別のポリシーによってアクセス が許可されている場合でも、ユーザーはそのリソースにアクセスできなくなります。 46 Amazon CloudWatch Events ユーザーガイド ポリシーでの条件の指定 • プリンシパル - アイデンティティベースのポリシー (IAM ポリシー) で、ポリシーがアタッチされて いるユーザーが暗黙のプリンシパルとなります。 リソースベースのポリシーでは、権限 (リソース ベースのポリシーにのみ適用) を受け取りたいユーザー、アカウント、サービス、またはその他のエ ンティティを指定します。 IAM ポリシーの構文と記述の詳細については、『IAM ユーザーガイド』の「AWS IAM ポリシーの参 照」を確認してください。 すべての CloudWatch イベント API アクションとそれらが適用されるリソースの表については、 「CloudWatch イベント の権限リファレンス (p. 56)」を参照してください。 ポリシーでの条件の指定 アクセス権限を付与するとき、アクセスポリシー言語を使用して、ポリシーが有効になる必要がある 条件を指定できます。たとえば、特定の日付の後にのみ適用されるポリシーが必要になる場合があり ます。ポリシー言語での条件の指定の詳細については、『IAM ユーザーガイド』の「条件」を参照し てください。 条件を表すには、あらかじめ定義された条件キーを使用します。AWS 全体の条件キーと CloudWatch イベント 固有のキーがあり、必要に応じて使用できます。AWS 全体を対象とするすべてのキー のリストについては、『IAM ユーザーガイド』の「条件に利用可能なキー」を参照してくださ い。CloudWatch イベント 固有のキーの一覧については、「詳細に設定されたアクセスコントロール のための IAM ポリシー条件の使用 (p. 58)」を参照してください。 CloudWatch イベント でアイデンティティベース のポリシー (IAM ポリシー) を使用する このトピックでは、アカウント管理者が識別 IAM アイデンティティ (ユーザー、グループ、ロール) へ のアクセス権限ポリシーをアタッチする、アイデンティティベースのポリシーの例を示します。 Amazon Kinesis にイベントデータを入力する許可をユーザーに与える、アクセス権限ポリシーの例を 以下に示します。 { "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchEventsInvocationAccess", "Effect": "Allow", "Action": [ "kinesis:PutRecord" ], "Resource": "*" } ] } このセクションでは、次のトピックを対象としています。 トピック • CloudWatch コンソールを使用するために必要なアクセス権限 (p. 48) • CloudWatch イベント での AWS 管理 (事前定義) ポリシー (p. 49) 47 Amazon CloudWatch Events ユーザーガイド CloudWatch コンソールを使用 するために必要なアクセス権限 • お客様が管理するポリシーの例 (p. 50) CloudWatch コンソールを使用するために必要なア クセス権限 CloudWatch コンソールで CloudWatch イベント を使用して作業するユーザーの場合、そのユーザー は、他の AWS リソースを AWS アカウントで記述できる、最小限のアクセス権限を持っている必要 があります。CloudWatch コンソールで CloudWatch イベント を使用するには、次のサービスからの アクセス許可が必要になります。 • 自動化 • Auto Scaling • CloudTrail • CloudWatch • CloudWatch イベント • IAM • Amazon Kinesis • Lambda • Amazon SNS • Amazon SWF これらの最小限必要なアクセス権限よりも制限された IAM ポリシーを作成している場合、その IAM ポリシーを使用するユーザーに対してコンソールは意図したとおりには機能しません。 CloudWatch イベント での AWS 管理 (事前定義) ポリシー (p. 49) で説明されているとおり、ユーザーが CloudWatch コンソールを使用できること、および、CloudWatchEventsReadOnlyAccess 管理ポリ シーがユーザーにアタッチされていることを確認してください。 AWS CLI または CloudWatch API のみを呼び出すユーザーには、最小限のコンソールアクセス権限を 付与する必要はありません。 CloudWatch コンソールを使用して作業するのに必要なフルセットのアクセス許可は以下に記載され ています。 • automation:CreateAction • automation:DescribeAction • automation:UpdateAction • autoscaling:DescribeAutoScalingGroups • cloudtrail:DescribeTrails • ec2:DescribeInstances • ec2:DescribeVolumes • events:DeleteRule • events:DescribeRule • events:DisableRule • events:EnableRule • events:ListRuleNamesByTarget • events:ListRules • events:ListTargetsByRule • events:PutEvents 48 Amazon CloudWatch Events ユーザーガイド CloudWatch イベント での AWS 管理 (事前定義) ポリシー • events:PutRule • events:PutTargets • events:RemoveTargets • events:TestEventPattern • iam:ListRoles • kinesis:ListStreams • lambda:AddPermission • lambda:ListFunctions • lambda:RemovePermission • sns:GetTopicAttributes • sns:ListTopics • sns:SetTopicAttributes • swf:DescribeAction • swf:ReferenceAction • swf:RegisterAction • swf:RegisterDomain • swf:UpdateAction CloudWatch イベント での AWS 管理 (事前定義) ポ リシー AWS は、AWS によって作成され管理されるスタンドアロンの IAM ポリシーが提供する多くの一般的 ユースケースに対応します。管理ポリシーは、一般的ユースケースに必要なアクセス権限を付与する ことで、どの権限が必要なのかをユーザーが調査する必要をなくすることができます。詳細について は、『IAM ユーザーガイド』の「AWS 管理ポリシー」を参照してください。 アカウントのユーザーにアタッチ可能な以下の AWS 管理ポリシーは、CloudWatch イベント に固有 のものです。 • CloudWatchEventsFullAccess - CloudWatch イベント へのフルアクセスを付与します。 • CloudWatchEventsInvocationAccess – CloudWatch イベント に対して、お客様のアカウントの Amazon Kinesis Streams 内のストリームにイベントを中継することを許可します。 • CloudWatchEventsReadOnlyAccess – CloudWatch イベント への読み取り専用アクセスを付与しま す。 • CloudWatchEventsBuiltInTargetExecutionAccess – CloudWatch イベント の組み込みターゲットに 対して、お客様に代わって Amazon EC2 アクションを実行することを許可します。 IAM イベントを送信するロール CloudWatch イベント がイベントを Amazon Kinesis ストリームターゲットに中継するには、IAM ロールを作成する必要があります。 CloudWatch イベント を送信するための IAM ロールを作成するには 1. https://console.aws.amazon.com/iam/ で Identity and Access Management (IAM) コンソールを開 きます。 2. 『IAM ユーザーガイド』の「AWS サービスにアクセス許可を委任するロールの作成」の手順に 従って、IAM ロールを作成します。ロールを作成する手順を実行する場合、次の作業を行いま す。 49 Amazon CloudWatch Events ユーザーガイド お客様が管理するポリシーの例 • [Role Name]では、AWS アカウント内で一意の名前 (CloudWatchEventsSending など) を使用 します。 • [Select Role Type] で、[AWS Service Roles] を選択してから [Amazon CloudWatch Events] を 選択します。これで、ロールを引き受けるための CloudWatch イベント アクセス権限が付与さ れます。 • [Attach Policy] で [CloudWatchEventsInvocationAccess] を選択します。 独自のカスタム IAM ポリシーを作成して、CloudWatch イベント アクションとリソースのためのアク セス権限を許可することもできます。これらのカスタムポリシーは、それらのアクセス権限が必要な IAM ユーザーまたはグループにアタッチできます。IAM ポリシーの詳細については、『IAM ユーザー ガイド』の「IAM ポリシーの概要」を参照してください。カスタム IAM ポリシーの管理と作成の詳細 については、『IAM ユーザーガイド』の「IAM ポリシーの管理」を参照してください。 お客様が管理するポリシーの例 このセクションでは、さまざまな CloudWatch イベント アクションのアクセス権限を付与するユー ザーポリシー例を示しています。CloudWatch イベント API、AWS SDK、または AWS CLI を使用し ている場合、これらのポリシーは機能します。 Note すべての例で、米国西部 (オレゴン) リージョン (us-west-2) を使用し、架空のアカウント ID を含めています。 以下のサンプル IAM ポリシーを使用して、IAM ユーザー/ロールに対して CloudWatch イベント アク セスを制限できます。 例 • 例 1: CloudWatchEventsBuiltInTargetExecutionAccess (p. 50) • 例 2: CloudWatchEventsInvocationAccess (p. 51) • 例 3: CloudWatchEventsConsoleAccess (p. 51) • 例 4: CloudWatchEventsFullAccess (p. 52) • 例 5: CloudWatchEventsReadOnlyAccess (p. 52) 例 1: CloudWatchEventsBuiltInTargetExecutionAccess 次のポリシーでは、CloudWatch イベント の組み込みターゲットに対して、お客様に代わって Amazon EC2 アクションを実行することを許可します。 Important 組み込みターゲットでのルール作成は、AWS マネジメントコンソール でのみサポートされて います。 { "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchEventsBuiltInTargetExecutionAccess", "Effect": "Allow", "Action": [ 50 Amazon CloudWatch Events ユーザーガイド お客様が管理するポリシーの例 "ec2:Describe*", "ec2:RebootInstances", "ec2:StopInstances", "ec2:TerminateInstances", "ec2:CreateSnapshot" ], "Resource": "*" } ] } 例 2: CloudWatchEventsInvocationAccess 次のポリシーでは、CloudWatch イベント に対して、お客様のアカウントの Amazon Kinesis スト リーム内のストリームにイベントを中継することを許可します。 { "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchEventsInvocationAccess", "Effect": "Allow", "Action": [ "kinesis:PutRecord" ], "Resource": "*" } ] } 例 3: CloudWatchEventsConsoleAccess 次のポリシーにより、IAM ユーザーは CloudWatch イベント コンソールを使用できます。 { "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchEventsConsoleAccess", "Effect": "Allow", "Action": [ "automation:CreateAction", "automation:DescribeAction", "automation:UpdateAction", "autoscaling:DescribeAutoScalingGroups", "cloudtrail:DescribeTrails", "ec2:DescribeInstances", "ec2:DescribeVolumes", "events:*", "iam:ListRoles", "kinesis:ListStreams", "lambda:AddPermission", "lambda:ListFunctions", "lambda:RemovePermission", "sns:GetTopicAttributes", "sns:ListTopics", 51 Amazon CloudWatch Events ユーザーガイド お客様が管理するポリシーの例 "sns:SetTopicAttributes", "swf:DescribeAction", "swf:ReferenceAction", "swf:RegisterAction", "swf:RegisterDomain", "swf:UpdateAction" ], "Resource": "*" }, { "Sid": "IAMPassRoleForCloudWatchEvents", "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::*:role/AWS_Events_Invoke_Targets", "arn:aws:iam::*:role/AWS_Events_Actions_Execution" ] } ] } 例 4: CloudWatchEventsFullAccess 次のポリシーでは、CloudWatch イベント に対して、AWS CLI と SDK によりアクションを実行する ことを許可します。 { "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchEventsFullAccess", "Effect": "Allow", "Action": "events:*", "Resource": "*" }, { "Sid": "IAMPassRoleForCloudWatchEvents", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::*:role/AWS_Events_Invoke_Targets" } ] } 例 5: CloudWatchEventsReadOnlyAccess 次のポリシーは、CloudWatch イベント に対する読み取り専用アクセスを付与します。 { "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchEventsReadOnlyAccess", "Effect": "Allow", "Action": [ "events:Describe*", 52 Amazon CloudWatch Events ユーザーガイド リソースベースのポリシーを利用する "events:List*", "events:TestEventPattern" ], "Resource": "*" } ] } CloudWatch イベント のリソースベースのポリ シーを使用する ルールが CloudWatch イベント でトリガーされたら、ルールに関連付けられているすべてのター ゲットが呼び出されます。呼び出しとは、AWS Lambda 関数を呼び出し、イベントを Amazon SNS トピックにパブリッシュして、Amazon Kinesis ストリームに中継することです。 所有する リソースに対する API コールを行うには、CloudWatch イベント に適切なアクセス権限が必要で す。Lambda、Amazon SNS、および Amazon SQS リソースの場合、CloudWatch イベント はリソー スベースのポリシーに依存します。Amazon Kinesis ストリームの場合、CloudWatch イベント は IAM ロールに依存します。 次のアクセス許可を使用して、CloudWatch イベント ルールに関連付けられたターゲットを呼び 出すことができます。次の手順では、AWS CLI を使用してターゲットにアクセス許可を追加しま す。AWS CLI をインストールして設定する方法については、『AWS Command Line Interface ユー ザーガイド』の「Getting Set Up with the AWS Command Line Interface」を参照してください。 トピック • AWS Lambda アクセス許可 (p. 53) • Amazon SNS アクセス許可 (p. 54) • Amazon SQS アクセス許可 (p. 55) AWS Lambda アクセス許可 CloudWatch イベント ルールを使用して AWS Lambda 関数を呼び出すには、Lambda 関数のポリシー に次のアクセス許可を追加します。 { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:region:account-id:function:function-name", "Principal": { "Service": "events.amazonaws.com" }, "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:events:region:account-id:rule/rule-name" } }, "Sid": "TrustCWEToInvokeMyLambdaFunction" } CloudWatch イベント が Lambda 関数を呼び出せるようにするアクセス許可を追加するには • コマンドプロンプトで次のコマンドを入力します。 53 Amazon CloudWatch Events ユーザーガイド Amazon SNS アクセス許可 aws lambda add-permission --statement-id "TrustCWEToInvokeMyLambdaFunction" \ --action "lambda:InvokeFunction" \ --principal "events.amazonaws.com" \ --function-name "arn:aws:lambda:region:account-id:function:function-name" \ --source-arn "arn:aws:events:region:account-id:rule/rule-name" CloudWatch イベント が Lambda 関数を呼び出せるようにするアクセス許可の詳細な設定方法につい ては、『AWS Lambda Developer Guide』の「AddPermission」と「スケジュールされたイベントで の Lambda の使用」を参照してください。. Amazon SNS アクセス許可 CloudWatch イベント に Amazon SNS トピックの発行を許可するには、aws sns get-topicattributes コマンドと aws sns set-topic-attributes コマンドを使用します。 CloudWatch イベント に SNS トピックの発行を可能にするアクセス許可を追加するには 1. 最初に SNS トピック属性を一覧表示します。コマンドプロンプトで、以下を入力します。 aws sns get-topic-attributes --topic-arn "arn:aws:sns:region:accountid:topic-name" コマンドは、SNS トピックのすべての属性を返します。次の例に、新しく作成された SNS ト ピックの結果を示します。 { "Attributes": { "SubscriptionsConfirmed": "0", "DisplayName": "", "SubscriptionsDeleted": "0", "EffectiveDeliveryPolicy": "{\"http\":{\"defaultHealthyRetryPolicy \":{\"minDelayTarget\":20,\"maxDelayTarget\":20,\"numRetries\":3, \"numMaxDelayRetries\":0,\"numNoDelayRetries\":0,\"numMinDelayRetries\":0, \"backoffFunction\":\"linear\"},\"disableSubscriptionOverrides\":false}}", "Owner": "account-id", "Policy": "{\"Version\":\"2012-10-17\",\"Id\": \"__default_policy_ID\",\"Statement\":[{\"Sid\":\"__default_statement_ID \",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Action\": [\"SNS:GetTopicAttributes\",\"SNS:SetTopicAttributes\",\"SNS:AddPermission \",\"SNS:RemovePermission\",\"SNS:DeleteTopic\",\"SNS:Subscribe\", \"SNS:ListSubscriptionsByTopic\",\"SNS:Publish\",\"SNS:Receive\"], \"Resource\":\"arn:aws:sns:region:account-id:topic-name\",\"Condition\": {\"StringEquals\":{\"AWS:SourceOwner\":\"account-id\"}}}]}", "TopicArn": "arn:aws:sns:region:account-id:topic-name", "SubscriptionsPending": "0" } } 2. 次に、以下のステートメントを文字列に変換し、[Policy] 属性内の [Statement] コレクションに追 加します。 { 54 Amazon CloudWatch Events ユーザーガイド Amazon SQS アクセス許可 "Sid": "TrustCWEToPublishEventsToMyTopic", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:region:account-id:topic-name" } 文字列に変換したステートメントは、次のようになります。 {\"Sid\":\"TrustCWEToPublishEventsToMyTopic\",\"Effect\":\"Allow \",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\": \"sns:Publish\",\"Resource\":\"arn:aws:sns:region:account-id:topic-name\"} 3. ステートメントコレクションにステートメント文字列を追加した後、aws sns set-topicattributes コマンドを使用して新しいポリシーを設定します。 aws sns set-topic-attributes --topic-arn "arn:aws:sns:region:accountid:topic-name" \ --attribute-name Policy \ --attribute-value "{\"Version\":\"2012-10-17\",\"Id\": \"__default_policy_ID\",\"Statement\":[{\"Sid\":\"__default_statement_ID \",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Action\": [\"SNS:GetTopicAttributes\",\"SNS:SetTopicAttributes\",\"SNS:AddPermission \",\"SNS:RemovePermission\",\"SNS:DeleteTopic\",\"SNS:Subscribe\", \"SNS:ListSubscriptionsByTopic\",\"SNS:Publish\",\"SNS:Receive\"], \"Resource\":\"arn:aws:sns:region:account-id:topic-name\",\"Condition \":{\"StringEquals\":{\"AWS:SourceOwner\":\"account-id\"}}}, {\"Sid\": \"TrustCWEToPublishEventsToMyTopic\",\"Effect\":\"Allow\",\"Principal \":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"sns:Publish\", \"Resource\":\"arn:aws:sns:region:account-id:topic-name\"}]}" 詳細については、『Amazon Simple Notification Service API Reference』の「SetTopicAttributes アク ション」を参照してください。 Amazon SQS アクセス許可 CloudWatch イベント ルールに Amazon SQS キューの呼び出しを許可するには、aws sqs getqueue-attributes コマンドと aws sqs set-queue-attributes コマンドを使用します。 CloudWatch イベント ルールに SQS キューの呼び出しを可能にするアクセス許可を追加する には 1. 最初に、SQS キュー属性を一覧表示します。コマンドプロンプトで、以下を入力します。 aws sqs get-queue-attributes \ --queue-url https://sqs.region.amazonaws.com/account-id/queue-name \ --attribute-names Policy 新しく作成された SQS キューのポリシーは、デフォルトでは空になっています。ステートメン トを追加するだけでなく、このステートメントを含むポリシーを作成する必要があります。 2. 次のステートメントにより、CloudWatch イベント が SQS キューにメッセージを送信できるよ うになります。 55 Amazon CloudWatch Events ユーザーガイド CloudWatch イベント の権限リファレンス { "Sid": "TrustCWEToSendEventsToMyQueue", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:region:account-id:queue-name", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:events:region:account-id:rule/rule-name" } } } 3. 次に、上記のステートメントを文字列に変換します。文字列に変換したポリシーは、次のように なります。 {\"Sid\": \"TrustCWEToSendEventsToMyQueue\", \"Effect\": \"Allow\", \"Principal\": {\"AWS\": \"*\"}, \"Action\": \"sqs:SendMessage\", \"Resource\": \"arn:aws:sqs:region:account-id:queue-name\", \"Condition \": {\"ArnEquals\": {\"aws:SourceArn\": \"arn:aws:events:region:accountid:rule/rule-name\"}} 4. 以下の内容のファイルを set-queue-attributes.json という名前で作成します。 { "Policy": "{\"Version\":\"2012-10-17\",\"Id\": \"arn:aws:sqs:region:account-id:queue-name/SQSDefaultPolicy\",\"Statement \":[{\"Sid\": \"TrustCWEToSendEventsToMyQueue\", \"Effect\": \"Allow \", \"Principal\": {\"AWS\": \"*\"}, \"Action\": \"sqs:SendMessage\", \"Resource\": \"arn:aws:sqs:region:account-id:queue-name\", \"Condition \": {\"ArnEquals\": {\"aws:SourceArn\": \"arn:aws:events:region:accountid:rule/rule-name\"}}}]}" } 5. set-queue-attributes.json ファイルを入力として使用し、ポリシー属性を設定します。コマンドプ ロンプトで、次のように入力します。 aws sqs set-queue-attributes \ --queue-url https://sqs.region.amazonaws.com/account-id/queue-name \ --attributes file://set-queue-attributes.json SQS キューにすでにポリシーがある場合は、元のポリシーをコピーして set-queueattributes.json ファイルの新しいステートメントと結合し、上記コマンドを実行してポリシーを更 新する必要があります。 詳細については、『Amazon Simple Queue Service 開発者ガイド』の「Amazon SQS ポリシーの例」 を参照してください。 CloudWatch イベント の権限リファレンス アクセスコントロール (p. 42) をセットアップし、IAM アイデンティティにアタッチできるアクセ ス権限ポリシー(アイデンティティベースのポリシー)を作成するときは、以下の表をリファレンス 56 Amazon CloudWatch Events ユーザーガイド CloudWatch イベント の権限リファレンス として使用できます。この表には、各 CloudWatch イベント API オペレーション、およびその実行の ためのアクセス権限を付与できる対応するアクションを示しています。ポリシーの Action フィール ドでアクションを指定し、ポリシーの Resource フィールドでリソース値としてワイルドカード文字 (*)を指定します。 CloudWatch イベント ポリシーで AWS 全体の条件キーを使用して、条件を表現することができま す。AWS 全体を対象とするすべてのキーのリストについては、IAM ユーザーガイド の「利用可能な キー」を参照してください。 Note アクションを指定するには、API オペレーション名の前に events: プレフィックスを使用し ます。たとえば、events:PutRule、events:EnableRule、または events:* (すべての CloudWatch イベント アクションの場合) のように指定します。 単一のステートメントに複数のアクションを指定するには、次のようにコンマで区切ります。 "Action": ["events:action1", "events:action2"] ワイルドカードを使用して複数のアクションを指定することもできます。たとえば、「Put」という単 語で始まる名前のすべてのアクションは、以下のように指定できます。 "Action": "events:Put*" CloudWatch イベント API アクションをすべて指定するには、* ワイルドカードを以下のように使用し ます。 "Action": "events:*" CloudWatch イベント を使用して IAM ポリシーで指定できるアクションは以下のとおりです。 CloudWatch イベント API オペレーションおよびアクションで必要なアクセス許可 CloudWatch イベント API オペレーション 必要なアクセス権限 (API アクション) DeleteRule events:DeleteRule ルールを削除するのに必要です。 DescribeRule events:DescribeRule ルールについての詳細を一覧表示するのに必要 です。 DisableRule events:DisableRule ルールを無効にするのに必要です。 EnableRule events:EnableRule ルールを有効にするのに必要です。 ListRuleNamesByTarget events:ListRuleNamesByTarget ターゲットと関連付けられるルールを一覧表示 するために必要です。 57 Amazon CloudWatch Events ユーザーガイド 条件の使用 CloudWatch イベント API オペレーション 必要なアクセス権限 (API アクション) ListRules events:ListRules アカウントの全グループを一覧表示するために 必要です。 ListTargetsByRule events:ListTargetsByRule ルールと関連付けられるすべてのターゲットを 一覧表示するために必要です。 PutEvents events:PutEvents ルールと一致するカスタムイベントを追加する ために必要です。 PutRule events:PutRule ルールを作成または更新するために必要です。 PutTargets events:PutTargets ルールにターゲットを追加するために必要で す。 RemoveTargets events:RemoveTargets ターゲットをルールから削除するために必要で す。 TestEventPattern events:TestEventPattern 特定のイベントに対してイベントパターンをテ ストするために必要です。 詳細に設定されたアクセスコントロールのための IAM ポリシー条件の使用 アクセス権限を付与するとき、アクセスポリシー言語を使用して、ポリシーが有効になる必要がある 条件を指定できます。ポリシーステートメントでは、オプションで有効になるタイミングを制御する 条件を指定できます。各条件には 1 つ以上のキーと値のペアが含まれます。条件キーは大文字小文 字を区別しません。たとえば、特定の日付の後にのみ適用されるポリシーが必要になる場合がありま す。 複数の条件、または単一の条件に複数のキーを指定する場合、論理 AND 演算を使用してそれらを評 価します。1 つのキーに複数の値を使用して単一の条件を指定する場合、論理 OR 演算を使用して条 件を評価します。アクセス許可が付与されるには、すべての条件を満たしている必要があります。 条件を指定する際にプレースホルダーも使用できます。詳細については、IAM ユーザーガイド の「ポ リシー変数」を参照してください。アクセスポリシー言語での条件の指定の詳細については、『IAM ユーザーガイド』の「条件」を参照してください。 デフォルトでは、IAM ユーザー/ロールはお客様のアカウントのイベントにアクセスすることはでき ません。イベントを使用するには、ユーザーは PutRule API アクションに対するアクセス権限が必 要です。IAM ユーザー/ロールにそれらのポリシーで events:PutRule アクションに対するアクセス 権限を付与した場合、それらのユーザー/ロールは特定のイベントに一致するルールを作成できます。 ルールにターゲットを追加する必要があります。追加しないと、ターゲットのないルールは、受信 58 Amazon CloudWatch Events ユーザーガイド 条件の使用 イベントに一致したときに CloudWatch メトリクスをパブリッシュすることを除いて、何も行いませ ん。IAM ユーザー/ロールは events:PutTargets アクションに対するアクセス権限が必要です。 イベントの特定のソースとタイプに対するアクセス権限の適用範囲を絞り込むことで (events:source および events:detail-type 条件キーを使用)、イベントへのアクセスを制限で きます。IAM ユーザー/ロールのポリシーステートメントに、特定の一連のソースと詳細タイプにの み一致するルールの作成を許可する条件を追加できます。すべての条件キーとそれらが適用される CloudWatch イベント アクションとリソースのリストについては、「詳細に設定されたアクセスコン トロールのための IAM ポリシー条件の使用 (p. 58)」を参照してください。 同様に、ポリシーステートメントに設定された条件により、お客様のアカウントのどのリソースが IAM ユーザー/ロールによってルールに追加できるかがわかります (events:TargetArn 条件キー を使用)。たとえば、お客様のアカウントで CloudTrail を有効にし、CloudTrail ストリームがある場 合、CloudTrail イベントは CloudWatch イベント によりお客様のアカウントのユーザーにも使用可能 です。ユーザーが CloudWatch イベント を使用し、CloudTrail イベントを除いたすべてのイベントに アクセスできるようにする場合は、PutRule API アクションに関するステートメントに、そのユー ザー/ロールによって作成されたルールが CloudTrail イベントタイプと一致しないなら拒否する条件を 追加できます。 CloudTrail イベントの場合、元の API コールの生成元となった特定のプリンシパルへのアクセスを制 限できます (events:detail.userIdentity.principalId 条件キーを使用)。たとえば、ユーザー に対して、監査/フォレンジック用のアカウントの特定の IAM ロールが発生するイベントを除き、すべ ての CloudTrail イベントを参照することを許可できます。 条件キー キー/値のペア 評価の種類 events:source "events:source":"source " ソース、Null ここで、source は、イベントの ソースフィールドの文字列リテラ ル(「aws.ec2」、「aws.s3」な ど)です。 events:detail-type "events:detailtype":"detail-type " 詳細タイプ、Null ここで、detail-type は、イベ ントの detail-type フィールドの 文字列リテラル(「AWS API Call via CloudTrail」、「EC2 Instance State-change Notification」など) です。 events: "events: プリンシパル ID、Null detail.userIdentity.principalIddetail.userIdentity.principalId":"principalid" ここで、principal-id は、detail-type が「AWS API Call via CloudTrail」のイベント の detail.userIdentity.principalId フィールドの文字列リテラル ("AROAIDPPEZS35WEXAMPLE:AssumedRoleSessionName." など)です。. events:TargetArn "events:TargetArn":"target- ARN、Null arn " ここで、target-arn は、ルー ルに追加できるターゲットの 59 Amazon CloudWatch Events ユーザーガイド 例 1: 特定のソースへのアクセスの制限 条件キー キー/値のペア 評価の種類 ARN("arn:aws:lambda:*:*:function:*" など)です。 CloudWatch イベント のポリシーステートメントの例については、CloudWatch イベント リソースへ のアクセス権限の管理の概要 (p. 43) を参照してください。 トピック • 例 1: 特定のソースへのアクセスの制限 (p. 60) • 例 2: イベントパターンで個々に使用できる複数のソースの定義 (p. 62) • 例 3: イベントパターンで使用できるソースと DetailType を定義する (p. 63) • 例 4: ソースがイベントパターンに定義されていることを確認する (p. 64) • 例 5: イベントパターンに複数のソースがある場合にのみ許可されるソースのリストを定義す る (p. 65) • 例 6: 特定の PrincipalId から発生した API コールの AWS CloudTrail イベントが使用されているこ とを確認する (p. 66) 例 1: 特定のソースへのアクセスの制限 以下のポリシー例は IAM ユーザーにアタッチできます。ポリシー A では、すべてのイベントに対する PutRule API アクションを許可します。一方、ポリシー B では、作成するルールのイベントパターン が Amazon EC2 イベントに一致する場合にのみ PutRule を許可します。 Policy A:—allow any events { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleForAllEvents", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*" } ] } Policy B:—allow events only from Amazon EC2 { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleForAllEC2Events", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:source": "aws.ec2" } } 60 Amazon CloudWatch Events ユーザーガイド 例 1: 特定のソースへのアクセスの制限 } ] } EventPattern は PutRule に必須の引数です。そのため、ポリシー B が適用されるユーザーが以下の ようなイベントパターンで PutRule を呼び出すとします。 { "source": [ "aws.ec2" ] } この場合、ポリシーではこの特定のソース「aws.ec2」を許可するため、ルールが作成されます。し かし、ポリシー B が適用されるユーザーが以下のようなイベントパターンで PutRule を呼び出すと します。 { "source": [ "aws.s3" ] } この場合、ポリシーではこの特定のソース「aws.s3」を許可しないため、ルールの作成は拒否されま す。基本的に、ポリシー B が適用されるユーザーのみが、Amazon EC2 から発生したイベントに一致 するルールの作成を許可されます。そのため、Amazon EC2 から発生したイベントのみへのアクセス を許可されます。 ポリシー A とポリシー B の比較については、以下の表を参照してください。 イベントパターン { ポリシー A で許可 ポリシー B で許可 はい はい はい いいえ(ソース aws.s3 は許可され ない) はい はい はい いいえ(ソースの指定が必要) "source": [ "aws.ec2" ] } { "source": [ "aws.ec2", "aws.s3" ] } { "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ] } { "detail-type": [ "EC2 Instance State-change Notification" ] 61 Amazon CloudWatch Events ユーザーガイド 例 2: イベントパターンで個々に 使用できる複数のソースの定義 イベントパターン ポリシー A で許可 ポリシー B で許可 } 例 2: イベントパターンで個々に使用できる複数の ソースの定義 以下のポリシーでは、Amazon EC2 または CloudWatch イベント からのイベントを許可します。つま り、EventPattern ソースが「aws.ec2」または「aws.ecs」として指定されたルールを作成することを IAM ユーザー/ロールに対して許可します。ソースを定義しないと、「拒否」になります。 { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsEC2OrECS", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:source": [ "aws.ec2", "aws.ecs" ] } } } ] } このポリシーで許可または拒否されるイベントパターンの例については、以下の表を参照してくださ い。 イベントパターン ポリシーで許可 はい { "source": [ "aws.ec2" ] } はい { "source": [ "aws.ecs" ] } いいえ { "source": [ "aws.s3" ] } いいえ { "source": [ "aws.ec2", "aws.ecs" ] } { いいえ 62 Amazon CloudWatch Events ユーザーガイド 例 3: イベントパターンで使用でき るソースと DetailType を定義する イベントパターン ポリシーで許可 "detail-type": [ "AWS API Call via CloudTrail" ] } 例 3: イベントパターンで使用できるソースと DetailType を定義する 以下のポリシーでは、DetailType が EC2 instance state change notification に等しい aws.ec2 ソースからのみのイベントを許可します。 { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsEC2AndDetailTypeIsInstanceStateChangeNotification", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:source": "aws.ec2", "events:detail-type": "EC2 Instance State-change Notification" } } } ] } このポリシーで許可または拒否されるイベントパターンの例については、以下の表を参照してくださ い。 イベントパターン ポリシーで許可 いいえ { "source": [ "aws.ec2" ] } いいえ { "source": [ "aws.ecs" ] } はい { "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ] } 63 Amazon CloudWatch Events ユーザーガイド 例 4: ソースがイベントパターン に定義されていることを確認する イベントパターン ポリシーで許可 いいえ { "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance Health Failed" ] } いいえ { "detail-type": [ "EC2 Instance State-change Notification" ] } 例 4: ソースがイベントパターンに定義されている ことを確認する 以下のポリシーでは、EventPatterns にソースフィールドがあるときにのみルールの作成を許可し ます。つまり、IAM ユーザー/ロールは EventPattern に特定のソースを指定しないと、ルールを作 成することはできません。 { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsSpecified", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "Null": { "events:source": "false" } } } ] } このポリシーで許可または拒否されるイベントパターンの例については、以下の表を参照してくださ い。 イベントパターン ポリシーで許可 はい { "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ] } { はい 64 Amazon CloudWatch Events ユーザーガイド 例 5: イベントパターンに複数のソースがある場 合にのみ許可されるソースのリストを定義する イベントパターン ポリシーで許可 "source": [ "aws.ecs", "aws.ec2" ] } いいえ { "detail-type": [ "EC2 Instance State-change Notification" ] } 例 5: イベントパターンに複数のソースがある場合 にのみ許可されるソースのリストを定義する 以下のポリシーでは、EventPatterns に複数のソースがある場合にのみ、ルールの作成を許可しま す。イベントパターンに登録された各ソースは、条件に指定されたリストに含まれている必要があり ます。ForAllValues 条件を使用するときは、条件リストの少なくとも 1 つの項目が定義されているこ とを確認してください。 { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsSpecifiedAndIsEitherS3OrEC2OrBoth", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "events:source": [ "aws.ec2", "aws.s3" ] }, "Null": { "events:source": "false" } } } ] } このポリシーで許可または拒否されるイベントパターンの例については、以下の表を参照してくださ い。 イベントパターン ポリシーで許可 はい { "source": [ "aws.ec2" ] } はい { "source": [ "aws.ec2", "aws.s3" ] 65 Amazon CloudWatch Events ユーザーガイド 例 6: 特定の PrincipalId から発生した API コールの AWS CloudTrail イベントが使用されていることを確認する イベントパターン ポリシーで許可 } いいえ { "source": [ "aws.ec2", "aws.autoscaling" ] } いいえ { "detail-type": [ "EC2 Instance State-change Notification" ] } 例 6: 特定の PrincipalId から発生した API コールの AWS CloudTrail イベントが使用されていることを 確認する すべての AWS CloudTrail イベントの detail.userIdentity.principalId パスには、API 呼び出しを行ったユーザーの ID(PrincipalId)がありま す。events:detail.userIdentity.principalId 条件キーを利用することで、IAM ユーザー/ ロールのアクセス先を、特定のアカウントからのみ発生した CloudTrail イベントに制限できます。 "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleOnlyForCloudTrailEventsWhereUserIsASpecificIAMUser", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:detail-type": [ "AWS API Call via CloudTrail" ], "events:detail.userIdentity.principalId": [ "AIDAJ45Q7YFFAREXAMPLE" ] } } } ] } このポリシーで許可または拒否されるイベントパターンの例については、以下の表を参照してくださ い。 イベントパターン ポリシーで許可 いいえ { "detail-type": [ "AWS API Call via CloudTrail" ] 66 Amazon CloudWatch Events ユーザーガイド 例 6: 特定の PrincipalId から発生した API コールの AWS CloudTrail イベントが使用されていることを確認する イベントパターン ポリシーで許可 } はい { "detail-type": [ "AWS API Call via CloudTrail" ], "detail.userIdentity.principalId": [ "AIDAJ45Q7YFFAREXAMPLE" ] } いいえ { "detail-type": [ "AWS API Call via CloudTrail" ], "detail.userIdentity.principalId": [ "AROAIDPPEZS35WEXAMPLE:AssumedRoleSessionName" ] } 67 Amazon CloudWatch Events ユーザーガイド CloudTrail 内の CloudWatch イベント 情報 AWS CloudTrail での Amazon CloudWatch Events API コールのロ グ作成 AWS CloudTrail は、AWS アカウントによって、または AWS アカウントの代わりに行われた API 呼 び出しをキャプチャするサービスです。この情報が集められ、指定した Amazon S3 バケットに保存 されるログファイルに書き込まれます。API 呼び出しは、API、コンソール、または AWS CLI を使用 するたびに記録されます。CloudTrail によって収集された情報を使用して、どのようなリクエストが 行われたかを判断することができます。リクエストの作成元のソース IP アドレス、リクエストの実行 者、リクエストの実行日時などです。 設定して有効化する方法など、CloudTrail の詳細については、『AWS CloudTrail User Guide』の 「AWS CloudTrail とは」を参照してください。 トピック • CloudTrail 内の CloudWatch イベント 情報 (p. 68) • ログファイルエントリの概要 (p. 69) CloudTrail 内の CloudWatch イベント 情報 CloudTrail ログ記録をオンにすると、API アクションに対して行われた呼び出しが、ログファイル にキャプチャされます。各ログファイルエントリには、誰がリクエストを生成したかに関する情 報が含まれます。たとえば、CloudWatch イベント ルールを作成するリクエストが行われた場合 (PutRule)、CloudTrail は、リクエストをした人またはサービスのユーザー識別子を記録します。 ログエントリのユーザー ID 情報は、次のことを確認するのに役立ちます。 • リクエストが、ルートと IAM ユーザー認証情報のどちらを使用して送信されたか • リクエストが、ロールとフェデレーティッドユーザーのどちらの一時的なセキュリティ認証情報を 使用して送信されたか • リクエストが、別の AWS サービスによって送信されたかどうか 詳細については、『AWS CloudTrail User Guide』の「CloudTrail userIdentity 要素」を参照してくだ さい。 68 Amazon CloudWatch Events ユーザーガイド ログファイルエントリの概要 必要な場合はログファイルを自身のバケットに保管できますが、ログファイルを自動的にアーカイブ または削除するにように Amazon S3 ライフサイクルルールを定義することもできます。デフォルト では Amazon S3 のサーバー側の暗号化 (SSE) を使用して、ログファイルが暗号化されます。 ログファイルの配信時に通知を受け取る場合、新しいログファイルの配信時に Amazon SNS 通知が 発行されるように CloudTrail を設定できます。詳細については、『AWS CloudTrail User Guide』の 「CloudTrail 用の Amazon SNS 通知の設定」を参照してください。 また、複数の AWS リージョンと複数の AWS アカウントからの Amazon CloudWatch Logs ログファ イルを 1 つの Amazon S3 バケットに集約することもできます。詳細については、『AWS CloudTrail User Guide』の「Receiving CloudTrail Log Files from Multiple Regions」と「Receiving CloudTrail Log Files from Multiple Accounts」を参照してください。 ログ記録をオンにすると、次の API アクションが CloudTrail に書き込まれます。 • DeleteRule • DescribeRule • DisableRule • EnableRule • ListRuleNamesByTarget • ListRules • ListTargetsByRule • PutRule • PutTargets • RemoveTargets • TestEventPattern これらのアクションの詳細については、『Amazon CloudWatch Events API リファレンス』を参照し てください。 ログファイルエントリの概要 CloudTrail ログファイルには、複数の JSON 形式イベントがリストされる 1 つ以上のログエントリを 記録できます。ログエントリは任意の送信元からの単一のリクエストを表し、リクエストされたアク ション、アクションの日時、リクエストのパラメーターなどに関する情報が含まれます。ログエント リは、パブリック API 呼び出しの順序付けられたスタックトレースではないため、特定の順序では表 示されません。すべての API アクションのログファイルエントリは以下の例のようになります。 以下のログファイルエントリは、ユーザーが CloudWatch イベント PutRule アクションを呼び出した ことを示します。 { "eventVersion":"1.03", "userIdentity":{ "type":"Root", "principalId":"123456789012", "arn":"arn:aws:iam::123456789012:root", "accountId":"123456789012", "accessKeyId":"AKIAIOSFODNN7EXAMPLE", "sessionContext":{ "attributes":{ "mfaAuthenticated":"false", "creationDate":"2015-11-17T23:56:15Z" 69 Amazon CloudWatch Events ユーザーガイド ログファイルエントリの概要 } } }, "eventTime":"2015-11-18T00:11:28Z", "eventSource":"events.amazonaws.com", "eventName":"PutRule", "awsRegion":"us-east-1", "sourceIPAddress":"AWS Internal", "userAgent":"AWS CloudWatch Console", "requestParameters":{ "description":"", "name":"cttest2", "state":"ENABLED", "eventPattern":"{\"source\":[\"aws.ec2\"],\"detail-type\":[\"EC2 Instance State-change Notification\"]}", "scheduleExpression":"" }, "responseElements":{ "ruleArn":"arn:aws:events:us-east-1:123456789012:rule/cttest2" }, "requestID":"e9caf887-8d88-11e5-a331-3332aa445952", "eventID":"49d14f36-6450-44a5-a501-b0fdcdfaeb98", "eventType":"AwsApiCall", "apiVersion":"2015-10-07", "recipientAccountId":"123456789012" } 70 Amazon CloudWatch Events ユーザーガイド ルールはトリガーされたが、Lambda 関数が呼び出されなかった CloudWatch イベント のトラブル シューティング このセクションの手順を使用して、CloudWatch イベント のトラブルシューティングを行えます。 トピック • ルールはトリガーされたが、Lambda 関数が呼び出されなかった (p. 71) • ルールを修正/作成したが、テストイベントと一致しなかった (p. 73) • ScheduleExpression に指定されている時間にルールが自己トリガーされなかった (p. 73) • 予期した時間にルールがトリガーされなかった (p. 73) • ルールは IAM API 呼び出しに一致するが、トリガーされなかった (p. 74) • ルールがトリガーされるときに、ルールに関連付けられている IAM ロールが無視されるため、 ルールが機能しない (p. 74) • リソースに一致することを条件とする EventPattern を使用してルールを作成したが、このルール に一致するいずれのイベントも表示されない (p. 74) • ターゲットへのイベントの配信で遅延が発生した (p. 74) • 2 つの同一のイベントに応じてルールが複数回トリガーされました。CloudWatch イベント で、 ルールのトリガーまたはターゲットへのイベントの提供で何が保証されますか。 (p. 75) • ルールがトリガーされているが、Amazon SNS トピックにいずれのメッセージもパブリッシュさ れません。 (p. 75) • Amazon SNS トピックに関連付けられたルールを削除した後でも、Amazon SNS トピックに CloudWatch イベント のアクセス権限がある (p. 76) • CloudWatch イベント で使用できる IAM 条件キー (p. 77) • CloudWatch イベント ルールが壊れているときに通知するアラームを作成する方法 (p. 77) ルールはトリガーされたが、Lambda 関数が呼び 出されなかった Lambda 関数に対する適切なアクセス権限が設定されていることを確認します。AWS CLI を使用して 以下のコマンドを実行します(関数名を実際の関数に置き換え、関数がある AWS リージョンを使用 します)。 71 Amazon CloudWatch Events ユーザーガイド ルールはトリガーされたが、Lambda 関数が呼び出されなかった aws lambda get-policy --function-name MyFunction --region us-east-1 以下のような出力が表示されます。 { "Policy": "{\"Version\":\"2012-10-17\", \"Statement\":[ {\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:events:useast-1:123456789012:rule/MyRule\"}}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:useast-1:123456789012:function:MyFunction\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Sid\":\"MyId\"} ], \"Id\":\"default\"}" } 以下のように表示された場合: A client error (ResourceNotFoundException) occurred when calling the GetPolicy operation: The resource you requested does not exist. または、出力が表示されたが、信頼できるエンティティとして events.amazonaws.com がポリシーに ない場合は、以下のコマンドを実行します。 aws lambda add-permission \ --function-name MyFunction \ --statement-id MyId \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule Note ポリシーが正しくない場合は、そのポリシーを削除してからルールに追加し直すこと で、CloudWatch イベント コンソールでルールを編集することもできます。CloudWatch イベ ント コンソールで、ターゲットに対する適切なアクセス権限を設定します。 特定の Lambda エイリアスまたはバージョンを使用する場合は、aws lambda get-policy および aws lambda add-permission コマンドに --qualifier パラメーターを追加する 必要があります。 aws lambda add-permission \ --function-name MyFunction \ --statement-id MyId \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule --qualifier alias or version 72 Amazon CloudWatch Events ユーザーガイド ルールを修正/作成したが、テ ストイベントと一致しなかった ルールを修正/作成したが、テストイベントと一致 しなかった ルールまたはそのターゲットを変更すると、受信イベントはすぐに、新しいか更新されたルールへの マッチングを開始/停止しないことがあります。変更を有効になるまで、しばらくお待ちください。し ばらく待っても、イベントがまだ一致しない場合は、CloudWatch でルールのいくつかの Events メト リクス(TriggeredRules、Invocations、FailedInvocations など)を確認して、さらなるデ バッグを行うことができます。 また、TestEventPattern アクションを使用して、テストイベントでルールのイベントパターンを テストすることで、ルールのイベントパターンが正しく設定されていることを確認できます。詳細に ついては、『Amazon CloudWatch Events API リファレンス』の「TestEventPattern」を参照してくだ さい。 ScheduleExpression に指定されている時間に ルールが自己トリガーされなかった ScheduleExpressions は UTC です。UTC タイムゾーンで自己トリガーするルールのスケジュールが 設定されていることを確認します。ScheduleExpression が正しい場合は、「ルールを修正/作成した が、テストイベントと一致しなかった (p. 73)」の手順に従います。 予期した時間にルールがトリガーされなかった CloudWatch イベント では、期間ごとに実行するルールを作成するときに、正確な開始時間の設定が サポートされません。実行時間へのカウントダウンは、ルールを作成するとすぐに開始されます。 Cron 式を使用して、指定した時間にターゲットを起動できます。たとえば、Cron 式を使用して、4 時間おきのちょうど 0 分にトリガーされるルールを作成することができます。CloudWatch コンソー ルでは Cron 式 0 0/4 * * ? * を使用し、AWS CLI では Cron 式 cron(0 0/4 * * ? *) を使用 できます。たとえば、AWS CLI を使用して、4 時間ごとにトリガーされる TestRule という名前の ルールを作成するには、コマンドプロンプトで次のように入力します。 aws events put-rule --name TestRule --schedule-expression 'cron(0 0/4 * * ? *)' 0/5 * * * ? * Cron 式を使用して、5 分ごとにルールをトリガーできます。以下に例を示します。 aws events put-rule --name TestRule --schedule-expression 'cron(0/5 * * * ? *)' CloudWatch イベント は、スケジュール式で第 2 レベルの精度を提供しません。Cron 式を使用した 最小の解決は分です。CloudWatch イベント とターゲットサービスが持つ分散性の特質により、スケ ジュールされたルールがトリガーされてから、ターゲットサービスがターゲットリソースの実行を優 先するまでの遅延は、数秒となる可能性があります。スケジュールされたルールは、その分のうちに トリガーされますが、正確に 0 秒にトリガーされません。 73 Amazon CloudWatch Events ユーザーガイド ルールは IAM API 呼び出しに一 致するが、トリガーされなかった ルールは IAM API 呼び出しに一致するが、トリ ガーされなかった IAM サービスは 米国東部 (バージニア北部) リージョン でのみ使用できるため、IAM からの AWS API 呼び出しイベントはそのリージョンでのみ使用できます。詳細については、「CloudWatch イベント 用のイベントタイプ (p. 31)」を参照してください。 ルールがトリガーされるときに、ルールに関連 付けられている IAM ロールが無視されるため、 ルールが機能しない ルールの IAM ロールは、Amazon Kinesis ストリームにのみイベントを関連付けるために使用しま す。Lambda 関数と Amazon SNS トピックの場合、リソースベースのアクセス権限を付与する必要が あります。 リージョンの AWS STS エンドポイントが有効になっていることを確認します。CloudWatch イベン ト は、指定された IAM ロールを引き受けるときに、リージョンの AWS STS エンドポイントに問い 合わせます。詳細については、『IAM ユーザーガイド』の「AWS リージョンでの AWS STS のアク ティブ化と非アクティブ化」を参照してください。 リソースに一致することを条件とする EventPattern を使用してルールを作成したが、こ のルールに一致するいずれのイベントも表示され ない AWS のほとんどのサービスでは、Amazon リソースネーム(ARN)内の : または / は同じ文字として 扱われます。ただし、CloudWatch イベント では、イベントパターンとルールで完全一致が使用され ます。イベントパターンの作成時に正しい ARN 文字を使用して、一致させるイベント内の ARN 構文 とそれらの文字が一致するようにしてください。 また、必ずしもすべてのイベントでリソースフィールドが入力されているわけではありません (CloudTrail からの AWS API Call イベントなど)。 ターゲットへのイベントの配信で遅延が発生した Amazon CloudWatch Events は、最大 24 時間にわたりターゲットにイベントの配信を試みます。最 初の試行は、イベントがイベントストリームに到達するとすぐに行われます。ただし、ターゲット サービスに問題があるか、アカウントが調整されている場合、CloudWatch イベント は自動的に別 の配信を再スケジュールします。イベントの到着から 24 時間が経過すると、それ以上の試行はスケ ジュールされず、FailedInvocations メトリクスが Amazon CloudWatch で発行されます。 74 Amazon CloudWatch Events ユーザーガイド 2 つの同一のイベントに応じてルールが複数 回トリガーされました。CloudWatch イベン ト で、ルールのトリガーまたはターゲット へのイベントの提供で何が保証されますか。 2 つの同一のイベントに応じてルールが複数回ト リガーされました。CloudWatch イベント で、 ルールのトリガーまたはターゲットへのイベント の提供で何が保証されますか。 Amazon CloudWatch Events は、イベントに対して少なくとも 1 回、ルールのトリガーを保証しま す。まれに、特定のイベントに対して同じルールを複数回トリガーしたり、特定のトリガーされた ルールに対して同じターゲットを複数回起動したりできる場合があります。 ルールがトリガーされているが、Amazon SNS ト ピックにいずれのメッセージもパブリッシュされ ません。 Amazon SNS トピックに対する適切なアクセス権限が設定されていることを確認します。AWS CLI を使用して以下のコマンドを実行します(トピック ARN を実際のトピックに置き換え、トピックが ある AWS リージョンを使用します)。 aws sns get-topic-attributes --region us-east-1 --topic-arn "arn:aws:sns:useast-1:123456789012:MyTopic" ポリシーには以下のような属性があります。 "{\"Version\":\"2012-10-17\", \"Id\":\"__default_policy_ID\", \"Statement\":[{\"Sid\":\"__default_statement_ID\", \"Effect\":\"Allow\", \"Principal\":{\"AWS\":\"*\"}, \"Action\":[\"SNS:Subscribe\", \"SNS:ListSubscriptionsByTopic\", \"SNS:DeleteTopic\", \"SNS:GetTopicAttributes\", \"SNS:Publish\", \"SNS:RemovePermission\", \"SNS:AddPermission\", \"SNS:Receive\", \"SNS:SetTopicAttributes\"], \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\", \"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"123456789012\"}}}, {\"Sid\":\"Allow_Publish_Events\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Action\":\"sns:Publish\", \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\"}]}" 以下のようなポリシーがある場合は、デフォルトのポリシーのみが設定されています。 "{\"Version\":\"2008-10-17\", 75 Amazon CloudWatch Events ユーザーガイド Amazon SNS トピックに関連付けられたルー ルを削除した後でも、Amazon SNS トピック に CloudWatch イベント のアクセス権限がある \"Id\":\"__default_policy_ID\", \"Statement\":[{\"Sid\":\"__default_statement_ID\", \"Effect\":\"Allow\", \"Principal\":{\"AWS\":\"*\"}, \"Action\":[\"SNS:Subscribe\", \"SNS:ListSubscriptionsByTopic\", \"SNS:DeleteTopic\", \"SNS:GetTopicAttributes\", \"SNS:Publish\", \"SNS:RemovePermission\", \"SNS:AddPermission\", \"SNS:Receive\", \"SNS:SetTopicAttributes\"], \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\", \"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"123456789012\"}}}]}" ポリシーに events.amazonaws.com に対するパブリッシュアクセス権限がない場合は、AWS CLI を使用してトピックポリシー属性を設定します。 現在のポリシーをコピーし、ステートメントのリストに以下のステートメントを追加します。 {\"Sid\":\"Allow_Publish_Events\", \"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Action\":\"sns:Publish\", \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\"} 新しいポリシーは上記のようになります。 AWS CLI で以下のようにトピック属性を設定します。 aws sns set-topic-attributes --region us-east-1 --topic-arn "arn:aws:sns:useast-1:123456789012:MyTopic" --attribute-name Policy --attributevalue NEW_POLICY_STRING Note ポリシーが正しくない場合は、そのポリシーを削除してからルールに追加し直すこと で、CloudWatch イベント コンソールでルールを編集することもできます。CloudWatch イベ ント コンソールで、ターゲットに対する適切なアクセス権限を設定します。 Amazon SNS トピックに関連付けられたルール を削除した後でも、Amazon SNS トピックに CloudWatch イベント のアクセス権限がある ターゲットとして Amazon SNS でルールを作成すると、CloudWatch イベント はユーザーに代 わって Amazon SNS トピックにアクセス権限を追加します。作成後すぐにルールを削除する と、CloudWatch イベント は Amazon SNS トピックからアクセス権限を削除できなくなる場合が あります。その場合は、aws sns set-topic-attributes コマンドを使用してトピックからアクセス権 限を削除できます。イベントを送信するためのリソースベースのアクセス権限の詳細については、 「CloudWatch イベント のリソースベースのポリシーを使用する (p. 53)」を参照してください。 76 Amazon CloudWatch Events ユーザーガイド CloudWatch イベント で使用できる IAM 条件キー CloudWatch イベント で使用できる IAM 条件 キー Amazon CloudWatch Events では、AWS 全体の条件キー(『IAM ユーザーガイド』の「使用可能な キー」を参照)に加え、以下のサービス固有の条件キーがサポートされています。詳細については、 「詳細に設定されたアクセスコントロールのための IAM ポリシー条件の使用 (p. 58)」を参照してくだ さい。 CloudWatch イベント ルールが壊れているときに 通知するアラームを作成する方法 以下のアラームを使用して、CloudWatch イベント ルールが壊れているときに通知されるようにでき ます。 ルールが壊れているときに警告するアラームを作成するには 1. 2. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。 [Create Alarm] をクリックし、[CloudWatch Metrics by Category] ペインで [Events Metrics] を選 択します。 3. [Create Alarm] ダイアログボックスのメトリクスのリストで、[FailedInvocations] チェックボック スをオンにします。 4. 5. グラフの上で、[Statistic] ドロップダウンリストから [Sum] を選択します。 [”Period”]ドロップダウンリストから、期間 (5 minutes など) を選択します。 6. [Next] をクリックし、[Alarm Threshold] の [Name] フィールドに一意のアラーム名 (「myFailedRules」など)を入力します。 7. [Description] フィールドに、アラームの説明として、たとえば「Rules are not delivering events to targets」と入力します。 8. 9. [is] ドロップダウンリストで [>=] を選択します。 [is] ドロップダウンリストの横にあるフィールドに「1」と入力し、[for] フィールドに「10」と入 力します。 10. [Actions] の [Whenever this alarm] ドロップダウンリストで、[State is ALARM] を選択します。 11. [Send notification to] ドロップダウンリストにある既存の Amazon SNS トピックを選択するか、 新しいトピックを作成します。 12. 新しい Amazon SNS トピックを作成するには、[New list] を選択します。 13. [Send notification to] フィールドに、新しい Amazon SNS トピックの名前(例: 「myFailedRules」)を入力し、[Email list] フィールドに、アラームが ALARM 状態に変化したと きに通知を受ける E メールアドレスをカンマで区切って入力します。 14. ナビゲーションペインで、[Create Alarm] を選択すると、アラームの作成処理が終了します。 77 Amazon CloudWatch Events ユーザーガイド ドキュメント履歴 以下の表は「Amazon CloudWatch Events ユーザーガイド」の重要な変更点をまとめたものです。 変更 説明 リリース日 AWS CodeDeploy イベント AWS CodeDeploy 用のイベントのサポートが追加 されました。 AWS CodeDeploy デプロイグループ に属するデプロイの状態またはインスタンスの状態 の変更が検出された場合に、CloudWatch イベント を使用して 1 つまたは複数のアクションを開始で きるようになりました。 詳細については、「AWS CodeDeploy イベント (p. 38)」を参照してくださ い。 2016 年 9 月 9 日 1 分単位で予定さ れたイベント 1 分単位で予定されたイベントのサポートの追加 詳細については、「cron 式 (p. 20)」および「rate 式 (p. 22)」を参照してください。 2016 年 4 月 19 日 ターゲットとして Amazon Simple Queue Service キュー Amazon CloudWatch Events のターゲットとし 2016 年 3 月 30 日 て、Amazon Simple Queue Service キューのサポー トを追加しました。詳細については、「Amazon CloudWatch Events とは? (p. 1)」を参照してくださ い。 新しいサービス システムイベントの表示に使用できる CloudWatch イベント の初回リリース。 詳細については、 「Amazon CloudWatch Events とは? (p. 1)」を参照 してください。 78 2016 年 1 月 14 日 Amazon CloudWatch Events ユーザーガイド AWS の用語集 最新の AWS の用語については、『AWS General Reference』の「AWS の用語集」を参照してくださ い。 79
© Copyright 2024 Paperzz