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

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon EventBridge イベントパターン

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

重要

では EventBridge、 higher-than-expected 料金やスロットリングにつながる可能性のあるルールを作成できます。例えば、ルールが無限に再帰的に実行される無限ループに陥るようなルールを誤って作成してしまうことがあります。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 を含めることができます。

  • 文字列の場合、大文字と小文字の区別やその他の文字列の正規化なしで完全 character-by-character 一致 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"] } }

    また、次の 2 つのイベントを同一として 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 動作を説明するものであり、変更しないことに頼るべきではありません。

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

で使用可能なすべての比較演算子の概要の下 EventBridge。

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

比較 ルール構文

And

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

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

Anything-but 状態は、「初期化中」以外の値です。

"state": [ { "anything-but": "initializing" } ]

Anything-but ( で始まる)

リージョンが米国にありません。

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

Anything-but (末尾は )

FileName は .png 拡張子で終わることはありません。

"FileName": [ { "anything-but": { "suffix": ".png" } } ]

Anything-but (大文字と小文字は区別されません)

状態とは、「初期化」以外の値、または「INITIALIZING」などの大文字と小文字の区別です。

"state": : [{ "anything-but": { "equals-ignore-case": "initializing" }}]}

で始まる

リージョンは米国にあります。

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

で始まる (大文字と小文字は区別されません)

サービス名は、大文字と小文字に関係なく「eventb」で始まります。

{"service" : [{ "prefix": { "equals-ignore-case": "eventb" }}]}

LastName は空です。

"LastName": [""]

等しい

Name が「Alice」

"Name": [ "Alice" ]

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

Name が「Alice」

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

で終わる

FileName .png 拡張子で終わる

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

で終わる (大文字と小文字は区別されません)

サービス名は、「tbridge」、または「TDGE」などの大文字と小文字のバリエーションで終わります。

{"service" : [{ "suffix": { "equals-ignore-case": "tBridge" }}]}

存在する

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 が「クレジット」または「ビット」

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