Olay kalıpları, EventBridge'in gelen olayları bir hedefe yönlendirmeden önce karşılaması gereken kriterleri tanımlar. Farklı kaynaklardan çeşitli yapılarla gelen olaylar arasında yalnızca alt akış işlemeniz için ilgili olanları seçmeniz gerekir. Bir olay kalıbı, eşleştirilecek alanları ve değerleri belirten bir JSON nesnesidir. EventBridge, her gelen olayı kalıpla karşılaştırır ve yalnızca eşleşen olayları iletir.
Bir kalıp, eşleştirdiği olaylarla aynı iç içe geçmiş yapıya sahip olmalıdır.
Desteklenen operatörler
Aşağıdaki tabloda tüm kalıp operatörleri özetlenmiştir. Her operatör, alan değeri olarak bir dizi içinde yer alır.
| Operatör | Ne zaman eşleşir... | Sözdizimi örneği |
|---|---|---|
| Tam değer | Alan belirtilen dizeye eşittir | "source": ["acs.oss"] |
prefix |
Alan değeri dize ile başlar | "source": [{"prefix": "acs."}] |
suffix |
Alan değeri dize ile biter | "subject": [{"suffix": ".jpg"}] |
contains |
Alan değeri dizeyi içerir | "type": [{"contains": "Normal"}] |
anything-but |
Alan değeri dizeye, sayıya veya kümeye eşit değildir | "state": [{"anything-but": "initializing"}] |
anything-but + prefix |
Alan değeri dize ile başlamaz | "state": [{"anything-but": {"prefix": "init"}}] |
numeric |
Alan değeri sayısal bir aralıkta yer alır | "c-count": [{"numeric": [">", 0, "<=", 5]}] |
cidr |
IP adresi bir CIDR bloğu içinde yer alır (yalnızca IPv4) | "source-ip": [{"cidr": "10.0.0.0/24"}] |
exists |
Alan olayda vardır veya yoktur | "state": [{"exists": false}] |
| Boş dize | Alan boş dizeye eşittir | "eventVersion": [""] |
| Null | Alan null değerindedir | "responseElements": [null] |
Eşleşme nasıl çalışır
EventBridge, kalıpları iki mantıksal operatör kullanarak değerlendirir:
Anahtarlar arasında AND: Kalıptaki tüm anahtarlar eşleşmelidir. Bir kalıp hem
sourcehem detypebelirtiyorsa olayın her ikisiyle de eşleşmesi gerekir.Bir dizideki değerler arasında OR: Her anahtarın değeri bir dizidir. Dizi birden fazla değer içeriyorsa herhangi bir değer eşleştiğinde olay eşleşmiş olur.
Ek eşleşme kuralları:
Olay, kalıpta belirtilen her alanı içermelidir. Olaydaki ek alanlar yoksayılır.
Eşleşme karakter karakter ve büyük/küçük harfe duyarlıdır. EventBridge, değerlendirme sırasında dizeleri değiştirmez.
Tüm değerler geçerli JSON olmalıdır: çift tırnak içinde dizeler (
""), tırnaksız anahtar sözcükler (true,false,null) veya sayısal değerler.
Tam değer eşleşmesi
Bir alanın belirli bir değere eşit olduğu olayları eşleştirin. Değeri bir dizi içine alın.
Aşağıdaki kalıp, source alanının acs.oss olduğu olayları eşleştirir:
{
"source": [
"acs.oss"
]
}
Örnek olay (eşleşen):
{
"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
}
}
Önek eşleşmesi
Bir alan değerinin belirtilen bir dizeyle başladığı olayları eşleştirin. prefix operatörünü kullanın.
Aşağıdaki kalıp, source alanının acs. ile başladığı olayları eşleştirir:
{
"source": [
{
"prefix": "acs."
}
]
}
OSS paket adı önekine göre filtreleme
EventBridge olay kalıpları, OSS paket adlarını eşleştirmek için joker karakter * kullanımını desteklemez. * kullanırsanız bu karakter değişmez bir karakter olarak değerlendirilir ve eşleşme başarısız olur. OSS paket adlarını öneke göre eşleştirmek için prefix operatörünü [{"prefix": "value"}] biçiminde bir dizi içine alın. Dizi olmayan {"prefix": "value"} biçimi eşleşmeyi sağlayamaz.
OSS paket adı önekine göre olayları filtrelemek için iki geçerli yol vardır:
**Örnek 1: data.oss.bucket.name alanına göre eşleştirme**
{
"source": ["acs.oss"],
"data": {
"oss": {
"bucket": {
"name": [
{
"prefix": "corenetic"
}
]
}
}
}
}
**Örnek 2: subject alanına göre eşleştirme**
{
"source": ["acs.oss"],
"subject": [
{
"prefix": "acs:oss:cn-hangzhou:1654575930909665:corenetic"
}
]
}
subject alanı acs:oss:{region}:{accountId}:{bucketName}/{objectKey} biçimini izler. subject alanının bir önekini eşleştirmek, olayları OSS paket adına göre filtrelemenizi sağlar.
Sonek eşleşmesi
Bir alan değerinin belirtilen bir dizeyle bittiği olayları eşleştirin. suffix operatörünü kullanın.
Aşağıdaki kalıp önek ve sonek koşullarını birleştirir. subject değeri belirtilen önekle başlarsa VEYA .txt ile biterse VEYA .jpg ile biterse olay eşleşir:
{
"subject": [
{
"prefix": "acs:oss:cn-hangzhou:1234567:xls-papk/"
},
{
"suffix": ".txt"
},
{
"suffix": ".jpg"
}
]
}
Aynı dizideki birden fazla değer OR mantığıyla değerlendirilir. Dizideki tek bir koşul bile sağlanırsa olay eşleşir.
İçerik eşleşmesi
Bir alan değerinin belirtilen bir alt dizeyi içerdiği olayları eşleştirin. contains operatörünü kullanın.
Tek alt dize
Aşağıdaki kalıp, type alanının Normal içerdiği olayları eşleştirir:
{
"type": [
{
"contains": "Normal"
}
]
}
"type": "UserNormalEvent" içeren bir olay eşleşir. "type": "UserErrorEvent" içeren bir olay eşleşmez.
Birden fazla alt dize (OR)
Aşağıdaki kalıp, type alanının Normal veya Error içerdiği olayları eşleştirir:
{
"type": [
{
"contains": "Normal"
},
{
"contains": "Error"
}
]
}
"type": "UserNormalEvent" içeren bir olay eşleşir. "type": "UserErrorEvent" içeren bir olay da eşleşir. "type": "UserOtherEvent" içeren bir olay eşleşmez.
Olay kalıpları, filtreleme için düzenli ifadeleri desteklemez. Bir alan değerinin belirli bir dize içerdiği olayları eşleştirmek için bunun yerine contains operatörünü kullanın.
Aşağıdaki kalıp, data.content alanının com.example.service içerdiği olayları eşleştirir:
{
"data": {
"content": [
{
"contains": "com.example.service"
}
]
}
}
Bu kalıp, bir günlük mesajında yer alan kısmi sınıf yolu veya paket adıyla (örneğin com.example.service) olayları filtrelemek için kullanışlıdır. Aynı alana yönelik tam değer eşleşmesi, alan değeri dizeyle tam olarak eşleşmediği sürece başarısız olur.
Hariç tutma eşleşmesi (anything-but)
Bir alan değerinin belirtilen değerlere eşit OLMADIĞI olayları eşleştirin. anything-but operatörü dizeleri, sayıları, dizileri ve önek tabanlı hariç tutmaları destekler.
Tek bir dizeyi hariç tutma
Aşağıdaki kalıp, data.state alanının initializing olmadığı olayları eşleştirir:
{
"data": {
"state": [
{
"anything-but": "initializing"
}
]
}
}
Tek bir sayıyı hariç tutma
Aşağıdaki kalıp, data.x-limit alanının 123 olmadığı olayları eşleştirir:
{
"data": {
"x-limit": [
{
"anything-but": 123
}
]
}
}
Birden fazla hariç tutmayı AND mantığıyla birleştirmek için aynı kalıptaki farklı alanlara anything-but koşulları uygulayın. Olayın eşleşmesi için her bir hariç tutmayı karşılaması gerekir.
Birden fazla dizeyi hariç tutma
Aşağıdaki kalıp, data.state alanının ne stopped ne de overloaded olduğu olayları eşleştirir:
{
"data": {
"state": [
{
"anything-but": [
"stopped",
"overloaded"
]
}
]
}
}
"state": "terminated" içeren bir olay eşleşir. "state": "stopped" içeren bir olay eşleşmez.
Birden fazla sayıyı hariç tutma
Aşağıdaki kalıp, data.x-limit alanının 100, 200 veya 300 olmadığı olayları eşleştirir:
{
"data": {
"x-limit": [
{
"anything-but": [
100,
200,
300
]
}
]
}
}
Öneke göre hariç tutma
Aşağıdaki kalıp, data.state alanının init ile başlamadığı olayları eşleştirir:
{
"data": {
"state": [
{
"anything-but": {
"prefix": "init"
}
}
]
}
}
"state": "pending" içeren bir olay eşleşir. "state": "initializing" içeren bir olay eşleşmez.
Belirli bir olay kaynağını hariç tutma
Aşağıdaki kalıp, Elastic Compute Service (ECS) kaynağından gelmeyen olayları eşleştirir:
{
"source": [
{
"anything-but": [
"acs.ecs"
]
}
]
}
Tüm Alibaba Cloud hizmet olaylarını hariç tutma
Aşağıdaki kalıp, acs. önekiyle başlayan tüm kaynakları hariç tutarak yalnızca özel uygulamalardan gelen olayları eşleştirir:
{
"source": [
{
"anything-but": {
"prefix": "acs."
}
}
]
}
Sayısal eşleşme
Sayısal bir alanın belirli bir değere eşit olduğu veya bir aralıkta yer aldığı olayları eşleştirin. numeric operatörünü bir veya daha fazla karşılaştırma operatörüyle birlikte kullanın: =, >, <, <=. Bir aralık belirtmek için iki operatörü eşleştirin.
Aşağıdaki kalıp şu koşulları sağlayan olayları eşleştirir:
data.c-count0'dan büyük ve 5'e eşit veya küçüktürdata.d-count10'dan küçüktürdata.x-limit301,8'e eşittir
{
"data": {
"c-count": [
{
"numeric": [
">",
0,
"<=",
5
]
}
],
"d-count": [
{
"numeric": [
"<",
10
]
}
],
"x-limit": [
{
"numeric": [
"=",
301.8
]
}
]
}
}
Sayısal eşleşme, -1,0e9 ile +1,0e9 arasındaki değerleri destekler; hassasiyet 15 basamak ve 6 ondalık basamakla sınırlıdır. Değerler JSON sayısal biçiminde olmalıdır.
IP adresi eşleşmesi
Bir IP adresi alanının bir CIDR bloğu içinde yer aldığı olayları eşleştirin. cidr operatörünü data nesnesindeki bir alanda kullanın. Yalnızca IPv4 adresleri desteklenir.
Aşağıdaki kalıp, data.source-ip alanının 10.0.0.0/24 alt ağında olduğu olayları eşleştirir:
{
"data": {
"source-ip": [
{
"cidr": "10.0.0.0/24"
}
]
}
}
"source-ip": "10.0.0.123" içeren bir olay eşleşir. "source-ip": "192.168.0.123" içeren bir olay eşleşmez.
Null ve boş dize eşleşmesi
Boş dize
Bir alanın boş dizeye ("") eşit olduğu olayları eşleştirin:
{
"data": {
"eventVersion": [
""
]
}
}
Null değeri
Bir alanın null olduğu olayları eşleştirin:
{
"data": {
"responseElements": [
null
]
}
}
Null değeri ile boş dize farklıdır.""ile eşleşen bir kalıpnullile eşleşmez venullile eşleşen bir kalıp""ile eşleşmez.
Alan varlığı eşleşmesi
data nesnesinde bir alanın var olup olmamasına göre olayları eşleştirin. exists operatörünü kullanın.
Aşağıdaki kalıp, data.state alanının bulunmadığı olayları eşleştirir:
{
"data": {
"state": [
{
"exists": false
}
]
}
}
Alanın bulunduğu olayları eşleştirmek için "exists": true ayarlayın.
Dizi eşleşmesi
Kalıp değerleri dizilerdir. Bir olay alanı da bir dizi olduğunda EventBridge, iki dizinin herhangi bir ortak öğeye sahip olup olmadığını (küme kesişimi) denetler. Kesişim boş değilse olay eşleşir.
Aşağıdaki kalıp, subject alanının belirtilen üç değerden birine eşit olduğu olayları eşleştirir:
{
"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"
]
}
Olayın subject alanı üç değerden herhangi biriyle eşleşen tek bir dize ise olay eşleşir. Olayın subject alanı bir dizi ise en az bir öğe kalıp dizisiyle örtüşüyorsa olay eşleşir.
Birleştirilmiş koşullar
Kesin filtreler oluşturmak için tek bir kalıpta birden fazla operatörü birleştirin. EventBridge, tüm anahtarlara AND mantığını uygular.
Aşağıdaki kalıp önek, hariç tutma, CIDR ve sayısal eşleştirmeyi birleştirir:
{
"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
]
}
]
}
}
Bir olay yalnızca AŞAĞIDAKİLERİN HEPSİ doğru olduğunda eşleşir:
sourceacs.ile başlardata.stateinitializingdeğildirdata.source-ip10.0.0.0/24aralığındadırdata.c-count0'dan büyüktür ve en fazla 5'tirdata.d-count10'dan küçüktürdata.x-limit100, 200 veya 300 değildir
Sınırlamalar
| Öğe | Sınır |
|---|---|
| Sayısal değer aralığı | -1,0e9 ile +1,0e9 |
| Sayısal hassasiyet | En fazla 15 basamak, 6 ondalık basamak |
| IP adresi eşleşmesi | Yalnızca IPv4 |