Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
入力トランスフォーマーを使用して、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 トピックにメッセージを発行する方法を教えてください。」を参照してください。
- 言語
- 日本語
