Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
入力トランスフォーマーを使用して、Amazon SNS 通知を人間が判読できるように EventBridge ルールを作成する方法を教えてください。
Amazon EventBridge ルールを作成して、人間が判別できるカスタムの Amazon Simple Notification Service (Amazon SNS) 通知を開始したいです。
簡単な説明
Amazon SNS イベント通知を人間が判読できるようにするには、EventBridge で入力トランスフォーマーを使用します。入力トランスフォーマーを使用すると、イベントのテキストが EventBridge ルールのターゲットに送信される前にカスタマイズできます。詳細については、「チュートリアル: 入力トランスフォーマーを使用して EventBridge のイベントを変換する」を参照してください。
入力トランスフォーマーからカスタムイベントテキストを受信するためのターゲットとして、SNS トピックを設定することができます。AWS CloudTrail がキャプチャするセキュリティグループ関連の API コールと一致する EventBridge ルールを作成することもできます。このルールは、関連する API 呼び出しと一致するイベントパターンを使用して設定されます。
以下の解決策には、独自の EventBridge ルールを作成し、Amazon SNS 通知を人間が判読できるようにするために使用できる 2 つのサンプルイベントが含まれています。
解決策
Amazon EC2 状態変更に関するイベントの例
次の例では、入力トランスフォーマーからカスタムイベントのテキストを受信するターゲットとして SNS トピックを設定します。このイベントは、EventBridge イベントバスに JSON 形式で発行される Amazon Elastic Compute Cloud (Amazon EC2) の状態変更です。
{ "version": "0", "id": "2ad63080-2526-d42c-4983-123456789", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "0123456789", "time": "2023-05-17T16:30:32Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:0123456789:instance/i-12345abcdefg" ], "detail": { "instance-id": "i-12345abcdefg", "state": "running" } }
入力トランスフォーマーには次のセクションがあります。
- 入力パス: JSON パスを使用して元のイベントソースの値を参照する変数を定義する場所。
- テンプレート: ターゲットに渡す情報のテンプレート。
入力パス
入力パスを作成するには、「入力変換の例」を参照してください。この例では、次の入力パスを使用します。
{ "timestamp": "$.time", "instance": "$.detail.instance-id", "state": "$.detail.state" }
テンプレート
この例では、次のテンプレートを使用します。
例 1:
"Instance <instance> is in <state> state"
例 2:
"At <timestamp>, Instance <instance> changed its state to <state>. "
上記のテンプレート例では、次の形式でターゲットにメッセージを送信します。
例 1:
"Instance i-12345abcdefg is in running state"
例 2:
"At 2023-05-17T16:30:32Z, Instance i-12345abcdefg changed its state to running. "
入力トランスフォーマーを使用するように EventBridge を設定する
SNS トピックにカスタムメッセージを送信するように EventBridge を設定するには、次の手順を実行します。
注: これらの手順は、「Amazon EventBridge のイベントに反応するルールを作成する」に記載された入力トランスフォーマーの設定手順に従っています。
-
Amazon EC2 状態変更イベント用の EventBridge ルールを定義します。
-
イベントパターンをビルドします。作成方法セクションの [メソッド] で、[カスタムパターン (JSON エディタ)] を選択します。
-
[イベントパターン] で、Amazon EC2 状態変更イベント用に次の JSON の例を入力します。
{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ] }
-
[次へ] を選択します。
-
[ターゲットタイプ] で [AWS サービス] を選択します。
-
[ターゲットを選択] で [SNS トピック] を選択します。次に、ドロップダウンリストからトピックを選択します。
-
[その他の設定] の [ターゲット入力を設定] ドロップダウンリストで、[入力トランスフォーマー] を選択します。次に、[入力トランスフォーマーを設定] を選択します。
-
[ターゲット入力トランスフォーマー] セクションの [入力パス] に、次の JSON をコピーして貼り付けます。
{ "timestamp": "$.time", "instance": "$.detail.instance-id", "state": "$.detail.state" }
-
[入力テンプレート] に、次の文字列テンプレートをコピーして貼り付けます。
"Instance <instance> is in <state> state" "At <timestamp>, Instance <instance> changed its state to <state>. "
-
[確認]、**[次へ]**の順に選択します。
-
(オプション) ルールにタグを追加し、**[次へ] **を選択します。
-
ルールの詳細を確認し、**[ルールを作成]**を選択します。
Amazon EC2 セキュリティグループ API コールのイベント例
次のイベント例では、仮想プライベートクラウド (VPC) の CreateSecurityGroup を使用してセキュリティグループを作成します。CloudTrail がイベントをキャプチャし、そのイベントは次の JSON 形式で CloudWatch に発行されます。
{ "version": "0", "id": "41dff147-cfbc-492a-9a98-9dd00d082417", "detail-type": "AWS API Call via CloudTrail", "source": "aws.ec2", "account": "123456789012", "time": "2017-07-14T16:36:23Z", "region": "us-east-1", "resources": [], "detail": { "eventVersion": "1.05", "userIdentity": { "type": "Root", "principalId": "123456789012", "arn": "arn:aws:iam::123456789012:root", "accountId": "123456789012", "accessKeyId": "ASIAIRP4G1234567891Q", "userName": "iamuser", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2017-07-14T16:27:38Z" } } }, "eventTime": "2017-07-14T16:36:23Z", "eventSource": "ec2.amazonaws.com", "eventName": "CreateSecurityGroup", "awsRegion": "us-east-1", "sourceIPAddress": "72.21.196.64", "userAgent": "console.ec2.amazonaws.com", "requestParameters": { "groupName": "test", "groupDescription": "test", "vpcId": "vpc-54a4232d" }, "responseElements": { "_return": true, "groupId": "sg-82d531f3" }, "requestID": "a4609e55-69ac-4a2d-8057-843dc8b4658b", "eventID": "7774b898-59c1-48a5-9c41-af1bcaa04612", "eventType": "AwsApiCall" } }
人間が判読できるカスタム通知を作成する方法の例
次の例を使用して、人間が判別できる形式のカスタム通知を EventBridge から JSON 形式で作成します。
-
セキュリティグループに関連する API コール用の EventBridge ルールを作成します。[イベントパターン] で [カスタムイベントパターンの構築] を選択します。ユースケースに合わせてサンプルイベントパターンを変更してください。通知の例は CreateSecurityGroup 用であることに注意してください。ただし、次のサンプルイベントパターンには、セキュリティグループに関連する API コールアクションがすべて含まれています。
{ "source": [ "aws.ec2" ], "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "eventSource": [ "ec2.amazonaws.com" ], "eventName": [ "CreateSecurityGroup", "AuthorizeSecurityGroupEgress", "AuthorizeSecurityGroupIngress", "DeleteSecurityGroup", "RevokeSecurityGroupEgress", "RevokeSecurityGroupIngress", "DescribeStaleSecurityGroups", "DescribeSecurityGroups", "DescribeSecurityGroupReferences" ] } }
-
[ターゲットタイプ] で [AWS サービス] を選択します。
-
[ターゲットを選択] で [SNS トピック] を選択します。次に、ドロップダウンリストからトピックを選択します。
-
[その他の設定] の [ターゲット入力を設定] ドロップダウンリストで、[入力トランスフォーマー] を選択します。次に、[入力トランスフォーマーを設定] を選択します。
-
[ターゲット入力トランスフォーマー] セクションの [入力パス] に、次の JSON を貼り付けます。通知に使用するキーと値のペアをすべて含めてください。次の例では、ユースケースに合わせて入力パスを変更してください。
{ "sgname": "$.detail.requestParameters.groupName", "sourceip": "$.detail.sourceIPAddress", "vpcid": "$.detail.requestParameters.vpcId", "action": "$.detail.eventName", "sgid": "$.detail.responseElements.groupId", "time": "$.detail.eventTime", "region": "$.detail.awsRegion", "user": "$.detail.userIdentity.userName", "reqid": "$.detail.requestID" }
-
[入力テンプレート] に、次の文字列テンプレートを貼り付けます。入力パスの値のプレースホルダーを含む文字列を含めてください。この文字列は、人間が判読できる形式の通知テキストです。ユースケースに合わせて次のサンプルの入力テンプレートを変更してください。
"User <user> has executed API call <action> from source IP <sourceip> on security group <sgid>/<sgname> that belongs to vpc <vpcid> in region <region> at time(UTC) <time>. The Request ID is <reqid>."
-
[確認]、**[次へ]**の順に選択します。
-
(オプション) ルールにタグを追加し、**[次へ] **を選択します。
-
ルールの詳細を確認し、**[ルールを作成]**を選択します。
トラブルシューティング
改行を含むテンプレートを保存したときに Invalid InputTemplate エラーが表示される場合は、各行を二重引用符で閉じます。次の例を参照してください。
"<type> <arn> has executed action API <action> on Security Group <sgid> located in AWS region <region> at <time> (UTC)." "Request ID: <requestid>" "Event ID: <eventid>" "Event Source: <eventsource>" "Event Type: <eventtype>"
ルールが実行されてもターゲットを呼び出せない場合は、EventBridge のデッドレターキューを設定して、入力トランスフォーマーに関連するエラーを受信するようにします。
EventBridge は、入力パスマップで最大 100 の変数をサポートしています。10 個を超える変数を抽出するには、イベント全体を AWS Lambda 関数に渡します。この関数を記述して変数を解析し、発行に必要な形式でメッセージ本文を作成します。その後、Amazon SNS に発行するために必要な形式でメッセージ本文を作成します。詳細については、「Lambda 関数を使用して Amazon SNS トピックにメッセージを発行する方法を教えてください。」を参照してください。

関連するコンテンツ
- 質問済み 2年前lg...
- 質問済み 4ヶ月前lg...
- AWS公式更新しました 4ヶ月前