Pola event menentukan kriteria yang harus dipenuhi oleh event masuk agar EventBridge mengarahkannya ke target. Saat event tiba dari berbagai sumber dengan struktur berbeda-beda, Anda memerlukan cara untuk memilih hanya event yang relevan bagi pemrosesan downstream. Pola event merupakan objek JSON yang menentukan field dan nilai yang harus sesuai. EventBridge membandingkan setiap event masuk terhadap pola tersebut dan hanya meneruskan event yang cocok.
Pola harus memiliki struktur bersarang yang sama dengan event yang dicocokkannya.
Operator yang didukung
Tabel berikut merangkum semua operator pola. Setiap operator dibungkus dalam array sebagai nilai field.
| Operator | Sesuai ketika... | Contoh sintaksis |
|---|---|---|
| Nilai eksak | Field sama dengan string yang ditentukan | "source": ["acs.oss"] |
prefix | Nilai field diawali dengan string tersebut | "source": [{"prefix": "acs."}] |
suffix | Nilai field diakhiri dengan string tersebut | "subject": [{"suffix": ".jpg"}] |
contains | Nilai field mencakup string tersebut | "type": [{"contains": "Normal"}] |
anything-but | Nilai field tidak sama dengan string, angka, atau himpunan tersebut | "state": [{"anything-but": "initializing"}] |
anything-but + prefix | Nilai field tidak diawali dengan string tersebut | "state": [{"anything-but": {"prefix": "init"}}] |
numeric | Nilai field berada dalam rentang numerik tertentu | "c-count": [{"numeric": [">", 0, "<=", 5]}] |
cidr | Alamat IP berada dalam Blok CIDR (IPv4 saja) | "source-ip": [{"cidr": "10.0.0.0/24"}] |
exists | Field ada atau tidak ada dalam event | "state": [{"exists": false}] |
| String kosong | Field sama dengan string kosong | "eventVersion": [""] |
| Null | Field bernilai null | "responseElements": [null] |
Cara pencocokan bekerja
EventBridge mengevaluasi pola menggunakan dua operator logika:
AND antar kunci: Semua kunci dalam pola harus cocok. Jika pola menentukan
sourcedantype, event harus cocok dengan keduanya.OR antar nilai dalam array: Nilai setiap kunci berupa array. Jika array berisi beberapa nilai, event cocok jika salah satu nilai cocok.
Aturan pencocokan tambahan:
Event harus berisi setiap field yang ditentukan dalam pola. Field tambahan dalam event diabaikan.
Pencocokan dilakukan karakter per karakter dan peka huruf besar/kecil. EventBridge tidak memodifikasi string selama evaluasi.
Semua nilai harus berupa JSON valid: string dalam tanda kutip ganda (
""), kata kunci tanpa tanda kutip (true,false,null), atau nilai numerik.
Pencocokan nilai eksak
Cocokkan event di mana field sama dengan nilai tertentu. Bungkus nilai tersebut dalam array.
Pola berikut mencocokkan event di mana source adalah acs.oss:
{
"source": [
"acs.oss"
]
}Contoh event (cocok):
{
"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
}
}Pencocokan awalan
Cocokkan event di mana nilai field diawali dengan string tertentu. Gunakan operator prefix.
Pola berikut mencocokkan event di mana source diawali dengan acs.:
{
"source": [
{
"prefix": "acs."
}
]
}Filter event OSS berdasarkan awalan nama bucket
Pola event EventBridge tidak mendukung karakter wildcard * untuk mencocokkan nama bucket OSS. Jika Anda menggunakan *, karakter tersebut diperlakukan secara literal dan pencocokan gagal. Untuk mencocokkan nama bucket OSS berdasarkan awalan, gunakan operator prefix yang dibungkus dalam array, dengan format [{"prefix": "value"}]. Format non-array {"prefix": "value"} gagal mencocokkan.
Ada dua cara valid untuk memfilter event berdasarkan awalan nama bucket OSS:
Contoh 1: Cocokkan berdasarkan field data.oss.bucket.name
{
"source": ["acs.oss"],
"data": {
"oss": {
"bucket": {
"name": [
{
"prefix": "corenetic"
}
]
}
}
}
}Contoh 2: Cocokkan berdasarkan field subject
{
"source": ["acs.oss"],
"subject": [
{
"prefix": "acs:oss:cn-hangzhou:1654575930909665:corenetic"
}
]
}Field subject mengikuti format acs:oss:{region}:{accountId}:{bucketName}/{objectKey}. Mencocokkan awalan field subject memungkinkan Anda memfilter event berdasarkan nama bucket OSS.
Pencocokan akhiran
Cocokkan event di mana nilai field diakhiri dengan string tertentu. Gunakan operator suffix.
Pola berikut menggabungkan kondisi awalan dan akhiran. Event cocok jika nilai subject diawali dengan awalan yang ditentukan, ATAU diakhiri dengan .txt, ATAU diakhiri dengan .jpg:
{
"subject": [
{
"prefix": "acs:oss:cn-hangzhou:1234567:xls-papk/"
},
{
"suffix": ".txt"
},
{
"suffix": ".jpg"
}
]
}Beberapa nilai dalam array yang sama dievaluasi dengan logika OR. Event cocok jika salah satu kondisi dalam array terpenuhi.
Pencocokan substring (contains)
Cocokkan event di mana nilai field mencakup substring tertentu. Gunakan operator contains.
Substring tunggal
Pola berikut mencocokkan event di mana type mencakup Normal:
{
"type": [
{
"contains": "Normal"
}
]
}Event dengan "type": "UserNormalEvent" cocok. Event dengan "type": "UserErrorEvent" tidak cocok.
Beberapa substring (OR)
Pola berikut mencocokkan event di mana type mencakup Normal atau Error:
{
"type": [
{
"contains": "Normal"
},
{
"contains": "Error"
}
]
}Event dengan "type": "UserNormalEvent" cocok. Event dengan "type": "UserErrorEvent" juga cocok. Event dengan "type": "UserOtherEvent" tidak cocok.
Pola event tidak mendukung ekspresi reguler untuk pemfilteran. Untuk mencocokkan event yang nilainya mencakup string tertentu, gunakan operator contains sebagai gantinya.
Pola berikut mencocokkan event di mana data.content mencakup com.example.service:
{
"data": {
"content": [
{
"contains": "com.example.service"
}
]
}
}Pola ini berguna untuk memfilter event berdasarkan sebagian path kelas atau nama paket yang terdapat dalam pesan log, seperti com.example.service. Pencocokan nilai eksak terhadap field yang sama akan gagal kecuali nilai field tersebut persis sama dengan string tersebut.
Pencocokan pengecualian (anything-but)
Cocokkan event di mana nilai field TIDAK sama dengan nilai yang ditentukan. Operator anything-but mendukung string, angka, array, dan pengecualian berbasis awalan.
Kecualikan string tunggal
Pola berikut mencocokkan event di mana data.state bukan initializing:
{
"data": {
"state": [
{
"anything-but": "initializing"
}
]
}
}Kecualikan angka tunggal
Pola berikut mencocokkan event di mana data.x-limit bukan 123:
{
"data": {
"x-limit": [
{
"anything-but": 123
}
]
}
}Untuk menggabungkan beberapa pengecualian dengan logika AND, terapkan kondisi anything-but pada field berbeda dalam pola yang sama. Event harus memenuhi setiap pengecualian agar cocok.Kecualikan beberapa string
Pola berikut mencocokkan event di mana data.state bukan stopped maupun overloaded:
{
"data": {
"state": [
{
"anything-but": [
"stopped",
"overloaded"
]
}
]
}
}Event dengan "state": "terminated" cocok. Event dengan "state": "stopped" tidak cocok.
Kecualikan beberapa angka
Pola berikut mencocokkan event di mana data.x-limit bukan 100, 200, atau 300:
{
"data": {
"x-limit": [
{
"anything-but": [
100,
200,
300
]
}
]
}
}Kecualikan berdasarkan awalan
Pola berikut mencocokkan event di mana data.state tidak diawali dengan init:
{
"data": {
"state": [
{
"anything-but": {
"prefix": "init"
}
}
]
}
}Event dengan "state": "pending" cocok. Event dengan "state": "initializing" tidak cocok.
Kecualikan sumber event tertentu
Pola berikut mencocokkan event yang tidak berasal dari Elastic Compute Service (ECS):
{
"source": [
{
"anything-but": [
"acs.ecs"
]
}
]
}Kecualikan semua event layanan Alibaba Cloud
Pola berikut hanya mencocokkan event dari aplikasi kustom dengan mengecualikan semua sumber yang diawali dengan acs.:
{
"source": [
{
"anything-but": {
"prefix": "acs."
}
}
]
}Pencocokan numerik
Cocokkan event di mana field numerik sama dengan nilai tertentu atau berada dalam rentang tertentu. Gunakan operator numeric dengan satu atau lebih operator perbandingan: =, >, <, <=. Tentukan rentang dengan memasangkan dua operator.
Pola berikut mencocokkan event di mana:
data.c-countlebih besar dari 0 dan kurang dari atau sama dengan 5data.d-countkurang dari 10data.x-limitsama dengan 301,8
{
"data": {
"c-count": [
{
"numeric": [
">",
0,
"<=",
5
]
}
],
"d-count": [
{
"numeric": [
"<",
10
]
}
],
"x-limit": [
{
"numeric": [
"=",
301.8
]
}
]
}
}Pencocokan numerik mendukung nilai antara -1,0e9 hingga +1,0e9, dengan presisi hingga 15 digit dan 6 tempat desimal. Nilai harus dalam format numerik JSON.
Pencocokan alamat IP
Cocokkan event di mana field alamat IP berada dalam Blok CIDR. Gunakan operator cidr pada field dalam objek data. Hanya alamat IPv4 yang didukung.
Pola berikut mencocokkan event di mana data.source-ip berada dalam subnet 10.0.0.0/24:
{
"data": {
"source-ip": [
{
"cidr": "10.0.0.0/24"
}
]
}
}Event dengan "source-ip": "10.0.0.123" cocok. Event dengan "source-ip": "192.168.0.123" tidak cocok.
Pencocokan string kosong dan null
String kosong
Cocokkan event di mana field sama dengan string kosong (""):
{
"data": {
"eventVersion": [
""
]
}
}Nilai null
Cocokkan event di mana field bernilai null:
{
"data": {
"responseElements": [
null
]
}
}Nilai null dan string kosong berbeda. Pola yang mencocokkan""tidak cocok dengannull, dan pola yang mencocokkannulltidak cocok dengan"".
Pencocokan keberadaan field
Cocokkan event berdasarkan apakah suatu field ada dalam objek data. Gunakan operator exists.
Pola berikut mencocokkan event di mana field data.state tidak ada:
{
"data": {
"state": [
{
"exists": false
}
]
}
}Atur "exists": true untuk mencocokkan event di mana field tersebut ada.
Pencocokan array
Nilai pola berupa array. Ketika field event juga berupa array, EventBridge memeriksa apakah kedua array memiliki elemen yang sama (irisan himpunan). Jika irisan tidak kosong, event cocok.
Pola berikut mencocokkan event di mana subject sama dengan salah satu dari tiga nilai yang ditentukan:
{
"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"
]
}Jika subject event berupa string tunggal yang cocok dengan salah satu dari tiga nilai tersebut, event cocok. Jika subject event berupa array, event cocok ketika setidaknya satu elemennya tumpang tindih dengan array pola.
Kondisi gabungan
Gabungkan beberapa operator dalam satu pola untuk membuat filter yang tepat. EventBridge menerapkan logika AND pada semua kunci.
Pola berikut menggabungkan pencocokan awalan, pengecualian, CIDR, dan numerik:
{
"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
]
}
]
}
}Event cocok hanya jika SEMUA kondisi berikut benar:
sourcediawali denganacs.data.statebukaninitializingdata.source-ipberada dalam10.0.0.0/24data.c-countlebih besar dari 0 dan paling banyak 5data.d-countkurang dari 10data.x-limitbukan 100, 200, atau 300
Batasan
| Item | Batas |
|---|---|
| Rentang nilai numerik | -1,0e9 hingga +1,0e9 |
| Presisi numerik | Hingga 15 digit, 6 tempat desimal |
| Pencocokan alamat IP | IPv4 saja |