EventBridge ルール用のカスタムイベントパターンを作成するにはどうすればよいですか?

最終更新日: 2022 年 1 月 26 日

Amazon EventBridge ルールを使用して、AWS のサービスの特定のイベントをキャプチャしたいと考えています。しかし、イベントに一致するカスタムイベントパターンを作成できません。カスタム EventBridge イベントパターンを作成するにはどうすればいいですか?

解決方法

注: AWS Command Line Interface (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

イベントは、事前定義された JSON 形式で AWS のサービスによって生成され、Amazon EventBridge に送信されます。イベントパターンを使用して受信イベントをフィルタリングし、ターゲットをトリガーするルールを作成できます。

受信イベントの JSON 形式を確認する

受信イベントの JSON 形式の確認方法は 3 つあります。

1.    このイベント例のリストを参照してください。

2.    Amazon EventsBridge コンソールに統合されたサンプルイベントを使用します。サンプルイベントを使用するには、次の操作を実行します。

[Event matching pattern] (イベント一致パターン) で、[Pre-defined pattern by service] (サービスごとの事前定義パターン) を選択します。ドロップダウンリストから [Service provider] (サービスプロバイダー) を選択します。ドロップダウンリストから [Service name] (サービス名) を選択します。ドロップダウンリストから [Event type] (イベントタイプ) を選択します。イベントが [Any resource] (任意のリソース) または [Specific resource] (特定のリソース) のどちらを対象にするのかを選択します。イベントが [Any status] (任意のステータス) または [Specific status] (特定のステータス) のどちらを対象にするのかを選択します。[Event pattern] (イベントパターン) テキストボックスに、選択したサンプルイベントパターンが表示されます。このパターンは、必要に応じてコピーまたは編集できます。

3.    特定のサービスのすべてのイベントに一致するシンプルなイベントパターンで EventBridge ルールを作成します。[Define pattern] (パターンを定義) で、[Event Pattern] (イベントパターン) を選択します。

注: イベントパターンではワイルドカードは使用できません。空のイベントパターンも許可されていません。

例えば、Amazon Elastic Compute Cloud (Amazon EC2) サービスによって生成されたすべてのイベントを表示するには、次のフィルターを使用します。

{
 "source": [ "aws.ec2" ]
}

SNS トピックまたは CloudWatch Logs のいずれかを使用して、ルールにターゲットをアタッチします。その結果、一致するすべてのイベントは SNS トピックまたは CloudWatch ログを通じて受信されます。特定の AWS のサービスによって送信された正確な JSON イベントを受け取ります。これらの結果に基づいて、カスタムイベントパターンを作成できます。受信イベントがそのまま転送されるように、EventBridge ルールのインプットトランスフォーマーにデフォルト設定 ([Configure Input] (入力の設定): [Matched event] (一致したイベント)) を確実に使用しているようにしてください。

受信イベントと同じ JSON 形式でイベントパターンを作成する

有効な一致するイベントパターンの作成には、以下のルールが適用されます。

  • イベントパターンで指定しないフィールドは自動的にマッチングされます。例えば、イベントパターンで [Detail] (詳細) が指定されていない場合、イベントパターンは詳細を持つすべてのイベントに一致します。
  • JSON 構造のレベルが 1 つ下のフィールドを一致させるには、中括弧 { } を使用します。JSON ビューワーは、より大きなイベント構造を見ている場合に役立つことがあります。
  • JSON イベントから一致する文字列は、角括弧 []で囲む必要があります。角括弧内に複数の値を含めることで、いずれかの値が受信イベントに存在する場合にイベントがトリガーされるようにできます。例えば、Amazon EC2 または Amazon DynamoDB によって送信されるすべてのイベントに基づいてイベントをトリガーするには、次のフィルタを使用します。
{
 "source": [ "aws.ec2", "aws.dynamodb" ]
}

注: サービスによって送信される JSON イベント内の角括弧を削除して、イベントパターンが有効とマークされるようにする必要があります。例えば、特定の Amazon Route 53 ホストゾーンのために [Type A] (タイプ A) レコードが作成されたときに通知を受けるには、以下を使用します。

Route 53 から EventBridges に送信されるイベント (SNS トピックまたは CloudWatch Logs から受信):

{
    "version": "0",
    "id": "d857ae5c-cc83-3742-ab88-d825311ee4e9",
    "detail-type": "AWS API Call via CloudTrail",
    "source": "aws.route53",
    "account": "123456789012",
    "time": "2019-12-05T16:50:53Z",
    "region": "us-east-1",
    "resources": [

    ],
    "detail": {
        "eventVersion": "1.05",
        "userIdentity": {
            "type": "AssumedRole",
            "principalId": "AROAABCDEFGHIJKLMNOPQ:Admin",
            "arn": "arn:aws:sts::123456789012:assumed-role/Admin",
            "accountId": "123456789012",
            "accessKeyId": "ASIAABCDEFGH12345678",
            "sessionContext": {
                "sessionIssuer": {
                    "type": "Role",
                    "principalId": "AROAABCDEFGHIJKLMNOPQ",
                    "arn": "arn:aws:iam::123456789012:role/Admin",
                    "accountId": "123456789012",
                    "userName": "Admin"
                },
                "webIdFederationData": {

                },
                "attributes": {
                    "mfaAuthenticated": "false",
                    "creationDate": "2019-12-05T16:28:27Z"
                }
            }
        },
        "eventTime": "2019-12-05T16:50:53Z",
        "eventSource": "route53.amazonaws.com",
        "eventName": "ChangeResourceRecordSets",
        "awsRegion": "us-east-1",
        "sourceIPAddress": "12.34.56.78",
        "userAgent": "console.amazonaws.com",
        "requestParameters": {
            "hostedZoneId": "Z1RP12345WXRQD",
            "changeBatch": {
                "changes": [
                    {
                        "action": "CREATE",
                        "resourceRecordSet": {
                            "type": "A",
                            "tTL": 300,
                            "resourceRecords": [
                                {
                                    "value": "4.4.4.4"
                                }
                            ],
                            "name": "test.example.us."
                        }
                    }
                ]
            }
        },
        "responseElements": {
            "changeInfo": {
                "status": "PENDING",
                "id": "/change/C271P4WIKN511J",
                "submittedAt": "Dec 5, 2019 4:50:53 PM"
            }
        },
        "additionalEventData": {
            "Note": "Do not use to reconstruct hosted zone"
        },
        "requestID": "bbbf9847-96cb-45ef-b617-d535b9fe83d8",
        "eventID": "74e2d2c8-7497-4292-94d0-348272dbc4f7",
        "eventType": "AwsApiCall",
        "apiVersion": "2013-04-01"
    }
}

ホストゾーンのために [Type A] (タイプ A) レコードが作成されたときに通知されるイベントフィルターパターン:

{
"source": ["aws.route53"],
    "detail": {
        "eventSource": ["route53.amazonaws.com"],
        "eventName": ["ChangeResourceRecordSets"],
        "requestParameters": {
            "hostedZoneId": ["Z1RP12345WXRQD"],
            "changeBatch": {
                "changes":
                    {
                        "action": ["CREATE"],
                        "resourceRecordSet": {
                            "type": ["A"]
                        }
                    }
            }
        }
    }
}

イベントパターンをテストする

EventBridge コンソールを使用してテストする

ルールを作成するときに、イベントパターンをテストできます。[Test event pattern] (イベントパターンをテスト) を選択して、イベントをテストします。

AWS CLI を使用してテストする

AWS CLI で、test-event-pattern コマンドを実行します。イベントパターンが一致することを確認するには、結果が true であることを確認します。これにより、AWS のサービスによって送信される JSON イベントを識別し、カスタムイベントパターンを容易にして特定のイベントをキャプチャできます。