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

イベントパターンの作成

イベントパターンを作成するには、イベントパターンにマッチングするイベントのフィールドを指定します。照合に使用するフィールドのみを指定します。前述のイベントパターンの例では、"source"最上位のフィールドと"detail-type""detail"およびオブジェクトフィールド内のフィールドの 3 "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 character-by-character 完全一致を使用します。

  • 数値の場合は、 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"]

それ以外なら何でも 状態は「初期化」以外の任意の値です。

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

(で始まる) 以外のすべて

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

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

それ以外のもの (で終わる)

FileName 末尾に.png 拡張子が付いていない。

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

それ以外のもの (大文字と小文字は無視してください)

状態とは、「初期化中」や「初期化中」などの大文字と小文字の違い以外の任意の値です。

"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」という文字、または「TBRIDGE」などの大文字と小文字を区別した文字で終わります。

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