Amazon CloudWatch Events へのイベントの送信 - AWS SDK for JavaScript

AWS SDK for JavaScript v2 のサポート終了が間近に迫っていることが発表されています。AWS SDK for JavaScript v3 に移行することをお勧めします。日付、その他の詳細、移行方法については、リンク先の発表内容を参照してください。

Amazon CloudWatch Events へのイベントの送信

JavaScript code example that applies to Node.js execution

この Node.js コード例は以下を示しています。

  • イベントをトリガーするために使用するルールを作成および更新する方法。

  • イベントに対応するための 1 つ以上のターゲットを定義する方法。

  • 処理用ターゲットに一致するイベントを送信する方法。

シナリオ

CloudWatch Events では、Amazon Web Services リソースの変更を記述した、システムイベントのほぼリアルタイムのストリーミングをさまざまなターゲットに配信します。簡単なルールを使用して、一致したイベントを 1 つ以上のターゲット関数またはストリームに振り分けることができます。

この例では、一連の Node.js モジュールを使用して CloudWatch Events にイベントを送信しています。Node.js モジュールは、CloudWatchEvents クライアントクラスの以下のメソッドを使用してインスタンスを管理するために SDK for JavaScript を使用します。

CloudWatch Events の詳細については、Amazon CloudWatch Events ユーザーガイドPutEvents を使用したイベントの追加を参照してください。

前提条件タスク

この例をセットアップして実行するには、まず次のタスクを完了する必要があります。

IAM ロールを作成するときに、以下のロールポリシーを使用します。

{ "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" } ] }

IAM ロールを作成するときに、以下の信頼関係を使用します。

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

スケジュールされたルールを作成する

cwe_putrule.js というファイル名で Node.js モジュールを作成します。前に示したように SDK を必ず設定します。CloudWatch Events にアクセスするには、AWS.CloudWatchEvents サービスオブジェクトを作成します。新しいスケジュールされたルールを指定するために必要な、次のようなパラメータを含む JSON オブジェクトを作成します。

  • ルールの名前

  • 以前に作成した IAM ロールの ARN

  • 5 分ごとにルールのトリガーをスケジュールする式

putRule メソッドを呼び出してルールを作成します。コールバックは、新しいルールまたは更新されたルールの ARN を返します。

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the region AWS.config.update({ region: "REGION" }); // Create CloudWatchEvents service object var cwevents = new AWS.CloudWatchEvents({ apiVersion: "2015-10-07" }); var params = { Name: "DEMO_EVENT", RoleArn: "IAM_ROLE_ARN", ScheduleExpression: "rate(5 minutes)", State: "ENABLED", }; cwevents.putRule(params, function (err, data) { if (err) { console.log("Error", err); } else { console.log("Success", data.RuleArn); } });

この例を実行するには、コマンドラインに次のように入力します。

node cwe_putrule.js

このサンプルコードは、このGitHubにあります。

AWS Lambda 関数のターゲットの追加

cwe_puttargets.js というファイル名で Node.js モジュールを作成します。前に示したように SDK を必ず設定します。CloudWatch Events にアクセスするには、AWS.CloudWatchEvents サービスオブジェクトを作成します。作成した Lambda 関数の ARN を含めて、ターゲットをアタッチするルールを指定するために必要なパラメータを含む JSON オブジェクトを作成します。AWS.CloudWatchEvents サービスオブジェクトの putTargets メソッドを呼び出します。

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the region AWS.config.update({ region: "REGION" }); // Create CloudWatchEvents service object var cwevents = new AWS.CloudWatchEvents({ apiVersion: "2015-10-07" }); var params = { Rule: "DEMO_EVENT", Targets: [ { Arn: "LAMBDA_FUNCTION_ARN", Id: "myCloudWatchEventsTarget", }, ], }; cwevents.putTargets(params, function (err, data) { if (err) { console.log("Error", err); } else { console.log("Success", data); } });

この例を実行するには、コマンドラインに次のように入力します。

node cwe_puttargets.js

このサンプルコードは、このGitHubにあります。

イベントを送信する

cwe_putevents.js というファイル名で Node.js モジュールを作成します。前に示したように SDK を必ず設定します。CloudWatch Events にアクセスするには、AWS.CloudWatchEvents サービスオブジェクトを作成します。イベントを送信するのに必要なパラメータを含む JSON オブジェクトを作成します。イベントごとに、イベントのソース、イベントの影響を受けるリソースの ARN、およびイベントの詳細を含めます。AWS.CloudWatchEvents サービスオブジェクトの putEvents メソッドを呼び出します。

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the region AWS.config.update({ region: "REGION" }); // Create CloudWatchEvents service object var cwevents = new AWS.CloudWatchEvents({ apiVersion: "2015-10-07" }); var params = { Entries: [ { Detail: '{ "key1": "value1", "key2": "value2" }', DetailType: "appRequestSubmitted", Resources: ["RESOURCE_ARN"], Source: "com.company.app", }, ], }; cwevents.putEvents(params, function (err, data) { if (err) { console.log("Error", err); } else { console.log("Success", data.Entries); } });

この例を実行するには、コマンドラインに次のように入力します。

node cwe_putevents.js

このサンプルコードは、このGitHubにあります。