本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
用於 Amazon 事件模式的比較運算子 EventBridge
以下是中所有可用比較運算子的摘要 EventBridge。
比較運算子僅能在分葉節點上運作,除了 $or
和 anything-but
。
Comparison (比較) | 範例 | Rule syntax (規則語法) | 活動總線支持 | 管道支撐 |
---|---|---|---|---|
及 |
位置為「紐約」,日期是「週一」 |
|
是 |
是 |
無論如何,但 | State 是除了「初始化」之外的任何值。 |
|
是 |
是 |
無論如何,但(開始於) | 地區不在美國。 |
|
是 |
否 |
任何事情,但(以結束) | FileName 不會以 .png 副檔名結尾。 |
|
是 |
否 |
任何事情-但(忽略大小寫) | State 是除「初始化」或任何其他外殼變化之外的任何值,例如「INITIALIZING」。 |
|
是 |
否 |
任何事情-但使用通配符 | FileName 不是包含的檔案路徑 |
|
是 |
否 |
地區位於美國。 |
|
是 |
是 |
|
開頭為 (忽略大小寫) | 服務名稱以字母「eventb」開頭,無論大小寫如何。 |
|
是 |
是 |
LastName 是空的。 |
|
是 |
是 |
|
等於 |
名稱為「Alice」 |
|
是 |
是 |
名稱為「Alice」 |
|
是 |
是 |
|
FileName 以 .png 副檔名結束 |
|
是 |
是 |
|
以 (忽略大小寫) 結束 | 服務名稱以字母「tbridge」或任何其他大小寫變化結尾,例如「TBRIDGE」。 |
|
是 |
是 |
ProductName 存在 |
|
是 |
是 |
|
ProductName 不存在 |
|
是 |
是 |
|
天氣是「下雨」以外的任何天氣 |
|
是 |
是 |
|
UserID 為 Null 值 |
|
是 |
是 |
|
價格為 100 |
|
是 |
是 |
|
價格大於 10,且小於或等於 20 |
|
是 |
是 |
|
或 |
PaymentType 是「信用卡」或「借記卡」 |
|
是 |
是 |
位置為「紐約」,或日期是「週一」。 |
|
是 |
是 |
|
任何副檔名為 .png 的檔案,位於“dir”資料夾內 |
|
是 |
否 |
前綴相符
您可以根據事件來源中某個值的前綴來比對事件。您可以使用前綴匹配字符串值。
例如,下面的事件模式將符合該 "time"
欄位以 "2017-10-02"
開始的任何事件,如 "time": "2017-10-02T18:43:48Z"
。
{
"time": [ { "prefix": "2017-10-02" } ]
}
忽略大小寫的前綴匹配
您還可以匹配前綴值,而不管值開頭的字符的大小寫,結合使用 equals-ignore-case
prefix.
例如,下列事件模式會比對service
欄位以字元字串開始的任何事件EventB
,但也是EVENTB
eventb
、或這些字元的任何其他大寫。
{
"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-case
anything-but
, 以匹配字符串值,而不考慮字符大小寫。
下列事件模式會比對不包含字串「初始化」、「」、INITIALIZING「初始化」或這些字元的任何其他大寫的state
欄位。
{
"detail": {"state" : [{ "anything-but": { "equals-ignore-case": "initializing" }}]}
}
您可以結合使用equals-ignore-case
anything-but
以匹配值列表,以及:
{
"detail": {"state" : [{ "anything-but": { "equals-ignore-case": ["initializing", "stopped"] }}]}
}
任何事情-但匹配前綴
您可以結合使用prefix
anything-but
來比對不以指定值開頭的字串值。這包括單一值或值清單。
下列事件模式會顯示任何符合欄"init"
位中沒有前置詞的事件,但相符項目。"state"
{
"detail": {
"state": [ { "anything-but": { "prefix": "init" } } ]
}
}
下面的事件模式顯示了與前綴值列表一起使用的任何-但匹配。此事件模式會比對沒有前置詞"init"
或"state"
欄位"stop"
中的任何事件。
{
"detail": {
"state" : [{ "anything-but": { "prefix": ["init", "stop"] } } ] }
}
}
任何事情,但匹配後綴
您可以結合使用suffix
anything-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-but
與 numeric
。
{
"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接受事件模式 (例如PutRule
、CreateArchive
UpdateArchive
、和TestEventPattern
) InvalidEventPatternException
如果使用$or
結果超過 1000 個規則組合,則會擲回一個。
若要判定事件模式中的規則組合數,請乘以來自事件模式中每個 $or
陣列的引數總數。例如,上述模式包含一個帶有三個引數的單個 $or
陣列,因此規則組合的總數也是三個。如果您新增了具有兩個引數的另一個 $or
陣列,則規則組合總計會是六個。