入力トランスフォーマーを使用して、Amazon SNS 通知を人間が判読できるように EventBridge ルールを作成する方法を教えてください。
Amazon EventBridge ルールを作成して、人間が判別できるカスタムの Amazon Simple Notification Service (Amazon SNS) 通知を開始したいと考えています。
簡単な説明
Amazon SNS イベント通知を人間が判読できるようにするには、EventBridge の入力トランスフォーマーを使用します。入力トランスフォーマーを使用すると、EventBridge ルールのターゲットに送信される前に、イベントのテキストをカスタマイズできます。完全なチュートリアルについては、「チュートリアル: Eventbridge がイベントターゲットに渡すものを Input Transformer を使用してカスタマイズする」を参照してください。
例えば入力トランスフォーマーから、カスタムイベントのテキストを受信するターゲットとして SNS トピックを設定できます。AWS CloudTrail がキャプチャするセキュリティグループ関連の API 呼び出しと一致する EventBridge ルールを作成することもできます。このルールは、関連する API 呼び出しと一致するイベントパターンを使用して設定されます。
以下の解決策には、独自の EventBridge ルールを作成し、Amazon SNS 通知を人間が判読できるようにするために使用できる 2 つのサンプルイベントが含まれています。
解決策
Amazon EC2 状態変更のサンプルイベント
次の例では、入力トランスフォーマーからカスタムイベントのテキストを受信するターゲットとして SNS トピックを設定します。この例では、イベントは Amazon Elastic Compute Cloud (Amazon EC2) の状態変更です。
以下は、JSON 形式で EventBridge イベントバスに公開されるサンプルイベントです。
{ "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" } }
入力トランスフォーマーには次の 2 つのセクションがあります。
- 入力パス: JSON パスを使用して元のイベントソースの値を参照する変数を定義する場所。
- テンプレート: ターゲットに渡す情報のテンプレート。
入力パス
入力パスを作成するには、「入力変換の例」を参照してください。この例では、次の入力パスを使用します。
{ "timestamp": "$.time", "instance": "$.detail.instance-id", "state": "$.detail.state" }
テンプレート
この例では、次のテンプレートを使用します。
例 1:
"Instance example-instance is in example-state state"
例 2:
"At example-timestamp, Instance example-instance changed its state to example-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 を設定するには、次の手順を実行します。
注: これらの手順は、「イベントに反応するルールを作成する」の手順に従っています。また、入力トランスフォーマーを設定する具体的な手順についても説明されています。
1. Amazon EC2 状態変更イベントの EventBridge ルールを定義します。
2. イベントパターンを構築します。作成方法セクションの [メソッド] で、[カスタムパターン (JSON エディタ)] を選択します。
3. [イベントパターン] には、Amazon EC2 状態変更イベント用に次の JSON の例を入力します。
{ "source": ["aws.ec2"], "detail-type": ["EC2 Instance State-change Notification"] }
4. [次へ] をクリックします。
5. [ターゲットタイプ] には、[AWS サービス] を選択します。
6. [ターゲットを選択] から [SNS トピック] を選択します。その後、ドロップダウンリストからトピックを選択します。
7. [追加の設定] の [ターゲット入力を設定] ドロップダウンリストで、[入力トランスフォーマー] を選択します。次に、[入力トランスフォーマーを設定] を選択します。
8. [ターゲット入力トランスフォーマー] セクションの [入力パス] に、次の JSON をコピーして貼り付けます。
{ "timestamp": "$.time", "instance": "$.detail.instance-id", "state": "$.detail.state" }
9. [入力テンプレート] に、次の文字列テンプレートをコピーして貼り付けます。
"Instance example-instance is in example-state state" "At example-timestamp, Instance example-instance changed its state to example-state. "
10. [確認]、[次へ] の順に選択します。
11. (オプション) ルールにタグを追加し、**[次へ] **を選択します。
12. ルールの詳細を確認して、[ルールを作成] をクリックします。
Amazon EC2 セキュリティグループ API 呼び出しのサンプルイベント
次のサンプルイベントでは、仮想プライベートクラウド (VPC) の CreateSecurityGroup を使用してセキュリティグループを作成します。AWS CloudTrail はイベントをキャプチャし、イベントは次の JSON 形式で Amazon 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 形式で作成します。
1. セキュリティグループ関連の 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" ] } }
2. [ターゲットタイプ] には、[AWS サービス] を選択します。
3. [ターゲットを選択] から [SNS トピック] を選択します。その後、ドロップダウンリストからトピックを選択します。
4. [追加の設定] の [ターゲット入力を設定] ドロップダウンリストで、[入力トランスフォーマー] を選択します。次に、[入力トランスフォーマーを設定] を選択します。
5. [ターゲット入力トランスフォーマー] セクションの [入力パス] に、次の 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" }
6. [入力テンプレート] に、次の文字列テンプレートを貼り付けます。入力パスからの値のプレースホルダーを含む文字列を含めてください。この文字列は、人間が判読できる形式の通知テキストです。ユースケースに合わせて次のサンプルの入力テンプレートを変更してください。
"User example-user has executed API call example-action from source IP example-sourceip on security group example-sgid/example-sgname that belongs to vpc example-vpcid in region example-region at time(UTC) example-time. The Request ID is example-reqid."
7. [確認] を選択し、その後 [次へ] を選択します。
8. (オプション) ルールにタグを追加し、**[次へ] **を選択します。
9. ルールの詳細を確認して、[ルールを作成] をクリックします。
トラブルシューティング
改行を含むテンプレートを保存したときに Invalid InputTemplate エラーが表示される場合は、各行を二重引用符で閉じます。次の例を参照してください。
"example-type example-arn has executed action API example-action on Security Group example-sgid located in AWS region example-region at example-time (UTC)." "Event Details:" "Request ID: example-requestid" "Event ID: example-eventid" "Event Source: example-eventsource" "Event Type: example-eventtype"
ルールが実行されてもターゲットを呼び出せない場合は、EventBridge のデッドレターキューを設定して、入力トランスフォーマーに関連するエラーを受信するようにします。
EventBridge は、入力パスマップで最大 100 の変数をサポートしています。10 個を超える変数を抽出するには、イベント全体を AWS Lambda 関数に渡します。この関数を記述して変数を解析し、発行に必要な形式でメッセージ本文を作成します。その後、Amazon SNS に発行するために必要な形式でメッセージ本文を作成します。詳細については、「Lambda 関数を使用して Amazon SNS トピックにメッセージを発行する方法を教えてください。」を参照してください。

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