用於 Amazon 事件模式的比較運算子 EventBridge - Amazon EventBridge

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

用於 Amazon 事件模式的比較運算子 EventBridge

以下是中所有可用比較運算子的摘要 EventBridge。

比較運算子僅能在分葉節點上運作,除了 $oranything-but

Comparison (比較) 範例 Rule syntax (規則語法) 活動總線支持 管道支撐

位置為「紐約」,日期是「週一」

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

無論如何,但 State 是除了「初始化」之外的任何值。

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

無論如何,但(開始於)

地區不在美國。

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

任何事情,但(以結束)

FileName 不會以 .png 副檔名結尾。

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

任何事情-但(忽略大小寫)

State 是除「初始化」或任何其他外殼變化之外的任何值,例如「INITIALIZING」。

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

任何事情-但使用通配符

FileName 不是包含的檔案路徑/lib/

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

開頭為

地區位於美國。

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

開頭為 (忽略大小寫)

服務名稱以字母「eventb」開頭,無論大小寫如何。

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

空白

LastName 是空的。

"LastName": [""]

等於

名稱為「Alice」

"Name": [ "Alice" ]

等於 (忽略大小寫)

名稱為「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 } ]

Not

天氣是「下雨」以外的任何天氣

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

Null

UserID 為 Null 值

"UserID": [ null ]

數字 (等於)

價格為 100

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

數字 (範圍)

價格大於 10,且小於或等於 20

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

PaymentType 是「信用卡」或「借記卡」

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

或 (多個欄位)

位置為「紐約」,或日期是「週一」。

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

萬用字元

任何副檔名為 .png 的檔案,位於“dir”資料夾內

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

前綴相符

您可以根據事件來源中某個值的前綴來比對事件。您可以使用前綴匹配字符串值。

例如,下面的事件模式將符合該 "time" 欄位以 "2017-10-02" 開始的任何事件,如 "time": "2017-10-02T18:43:48Z"

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

忽略大小寫的前綴匹配

您還可以匹配前綴值,而不管值開頭的字符的大小寫,結合使用 equals-ignore-case prefix.

例如,下列事件模式會比對service欄位以字元字串開始的任何事件EventB,但也是EVENTBeventb、或這些字元的任何其他大寫。

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

後綴相符

您可以根據事件來源中某個值的後綴來比對事件。您可以使用字串值的後綴比對。

例如,下面的事件模式將符合該 "FileName" 欄位以 .png 檔案副檔名結束的任何事件。

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

忽略大小寫時的後綴匹配

您也可以匹配後綴值,而不管值結尾的字符的大小寫,結合使用 equals-ignore-case suffix.

例如,下列事件模式會比對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「初始化」或這些字元的任何其他大寫的state欄位。

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

您可以結合使用equals-ignore-caseanything-but以匹配值列表,以及:

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

任何事情-但匹配前綴

您可以結合使用prefixanything-but來比對不以指定值開頭的字串值。這包括單一值或值清單。

下列事件模式會顯示任何符合欄"init"位中沒有前置詞的事件,但相符項目。"state"

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

下面的事件模式顯示了與前綴值列表一起使用的任何-但匹配。此事件模式會比對沒有前置詞"init""state"欄位"stop"中的任何事件。

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

任何事情,但匹配後綴

您可以結合使用suffixanything-but來比對不以指定值結尾的字串值。這包括單一值或值清單。

下列事件模式會比對未以結尾之FileName欄位的任何值.txt

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

下面的事件模式顯示了與後綴值列表一起使用的任何但匹配。此事件模式匹配不以.txt或結尾的FileName字段的任何值.rtf

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

任何事情-但使用通配符匹配

除了比對之外,您可以在指定的值中使用萬用字元 (*)。這包括單一值或值清單。

下列事件模式會比對不包含FileName欄位的任何值/lib/

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

下面的事件模式顯示了與包括通配符在內的值列表中使用的任何-但匹配。此事件模式匹配不包含/lib/或的FileName字段的任何值/bin/

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

如需詳細資訊,請參閱使用萬用字元比對

數值比對

數字匹配適用於數JSON字值。數值比對僅限於 -5.0e9 和 +5.0e9 之間的值,具有 15 位數的精確度,或小數點後六位數。

以下顯示事件模式的數值比對,該模式僅符合所有欄位皆為 True 的事件。

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

IP 地址比對

您可以使用 IP 位址比對IPv4和位IPv6址。下列事件模式顯示針對 IP 地址的比對,這些 IP 地址以 10.0.0 開始,並以 0 到 255 之間的數字結尾。

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

前面的事件模式不NOT匹配以下事件,因為它沒有一個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 } } }

電子quals-ignore-case匹配

無論大小寫如何,E quals-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 } } }

使用萬用字元比對

您可以使用萬用字元 (*) 來比對事件模式中的字串值。

注意

目前,僅在事件匯流排規則中支援萬用字元。

在事件模式中使用萬用字元時的考量事項:

  • 您可以在指定的字串值中指定任意數目的萬用字元,但不支援連續的萬用字元。

  • EventBridge 支援使用反斜線字元 (\) 在萬用字元篩選器中指定常值 * 和\ 字元:

    • 該字符串 \* 表示常值 * 字元

    • 該字符串 \\ 表示常值 \ 字元

    不支援使用反斜線來逸出其他字元。

萬用字元和事件模式複雜性

使用萬用字元規則的複雜程度有限。如果規則太複雜,則在嘗試建立規則InvalidEventPatternException時 EventBridge 傳回。如果您的規則產生此類錯誤,請考慮使用以下指導來降低事件模式的複雜性:

  • 減少使用的萬用字元數

    僅有在您真正需要匹配多個可能值的情況下使用萬用字元。例如,請考慮下列事件模式,在此模式下您想要比對相同區域中的事件匯流排:

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

僅有在評估 location 時才會將 { "anything-but": "us-east" } 考慮進去。

具有 $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 ] } ] } ] } }
注意

APIs接受事件模式 (例如PutRuleCreateArchiveUpdateArchive、和TestEventPattern) InvalidEventPatternException 如果使用$or結果超過 1000 個規則組合,則會擲回一個。

若要判定事件模式中的規則組合數,請乘以來自事件模式中每個 $or 陣列的引數總數。例如,上述模式包含一個帶有三個引數的單個 $or 陣列,因此規則組合的總數也是三個。如果您新增了具有兩個引數的另一個 $or 陣列,則規則組合總計會是六個。