Amazon EventBridge のイベントパターン - Amazon EventBridge

Amazon EventBridge のイベントパターン

イベントパターンは、一致するイベントと同じ構造をしています。ルールでは、イベントパターンを使用してイベントを選択し、ターゲットに送信します。イベントパターンは、イベントに一致するか、一致しないかのいずれかになります。

重要

EventBridge では、予想よりも高い料金やスロットリングにつながる可能性のあるルールを作成できます。例えば、ルールが無限に再帰的に実行される無限ループに陥るようなルールを誤って作成してしまうことがあります。Amazon S3 バケットで ACL が変更されたことを検出し、ソフトウェアをトリガーして目的の状態に変更するルールを作成したとします。このルールが慎重に記述されていない場合は、その後 ACL を変更するとルールが再び開始され、無限ループが作成されます。

このような予期しない結果を最小限に抑えるための正確なルールやイベントパターンを記述する方法に関するガイダンスについては、Amazon EventBridge のルールを定義する際のベストプラクティス および Amazon EventBridge のイベントパターンを定義する際のベストプラクティス を参照してください。

次のビデオでは、イベントパターンの基本について説明します。

次のイベントは、Amazon EC2 からの単純な AWS イベントです。

{ "version": "0", "id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "111122223333", "time": "2017-12-22T18:43:48Z", "region": "us-west-1", "resources": [ "arn:aws:ec2:us-west-1:123456789012:instance/i-1234567890abcdef0" ], "detail": { "instance-id": "i-1234567890abcdef0", "state": "terminated" } }

次のイベントパターンは、Amazon EC2 の instance-termination イベントすべてを処理します。

{ "source": ["aws.ec2"], "detail-type": ["EC2 Instance State-change Notification"], "detail": { "state": ["terminated"] } }

イベントパターンの作成

イベントパターンを作成するには、イベントパターンにマッチングするイベントのフィールドを指定します。照合に使用するフィールドのみを指定します。上のイベントパターンの例では、3 つのフィールドの値しか指定していません。最上位のフィールド "source" および "detail-type" と、"detail" オブジェクトフィールド内部の "state" フィールドです。ルールを適用するとき、EventBridge はイベント内の他のフィールドはすべて無視します。

イベントパターンがイベントに一致するには、イベントパターンに指定されているすべてのフィールド名がイベントに含まれている必要があります。フィールド名は、同じネスト構造になったイベントにも含まれていなければなりません。

イベントと一致するパターンを記述するときは、TestEventPattern API または test-event-pattern CLI コマンドを使用して、パターンが正しいイベントと一致することをテストできます。詳細については、「TestEventPattern」を参照してください。

イベント値の照合

イベントパターンでマッチングする値は JSON 配列形式で、角かっこ ([ と ]) で囲むと複数の値を指定できます。例えば、Amazon EC2 または AWS Fargate からのイベントをマッチングするには、次のパターンを使用できます。このパターンは、"source" フィールドの値が "aws.ec2" または "aws.fargate" のいずれかであるイベントに一致します。

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

イベントパターンを作成する際の考慮事項

イベントパターンを作成する際に考慮すべき点は次のとおりです。

  • EventBridge は、イベントパターンに含まれていないフィールドをイベント内で無視します。実際には、"*": "*" とワイルドカードを指定すると、イベントパターンに含まれないフィールドにも一致します。

  • イベントパターンが一致する値は、JSON のルールに従います。二重引用符 (") で囲んだ文字列、数値、およびキーワード truefalse、および null を含めることができます。

  • 文字列の場合、Eventbridge は文字単位の厳密な一致を使用し、大文字の小文字化など文字列の正規化は行われません。

  • 数値の場合、EventBridge は文字列表現を使用します。たとえば、300、300.0、3.0e2 は等しいとはみなされません。

  • 同じ JSON フィールドに複数のパターンが指定されている場合、EventBridge では最後のパターンのみを使用します。

  • EventBridge がイベントパターンをコンパイルして使用する場合、結合文字としてドット (.) が使用されることに注意してください。

    つまり、EventBridge は以下のイベントパターンを同一として扱います。

    ## has no dots in keys { "detail" : { "state": { "status": [ "running" ] } } } ## has dots in keys { "detail" : { "state.status": [ "running" ] } }

    また、どちらのイベントパターンも次の 2 つのイベントと一致することになります。

    ## has no dots in keys { "detail" : { "state": { "status": "running" } } } ## has dots in keys { "detail" : { "state.status": "running" } }
    注記

    これは現在の EventBridge の動作を説明するものであり、これを変更しない根拠にすべきではありません。

  • 重複するフィールドを含むイベントパターンは無効です。パターンに重複するフィールドが含まれている場合、EventBridge は最終的なフィールド値のみを考慮します。

    例えば、以下のイベントパターンは同じイベントと一致します。

    ## has duplicate keys { "source": ["aws.s3"], "source": ["aws.sns"], "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["s3.amazonaws.com"], "eventSource": ["sns.amazonaws.com"] } } ## has unique keys { "source": ["aws.sns"], "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["sns.amazonaws.com"] } }

    また、EventBridge は次の 2 つのイベントを同一イベントとして扱います。

    ## has duplicate keys { "source": ["aws.s3"], "source": ["aws.sns"], "detail-type": ["AWS API Call via CloudTrail"], "detail": [ { "eventSource": ["s3.amazonaws.com"], "eventSource": ["sns.amazonaws.com"] } ] } ## has unique keys { "source": ["aws.sns"], "detail-type": ["AWS API Call via CloudTrail"], "detail": [ { "eventSource": ["sns.amazonaws.com"] } ] }
    注記

    これは現在の EventBridge の動作を説明するものであり、これを変更しない根拠にすべきではありません。

イベントパターンで使用する比較オペレーション

EventBridge で使用できるすべての比較演算子は以下のとおりです。

比較オペレーションは、$oranything-but を除いてリーフノードでのみ機能します。

比較 ルール構文

および

Location が「New York」、および Day が「Monday」

"Location": [ "New York" ], "Day": ["Monday"]

で始まる

Region が US にある

"Region": [ {"prefix": "us-" } ]

LastName が空白

"LastName": [""]

等しい

Name が「Alice」

"Name": [ "Alice" ]

等しい (大文字と小文字を区別しない)

Name が「Alice」

"Name": [ { "equals-ignore-case": "alice" } ]

で終わる

FileName は.png 拡張子で終わる

"FileName": [ { "suffix": ".png" } ]

存在する

ProductName が存在

"ProductName": [ { "exists": true } ]

存在しない

ProductName が存在しない

"ProductName": [ { "exists": false } ]

以外

Weather が「Raining」以外

"Weather": [ { "anything-but": [ "Raining" ] } ]

Null

UserId が Null

"UserID": [ null ]

数値 (等しい)

Price が 100

"Price": [ { "numeric": [ "=", 100 ] } ]

数値 (範囲)

Price が 10 より大きく 20 以下

"Price": [ { "numeric": [ ">", 10, "<=", 20 ] } ]

または

PaymentType が「Credit」または「Debit」

"PaymentType": [ "Credit", "Debit"]

Or (複数フィールド)

Location が「New York」、または Day が「Monday」

"$or": [ { "Location": [ "New York" ] }, { "Day": [ "Monday" ] } ]

ワイルドカード

「dir」フォルダ内の .png 拡張子の付いたすべてのファイル

"FileName": [ { "wildcard": "dir/*.png" } ]

イベントとイベントパターンの例

イベントのマッチングには、JSON のデータ型と値をすべて使用できます。以下の例は、イベントとそれに一致するイベントパターンを示しています。

フィールドのマッチング

フィールドの値でマッチングすることができます。次の Amazon EC2 Auto Scaling イベントについて考えてみましょう。

{ "version": "0", "id": "3e3c153a-8339-4e30-8c35-687ebef853fe", "detail-type": "EC2 Instance Launch Successful", "source": "aws.autoscaling", "account": "123456789012", "time": "2015-11-11T21:31:47Z", "region": "us-east-1", "resources": [], "detail": { "eventVersion": "", "responseElements": null } }

上のイベントでは、マッチングに "responseElements" フィールドを使用できます。

{ "source": ["aws.autoscaling"], "detail-type": ["EC2 Instance Launch Successful"], "detail": { "responseElements": [null] } }

値の一致

以下は、Amazon Macie イベントの一部です。これについて考えてみましょう。

{ "version": "0", "id": "0948ba87-d3b8-c6d4-f2da-732a1example", "detail-type": "Macie Finding", "source": "aws.macie", "account": "123456789012", "time": "2021-04-29T23:12:15Z", "region":"us-east-1", "resources": [ ], "detail": { "schemaVersion": "1.0", "id": "64b917aa-3843-014c-91d8-937ffexample", "accountId": "123456789012", "partition": "aws", "region": "us-east-1", "type": "Policy:IAMUser/S3BucketEncryptionDisabled", "title": "Encryption is disabled for the S3 bucket", "description": "Encryption is disabled for the Amazon S3 bucket. The data in the bucket isn’t encrypted using server-side encryption.", "severity": { "score": 1, "description": "Low" }, "createdAt": "2021-04-29T15:46:02Z", "updatedAt": "2021-04-29T23:12:15Z", "count": 2, . . .

次のイベントパターンは、重要度スコアが 1 で、カウントが 2 のイベントと一致します。

{ "source": ["aws.macie"], "detail-type": ["Macie Finding"], "detail": { "severity": { "score": [1] }, "count":[2] } }