Amazon EventBridge のイベントパターンで使用する比較演算子 - Amazon EventBridge

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

Amazon EventBridge のイベントパターンで使用する比較演算子

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

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

比較 ルール構文 イベントバスのサポート パイプのサポート

And

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

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

あり

あり

指定したもの以外 状態は「初期化」以外のすべての値。

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

あり

あり

指定の値で始まるもの以外

リージョンが US 以外

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

あり

不可

指定の値で終わるもの以外

FileName の拡張子が .png 以外。

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

あり

不可

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

状態は「initializing」(「INITIALIZING」など大文字と小文字が異なる変化形を含む) 以外の値。

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

あり

不可

以外 (ワイルドカードを使用)

FileName は、/lib/ を含むファイルパスではない。

"FilePath" : [{ "anything-but": { "wildcard": "*/lib/*" }}]

あり

不可

指定の値で始まる

リージョンは US にある。

"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 が「Credit」または「Debit」

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

あり

あり

Or (複数フィールド)

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

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

あり

あり

ワイルドカード

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

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

あり

不可

プレフィックスマッチング

イベントソース内の値のプレフィックスに応じてイベントをマッチングすることができます。文字列値にはプレフィックスマッチングを使用できます。

例えば、次のイベントパターンは、"time": "2017-10-02T18:43:48Z" のように "time" フィールドが "2017-10-02" で始まるすべてのイベントに一致します。

{ "time": [ { "prefix": "2017-10-02" } ] }

大文字と小文字を無視する際のプレフィックスマッチング

また、equals-ignore-caseprefix. を組み合わせて、値が始まる文字の大文字と小文字に関係なく、プレフィックス値を一致させることもできます。

例えば、次のイベントパターンは、service フィールドが文字列 EventB で始まるイベントだけでなく、EVENTBeventb、またはそれらの文字の大文字と小文字も一致させます。

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

サフィックスマッチング

イベントソース内の値のサフィックスに応じてイベントをマッチングすることができます。文字列値にはサフィックスマッチングを使用できます。

例えば、次のイベントパターンは、"FileName" フィールドが .png ファイル拡張子で終わるすべてのイベントに一致します。

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

大文字と小文字を区別しないサフィックスマッチング

また、equals-ignore-casesuffix. を組み合わせて、値の末尾の文字の大文字と小文字に関係なく、サフィックス値を一致させることもできます。

例えば、次のイベントパターンは、FileName フィールドが文字列 .png で終わるイベントだけでなく、.PNG またはそれらの文字の大文字と小文字も一致させます。

{ "detail": {"FileName" : [{ "suffix": { "equals-ignore-case": ".png" }}]} }

「以外」のマッチング

指定したもの以外のマッチングは、ルールで指定されているもの以外のすべてに一致します。

文字列のみを含むリスト、または数字のみを含むリストを含む、文字列および数値で「以外」のマッチングを使用できます。

次のイベントパターンは、文字列と数字を使った「以外」のマッチングを示しています。

{ "detail": { "state": [ { "anything-but": "initializing" } ] } } { "detail": { "x-limit": [ { "anything-but": 123 } ] } }

次のイベントパターンは、文字列のリストを使った「以外」のマッチングを示しています。

{ "detail": { "state": [ { "anything-but": [ "stopped", "overloaded" ] } ] } }

次のイベントパターンは、数値のリストを使った「以外」のマッチングを示しています。

{ "detail": { "x-limit": [ { "anything-but": [ 100, 200, 300 ] } ] } }

大文字と小文字を区別せずに一致するもの

equals-ignore-caseanything-but と組み合わせて使用して、大文字と小文字に関係なく文字列値を一致させることもできます。

次のイベントパターンは、文字列「initializing」、「INITIALIZING」、「Initializing」、またはそれらの文字の他の大文字と小文字が含まれていない state フィールドと一致します。

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

以下のように equals-ignore-caseanything-but と組み合わせて使用して、値のリストと照合することもできます。

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

「以外」マッチング (プレフィックス)

prefixanything-but を組み合わせて、指定された値で始まらない文字列値に一致させることができます。これには、単一の値、または値のリストが含まれます。

次のイベントパターンは、"state" フィールドに "init" というプレフィックスを持たないすべてのイベントにマッチする、「以外」のマッチングを示しています。

{ "detail": { "state": [ { "anything-but": { "prefix": "init" } } ] } }

次のイベントパターンは、プレフィックスの値のリストを使った「以外」のマッチングを示しています。このイベントパターンは、"state" フィールドにプレフィックス "init" または "stop" のいずれも持たないイベントと一致します。

{ "detail": { "state" : [{ "anything-but": { "prefix": ["init", "stop"] } } ] } } }

「以外」マッチング (サフィックス)

suffixanything-but を組み合わせて、指定した値で終了しない文字列値に一致させることができます。これには、単一の値、または値のリストが含まれます。

次のイベントパターンは、.txt で終わらない FileName フィールドの値と一致します。

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

次のイベントパターンは、サフィックスの値のリストを使った「以外」のマッチングを示しています。このイベントパターンは、.txt または .rtf で終わらない FileName フィールドの値と一致します。

{ "detail": { "FileName": [ { "anything-but": { "suffix": [".txt", ".rtf"] } } ] } }

「以外」マッチング (ワイルドカードを使用)

ワイルドカード文字 (*) は、「以外」マッチングで指定した値の中で使用できます。これには、単一の値、または値のリストが含まれます。

次のイベントパターンは、/lib/ を含まない FileName フィールドの値と一致します。

{ "detail": { "FilePath" : [{ "anything-but": { "wildcard": "*/lib/*" }}] } }

次のイベントパターンは、ワイルドカードを含む値のリストを使った「以外」のマッチングを示しています。このイベントパターンは、/lib/ または /bin/ を含まない FileName フィールドの値と一致します。

{ "detail": { "FilePath" : [{ "anything-but": { "wildcard": ["*/lib/*", "*/bin/*"] }}] } }

詳細については、「ワイルドカードを使用したマッチング」を参照してください。

数値マッチング

数値マッチングは、JSON 数値である値で動作します。精度が 15 桁 (小数点の右に 6 桁) の -5.0e9 から +5.0e9 までの値に制限されています。

以下は、すべてのフィールドが真であるイベントにのみ一致するイベントパターンの数値マッチングを示しています。

{ "detail": { "c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ], "d-count": [ { "numeric": [ "<", 10 ] } ], "x-limit": [ { "numeric": [ "=", 3.018e2 ] } ] } }

IP アドレスマッチング

IP アドレスマッチングは、IPv4 アドレスと IPv6 アドレスに使用できます。次のイベントパターンは、10.0.0 で始まり、0 ~ 255 の数値で終わる IP アドレスに一致する IP アドレスを示しています。

{ "detail": { "sourceIPAddress": [ { "cidr": "10.0.0.0/24" } ] } }

存在マッチング

存在マッチングは、イベントの JSON 内のフィールドの有無に対して機能します。

存在マッチングは、リーフノードでのみ機能します。中間ノードでは機能しません。

次のイベントパターンは、detail.state フィールドを持つイベントと一致します。

{ "detail": { "state": [ { "exists": true } ] } }

前のイベントパターンは、次のイベントと一致します。

{ "version": "0", "id": "7bf73129-1428-4cd3-a780-95db273d1602", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "123456789012", "time": "2015-11-11T21:29:54Z", "region": "us-east-1", "resources": ["arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111"], "detail": { "instance-id": "i-abcd1111", "state": "pending" } }

前のイベントパターンは、次のイベントとは一致しません。detail.state フィールドがないからです。

{ "detail-type": [ "EC2 Instance State-change Notification" ], "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-02ebd4584a2ebd341" ], "detail": { "c-count" : { "c1" : 100 } } }

Equals-ignore-case マッチング

Equals-ignore-case は、大文字と小文字に関係なく文字列値に適用されます。

次のイベントパターンは、大文字小文字に関係なく、指定された文字列と一致する detail-type フィールドを持つイベントと一致します。

{ "detail-type": [ { "equals-ignore-case": "ec2 instance state-change notification" } ] }

前のイベントパターンは、次のイベントと一致します。

{ "detail-type": [ "EC2 Instance State-change Notification" ], "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-02ebd4584a2ebd341" ], "detail": { "c-count" : { "c1" : 100 } } }

ワイルドカードを使用したマッチング

ワイルドカード文字 (*) を使用してイベントパターン内の文字列値と一致させることができます。

注記

現在、ワイルドカード文字はイベントバスルールでのみサポートされています。

イベントパターンでワイルドカードを使用する場合の考慮事項:

  • 1 つの文字列値にはワイルドカード文字をいくつでも指定できますが、ワイルドカード文字を連続して使用することはサポートされていません。

  • EventBridge では、バックスラッシュ文字 (\) を使用してワイルドカードフィルターのリテラル * および \ を指定できます。

    • 文字列 \* はリテラル * 文字を表します。

    • 文字列 \\ はリテラル \ 文字を表します。

    バックスラッシュを使用して他の文字をエスケープすることはサポートされていません。

ワイルドカードとイベントパターンの複雑さ

ワイルドカードを使用するルールの複雑さには制限があります。ルールが複雑すぎる場合、EventBridge はルールを作成しようとしたときに InvalidEventPatternException を返します。ルールでこのようなエラーが発生した場合は、以下のガイダンスを参考にしてイベントパターンの複雑さを軽減することを検討してください。

  • 使用するワイルドカード文字の数を減らす

    ワイルドカード文字は、複数の可能な値と一致させることが本当に必要な場合にのみ使用します。例えば、次のイベントパターンで、同じリージョン内のイベントバスと一致させる場合を考えてみます。

    { "EventBusArn": [ { "wildcard": "*:*:*:*:*:event-bus/*" } ] }

    上記の場合、ARN のセクションの多くは、イベントバスが存在するリージョンに直接基づいています。したがって、us-east-1 リージョンを使用している場合は、次の例のように、複雑さを減らしたパターンでも必要な値と一致します。

    { "EventBusArn": [ { "wildcard": "arn:aws:events:us-east-1:*:event-bus/*" } ] }
  • ワイルドカード文字の後に繰り返される文字シーケンスを減らす

    ワイルドカードを使用した後に同じ文字シーケンスが複数回出現すると、イベントパターンの処理が複雑になります。イベントパターンを再キャストして、繰り返されるシーケンスを最小限に抑えます。次の例で、任意のユーザーのファイルのファイル名 doc.txt と一致させる場合を考えてみます。

    { "FileName": [ { "wildcard": "/Users/*/dir/dir/dir/dir/dir/doc.txt" } ] }

    doc.txt ファイルが、指定したパスにのみ存在することがわかっている場合は、繰り返される文字シーケンスを次の方法で減らすことができます。

    { "FileName": [ { "wildcard": "/Users/*/doc.txt" } ] }

複数のマッチングを含む複雑な例

複数のマッチングルールを組み合わせて、より複雑なイベントパターンにすることができます。例えば、次のイベントパターンでは、anything-butnumeric を組み合わせています。

{ "time": [ { "prefix": "2017-10-02" } ], "detail": { "state": [ { "anything-but": "initializing" } ], "c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ], "d-count": [ { "numeric": [ "<", 10 ] } ], "x-limit": [ { "anything-but": [ 100, 200, 300 ] } ] } }
注記

イベントパターンを構築するときに、キーを複数回含めると、最後のリファレンスがイベントの評価に使用されるものになります。たとえば、次のパターンの場合:

{ "detail": { "location": [ { "prefix": "us-" } ], "location": [ { "anything-but": "us-east" } ] } }

{ "anything-but": "us-east" } のみが location を評価する際に考慮されます。

複数の $or マッチングを含む複雑な例

また、複数のフィールドにわたって任意のフィールド値が一致するかどうかを確認する複雑なイベントパターンを作成することもできます。$or を使用して、複数のフィールドの値のいずれかが一致した場合に一致するイベントパターンを作成します。

$or コンストラクト内の個々のフィールドのパターンマッチングには、数値マッチング配列など、他のフィルタータイプを含めることができますので注意してください。

次のいずれかの条件が満たされる場合、次のイベントパターンと一致します。

  • c-count フィールドが 0 より大きい、または 5 以下。

  • d-count フィールドが 10 未満。

  • x-limit フィールドが 3.018e2 に等しい。

{ "detail": { "$or": [ { "c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ] }, { "d-count": [ { "numeric": [ "<", 10 ] } ] }, { "x-limit": [ { "numeric": [ "=", 3.018e2 ] } ] } ] } }
注記

イベントパターン (PutRuleCreateArchiveUpdateArchive、および TestEventPattern) を受け入れる API では、$or を使用した結果、1000 を超えるルールの組み合わせが生成された場合、InvalidEventPatternException をスローします。

イベントパターン内のルールの組み合わせの数を決定するには、イベントパターン内の各 $or 配列の引数の合計数を掛けます。たとえば、上記のパターンには 3 つの引数を持つ単一の $or 配列が含まれているため、ルールの組み合わせの総数も 3 つになります。2 つの引数を持つ別の $or 配列を追加した場合、ルールの組み合わせの合計は 6 つになります。