入力トランスフォーマーを使用して、Amazon SNS 通知を人間が判読できるように EventBridge ルールを作成する方法を教えてください。

所要時間3分
0

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 トピックにメッセージを発行する方法を教えてください。」を参照してください。

AWS公式
AWS公式更新しました 6ヶ月前
コメントはありません

関連するコンテンツ