イベントパターンは、EventBridge が受信イベントをターゲットにルーティングする前に満たすべき条件を定義します。さまざまなソースから構造の異なるイベントが到着する場合、ダウンストリーム処理に関連するイベントのみを選択する必要があります。イベントパターンは、一致させるフィールドと値を指定する JSON オブジェクトです。EventBridge は各受信イベントをパターンと比較し、一致したイベントのみを転送します。
パターンは、一致させるイベントと同じネスト構造を持つ必要があります。
サポートされる演算子
次の表は、すべてのパターン演算子をまとめたものです。各演算子は、フィールド値として配列で囲まれます。
| 演算子 | 一致条件 | 構文例 |
|---|---|---|
| 完全一致 | フィールドが指定された文字列と等しい | "source": ["acs.oss"] |
prefix | フィールド値が文字列で始まる | "source": [{"prefix": "acs."}] |
suffix | フィールド値が文字列で終わる | "subject": [{"suffix": ".jpg"}] |
contains | フィールド値に文字列が含まれる | "type": [{"contains": "Normal"}] |
anything-but | フィールド値が文字列、数値、またはセットと等しくない | "state": [{"anything-but": "initializing"}] |
anything-but + prefix | フィールド値が文字列で始まらない | "state": [{"anything-but": {"prefix": "init"}}] |
numeric | フィールド値が数値範囲内にある | "c-count": [{"numeric": [">", 0, "<=", 5]}] |
cidr | IP アドレスが CIDR ブロック内にある (IPv4 のみ) | "source-ip": [{"cidr": "10.0.0.0/24"}] |
exists | イベントにフィールドが存在する、または存在しない | "state": [{"exists": false}] |
| 空文字列 | フィールドが空文字列に等しい | "eventVersion": [""] |
| Null | フィールドが null | "responseElements": [null] |
マッチングの仕組み
EventBridge は、次の 2 つの論理演算子を使用してパターンを評価します。
キー間の AND 条件:パターン内のすべてのキーが一致する必要があります。パターンで
sourceとtypeの両方が指定されている場合、イベントは両方に一致する必要があります。配列内の値間の OR 条件:各キーの値は配列です。配列に複数の値が含まれる場合、いずれかの値が一致すればイベントはマッチします。
その他のマッチングルール:
イベントには、パターンで指定されたすべてのフィールドが含まれている必要があります。イベント内の余分なフィールドは無視されます。
マッチングは文字単位で大文字・小文字を区別して行われます。EventBridge は評価中に文字列を変更しません。
すべての値は有効な JSON である必要があります。具体的には、二重引用符 (
"") で囲まれた文字列、引用符なしのキーワード (true、false、null)、または数値です。
完全一致
フィールドが特定の値に等しいイベントをマッチします。値は配列で囲みます。
次のパターンは、source が acs.oss であるイベントにマッチします。
{
"source": [
"acs.oss"
]
}サンプルイベント (マッチ):
{
"id": "7adc8c1a-645d-4476-bdef-5d6fb57f****",
"source": "acs.oss",
"specversion": "1.0",
"type": "oss:ObjectCreated:PostObject",
"datacontenttype": "application/json",
"dataschema": "http://example.com/test.json",
"subject": "acs:oss:cn-hangzhou:1234567:xls-papk/game_apk/123.jpg",
"time": "2020-08-17T16:04:46.149Asia/Shanghai",
"data": {
"name": "test",
"scope": 100
}
}プレフィックス一致
フィールド値が指定された文字列で始まるイベントをマッチします。prefix 演算子を使用します。
次のパターンは、source が acs. で始まるイベントにマッチします。
{
"source": [
{
"prefix": "acs."
}
]
}OSS バケット名のプレフィックスによるフィルタリング
EventBridge のイベントパターンでは、OSS バケット名のマッチングにワイルドカード文字 * はサポートされていません。* を使用すると、これはリテラル文字として扱われ、マッチに失敗します。OSS バケット名をプレフィックスでマッチさせるには、配列で囲まれた形式 [{"prefix": "value"}] で prefix 演算子を使用してください。配列を使用しない形式 {"prefix": "value"} ではマッチに失敗します。
OSS バケット名のプレフィックスでイベントをフィルタリングする方法は、次の 2 つがあります。
例 1:data.oss.bucket.name フィールドによるマッチ
{
"source": ["acs.oss"],
"data": {
"oss": {
"bucket": {
"name": [
{
"prefix": "corenetic"
}
]
}
}
}
}例 2:subject フィールドによるマッチ
{
"source": ["acs.oss"],
"subject": [
{
"prefix": "acs:oss:cn-hangzhou:1654575930909665:corenetic"
}
]
}subject フィールドは、acs:oss:{region}:{accountId}:{bucketName}/{objectKey} というフォーマットに従います。subject フィールドのプレフィックスをマッチさせることで、OSS バケット名でイベントをフィルタリングできます。
サフィックス一致
フィールド値が指定された文字列で終わるイベントをマッチします。suffix 演算子を使用します。
次のパターンは、プレフィックス条件とサフィックス条件を組み合わせています。イベントは、subject 値が指定されたプレフィックスで始まる、または .txt で終わる、または .jpg で終わる場合にマッチします。
{
"subject": [
{
"prefix": "acs:oss:cn-hangzhou:1234567:xls-papk/"
},
{
"suffix": ".txt"
},
{
"suffix": ".jpg"
}
]
}同じ配列内の複数の値は、OR 論理で評価されます。配列内のいずれか 1 つの条件が満たされれば、イベントはマッチします。
部分文字列一致
フィールド値に指定された部分文字列が含まれるイベントをマッチします。contains 演算子を使用します。
単一の部分文字列
次のパターンは、type に Normal が含まれるイベントにマッチします。
{
"type": [
{
"contains": "Normal"
}
]
}"type": "UserNormalEvent" のイベントはマッチします。"type": "UserErrorEvent" のイベントはマッチしません。
複数の部分文字列 (OR)
次のパターンは、type に Normal または Error が含まれるイベントにマッチします。
{
"type": [
{
"contains": "Normal"
},
{
"contains": "Error"
}
]
}"type": "UserNormalEvent" のイベントはマッチします。"type": "UserErrorEvent" のイベントもマッチします。"type": "UserOtherEvent" のイベントはマッチしません。
イベントパターンでは、フィルタリングに正規表現はサポートされていません。フィールド値に特定の文字列が含まれるイベントをマッチさせるには、代わりに contains 演算子を使用してください。
次のパターンは、data.content に com.example.service が含まれるイベントにマッチします。
{
"data": {
"content": [
{
"contains": "com.example.service"
}
]
}
}このパターンは、ログメッセージに含まれるクラスパスやパッケージ名の一部(例:com.example.service)でイベントをフィルタリングする際に役立ちます。同じフィールドに対して完全一致を行うと、フィールド値が文字列と完全に一致しない限りマッチに失敗します。
除外一致 (anything-but)
フィールド値が指定された値と等しくないイベントをマッチします。anything-but 演算子は、文字列、数値、配列、およびプレフィックスベースの除外をサポートします。
単一の文字列を除外
次のパターンは、data.state が initializing でないイベントにマッチします。
{
"data": {
"state": [
{
"anything-but": "initializing"
}
]
}
}単一の数値を除外
次のパターンは、data.x-limit が 123 でないイベントにマッチします。
{
"data": {
"x-limit": [
{
"anything-but": 123
}
]
}
}複数の除外条件を AND 論理で組み合わせるには、同じパターン内の異なるフィールドに anything-but 条件を適用します。イベントはすべての除外条件を満たす必要があります。複数の文字列を除外
次のパターンは、data.state が stopped でも overloaded でもないイベントにマッチします。
{
"data": {
"state": [
{
"anything-but": [
"stopped",
"overloaded"
]
}
]
}
}"state": "terminated" のイベントはマッチします。"state": "stopped" のイベントはマッチしません。
複数の数値を除外
次のパターンは、data.x-limit が 100、200、または 300 でないイベントにマッチします。
{
"data": {
"x-limit": [
{
"anything-but": [
100,
200,
300
]
}
]
}
}プレフィックスによる除外
次のパターンは、data.state が init で始まらないイベントにマッチします。
{
"data": {
"state": [
{
"anything-but": {
"prefix": "init"
}
}
]
}
}"state": "pending" のイベントはマッチします。"state": "initializing" のイベントはマッチしません。
特定のイベントソースを除外
次のパターンは、Elastic Compute Service (ECS) 以外を起源とするイベントにマッチします。
{
"source": [
{
"anything-but": [
"acs.ecs"
]
}
]
}すべての Alibaba Cloud サービスイベントを除外
次のパターンは、acs. で始まるすべてのソースを除外することで、カスタムアプリケーションからのイベントのみにマッチします。
{
"source": [
{
"anything-but": {
"prefix": "acs."
}
}
]
}数値一致
数値フィールドが特定の値に等しい、または範囲内にあるイベントをマッチします。numeric 演算子を、1 つ以上の比較演算子 (=、>、<、<=) とともに使用します。2 つの演算子をペアにすることで範囲を指定できます。
次のパターンは、次の条件を満たすイベントにマッチします。
data.c-countが 0 より大きく、5 以下data.d-countが 10 未満data.x-limitが 301.8 に等しい
{
"data": {
"c-count": [
{
"numeric": [
">",
0,
"<=",
5
]
}
],
"d-count": [
{
"numeric": [
"<",
10
]
}
],
"x-limit": [
{
"numeric": [
"=",
301.8
]
}
]
}
}数値マッチングは、-1.0e9 ~ +1.0e9 の範囲の値をサポートし、精度は最大 15 桁、小数点以下 6 桁までです。値は JSON 数値形式である必要があります。
IP アドレス一致
IP アドレスフィールドが CIDR ブロック内にあるイベントをマッチします。data オブジェクト内のフィールドに cidr 演算子を使用します。IPv4 アドレスのみがサポートされています。
次のパターンは、data.source-ip が 10.0.0.0/24 サブネット内にあるイベントにマッチします。
{
"data": {
"source-ip": [
{
"cidr": "10.0.0.0/24"
}
]
}
}"source-ip": "10.0.0.123" のイベントはマッチします。"source-ip": "192.168.0.123" のイベントはマッチしません。
Null および空文字列の一致
空文字列
フィールドが空文字列 ("") に等しいイベントをマッチします。
{
"data": {
"eventVersion": [
""
]
}
}Null 値
フィールドが null であるイベントをマッチします。
{
"data": {
"responseElements": [
null
]
}
}Null 値と空文字列は異なります。""にマッチするパターンはnullにマッチせず、nullにマッチするパターンは""にマッチしません。
フィールド存在チェック
data オブジェクト内にフィールドが存在するかどうかに基づいてイベントをマッチします。exists 演算子を使用します。
次のパターンは、data.state フィールドが存在しないイベントにマッチします。
{
"data": {
"state": [
{
"exists": false
}
]
}
}"exists": true を設定すると、フィールドが存在するイベントにマッチします。
配列一致
パターン値は配列です。イベントフィールドも配列の場合、EventBridge は 2 つの配列に共通の要素があるかどうか(集合の積)をチェックします。積が空でなければ、イベントはマッチします。
次のパターンは、subject が 3 つの指定値のいずれかに等しいイベントにマッチします。
{
"subject": [
"acs:oss:cn-hangzhou:1234567:xls-papk/game_apk/123.jpg",
"acs:oss:cn-hangzhou:1112223:xls-papk/game_apk/123.jpg",
"acs:oss:cn-hangzhou:4455667:xls-papk/game_apk/123.jpg"
]
}イベントの subject が、これら 3 つの値のいずれかに一致する単一の文字列である場合、イベントはマッチします。イベントの subject が配列である場合、パターン配列と少なくとも 1 つの要素が重複していればイベントはマッチします。
複合条件
1 つのパターン内で複数の演算子を組み合わせて、正確なフィルターを作成します。EventBridge はすべてのキーにわたって AND 論理を適用します。
次のパターンは、プレフィックス、除外、CIDR、および数値マッチングを組み合わせています。
{
"source": [
{
"prefix": "acs."
}
],
"data": {
"state": [
{
"anything-but": "initializing"
}
],
"source-ip": [
{
"cidr": "10.0.0.0/24"
}
],
"c-count": [
{
"numeric": [
">",
0,
"<=",
5
]
}
],
"d-count": [
{
"numeric": [
"<",
10
]
}
],
"x-limit": [
{
"anything-but": [
100,
200,
300
]
}
]
}
}イベントは、次のすべての条件が満たされた場合にのみマッチします。
sourceがacs.で始まるdata.stateがinitializingでないdata.source-ipが10.0.0.0/24内にあるdata.c-countが 0 より大きく、5 以下data.d-countが 10 未満data.x-limitが 100、200、または 300 でない
制限事項
| 項目 | 制限 |
|---|---|
| 数値の範囲 | -1.0e9 ~ +1.0e9 |
| 数値の精度 | 最大 15 桁、小数点以下 6 桁 |
| IP アドレスマッチング | IPv4 のみ |