EventBridge ルール用のカスタムイベントパターンを作成する方法を教えてください。

所要時間3分
0

Amazon EventBridge ルールを使用して AWS サービスのイベントをキャプチャしたいのですが、そのイベントを照合するカスタムイベントパターンを作成できません。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

EventBridge は、AWS サービスおよび EventBridge Partner からのイベントと、カスタムイベントを受け付けます。この記事では、AWS サービスがオリジンである JSON イベントについて説明します。イベントパターンを含む EventBridge ルールを作成することで、受信イベントをフィルター処理できます。これにより、EventBridge ルールは目的のイベントのみを照合し、それらのイベントをターゲットに転送します。

受信イベントの JSON 形式を決定する

受信イベントの JSON 形式を決定するには、次の 3 通りの方法があります。

こちらで、EventBridge が受信する AWS サービスからのサンプルイベントのリストを参照してください。

EventBridge には、ユーザーがイベントパターンを作成および検証するために使用できる EventBridge Sandbox ツールが用意されています。たとえば、EC2 インスタンスの状態変更イベントを作成する場合は、次の手順を実行します。

  1. EventBridge コンソールを開きます。
  2. ナビゲーションペインで [開発者リソース] を展開し、[サンドボックス] を選択します。
  3. [イベントパターン] タブの [サンプルイベント] セクションで、[AWS イベント] を選択します。
  4. [サンプルイベント] フィールドで [EC2 インスタンスの状態変更通知] を選択します。この手順により、ウィンドウに最初のサンプルイベントが表示されます。特定のイベントタイプでは、複数のサンプルが使用できる場合があります。
  5. [作成方法] セクションで、イベントパターンのテストを選択します。
  6. 特定の AWS サービスのすべてのイベントと照合するシンプルなイベントパターンを使用して EventBridge ルールを作成します。たとえば、次のイベントパターンはすべての Amazon Elastic Compute Cloud (Amazon EC2) イベントを照合します。
    <{ "source": [ "aws.ec2" ]
    }
    注: イベントパターンでは、空のイベントは許可されません。

次に、SNS または CloudWatch ロググループのターゲットをルールに関連付けて、インバウンドイベントをキャプチャします。サービスが出力する JSON を正しく受信するためには、ターゲットの [ターゲット入力の設定] オプションが [一致したイベント] に設定されている必要があります。

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

前提条件

  • イベントパターンで指定していないフィールドはすべて自動的に照合されます。たとえば、イベントパターンに Detail が指定されていない場合、イベントパターンはすべてのイベントと詳細を照合します。
  • JSON 構造内の 1 レベル下のフィールドを照合するには、中括弧 { } を使用します。大規模なイベント構造を確認する場合は、JSON ビューアが便利でしょう。
  • JSON イベントから照合される文字列は、角括弧 [ ] で囲む必要があります。角括弧に複数の値を含めることで、受信イベントにいずれかの値がある場合にイベントを呼び出すことができます。たとえば、Amazon EC2 または Amazon DynamoDB によって送信されるすべてのイベントに基づいてイベントを呼び出すには、次のコマンドを使用します。
    { "source": [ "aws.ec2", "aws.dynamodb" ]
    }

SNS または CloudWatch のターゲットを使用して受信イベントを取得する

この例は、EventBridge に送信された Route 53 イベントを示しています。ChangeResourceRecordsets API コールは、Amazon Route 53 ホストゾーンに A レコードを作成する役割を持ちます。Amazon Simple Notification Service (Amazon SNS) トピックまたは Amazon CloudWatch ロググループのターゲットは、次のイベントをキャプチャします。

{
  "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"
  }
}

対応する EventPattern を作成する

このイベントパターン例は、複数のフィールドにフィルター処理を行います。(eventNamehostedZoneldactiontype など。)照合するイベントには、すべてのフィールドと対応する値が含まれている必要があります。このパターンは、作成された A レコードを特定のホストゾーンに対して分離します。

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

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

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

EventBridge Sandbox を使用するには、次の手順を実行します。

  1. [サンプルイベント] セクションでサンプルイベントを選択または入力します。
  2. [イベントパターン] セクションでイベントパターンを指定します。[イベントパターンフォーム] のメニューを使用すると、イベントパターンを作成できます。カスタムパターン (JSON エディタ) を使用してカスタムイベントパターンを入力することもできます。
  3. 両方のセクションに入力した後、[パターンをテスト] を選択し、イベントパターンが特定のサンプルイベントと一致することを確認します。

AWS CLI を使用してイベントパターンをテストする

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

関連情報

Amazon EventBridge のイベントパターン

チュートリアル: CloudTrail を使用して AWS API コールに対応する EventBridge ルールを作成する

Amazon EventBridge - CloudWatch イベントと EventBridge の違い (YouTube)

コメントはありません