Pemfilteran konten dalam pola EventBridge acara Amazon - Amazon EventBridge

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pemfilteran konten dalam pola EventBridge acara Amazon

Amazon EventBridge mendukung penyaringan konten deklaratif menggunakan pola peristiwa. Dengan penyaringan konten, Anda dapat menulis pola peristiwa kompleks yang hanya cocok dengan peristiwa menurut kondisi yang sangat spesifik. Misalnya, Anda dapat membuat pola acara yang cocok dengan acara saat:

  • Bidang acara berada dalam rentang numerik tertentu.

  • Acara ini berasal dari alamat IP tertentu.

  • Bidang tertentu tidak ada di acara JSON.

penting

Di EventBridge, dimungkinkan untuk membuat aturan yang dapat menyebabkan higher-than-expected pengisian daya dan pelambatan. Misalnya, Anda dapat secara tidak sengaja membuat aturan yang mengarah ke loop tak terbatas, di mana aturan dijalankan secara rekursif tanpa akhir. Misalkan Anda membuat aturan untuk mendeteksi bahwa ACL telah berubah pada bucket Amazon S3, dan memicu perangkat lunak untuk mengubahnya ke status yang diinginkan. Jika aturan tidak ditulis dengan hati-hati, perubahan berikutnya pada ACL akan mengaktifkan kembali aturan, yang membuat loop tak terbatas.

Untuk panduan tentang cara menulis aturan dan pola peristiwa yang tepat untuk meminimalkan hasil yang tidak terduga tersebut, lihat Praktik terbaik saat mendefinisikan aturan Amazon EventBridge danPraktik terbaik saat mendefinisikan pola EventBridge acara Amazon.

Pencocokan prefiks

Anda dapat mencocokkan peristiwa bergantung pada prefiks nilai dalam sumber peristiwa. Anda dapat menggunakan pencocokan awalan untuk nilai string.

Sebagai contoh, pola peristiwa berikut ini akan cocok dengan peristiwa di mana bidang "time" dimulai dengan "2017-10-02" seperti "time": "2017-10-02T18:43:48Z".

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

Pencocokan awalan sambil mengabaikan kasus

Anda juga dapat mencocokkan nilai awalan terlepas dari casing karakter yang dimulai dengan nilai, menggunakan equals-ignore-case bersama dengan prefix.

Misalnya, pola peristiwa berikut akan cocok dengan peristiwa di mana service bidang dimulai dengan string karakterEventB, tetapi jugaEVENTB,eventb, atau huruf besar lainnya dari karakter tersebut.

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

Pencocokan akhiran

Anda dapat mencocokkan acara tergantung pada akhiran nilai di sumber acara. Anda dapat menggunakan pencocokan akhiran untuk nilai string.

Misalnya, pola acara berikut akan cocok dengan acara apa pun di mana "FileName" bidang diakhiri dengan ekstensi .png file.

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

Pencocokan akhiran sambil mengabaikan kasus

Anda juga dapat mencocokkan nilai akhiran terlepas dari casing karakter yang diakhiri dengan nilai, menggunakan equals-ignore-case bersama dengan suffix.

Misalnya, pola peristiwa berikut akan cocok dengan peristiwa apa pun di mana FileName bidang diakhiri dengan string karakter.png, tetapi juga .PNG atau huruf besar lainnya dari karakter tersebut.

{ "detail": {"FileName" : [{ "suffix": { "equals-ignore-case": ".png" }}]} }

Apa saja tapi tidak cocok

Apa pun-kecuali cocok dengan apa pun kecuali apa yang ditentukan dalam aturan.

Anda dapat menggunakan apa pun yang cocok dengan nilai string dan nilai numerik, termasuk daftar yang hanya berisi string, atau hanya angka.

Pola peristiwa berikut ini menunjukkan apa pun yang cocok dengan string dan angka.

{ "detail": { "state": [ { "anything-but": "initializing" } ] } } { "detail": { "x-limit": [ { "anything-but": 123 } ] } }

Pola peristiwa berikut ini menunjukkan apa pun yang cocok dengan daftar string.

{ "detail": { "state": [ { "anything-but": [ "stopped", "overloaded" ] } ] } }

Pola peristiwa berikut ini menunjukkan apa pun yang cocok dengan daftar angka.

{ "detail": { "x-limit": [ { "anything-but": [ 100, 200, 300 ] } ] } }

Apa pun-kecuali cocok sambil mengabaikan kasus

Anda juga dapat menggunakan equals-ignore-case bersama dengananything-but, untuk mencocokkan nilai string terlepas dari casing karakter.

Pola peristiwa berikut cocok dengan state bidang yang tidak berisi string “inisialisasi”, “INISIALISASI”, “Inisialisasi”, atau huruf besar lainnya dari karakter tersebut.

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

Anda dapat menggunakan equals-ignore-case bersama dengan anything-but untuk mencocokkan dengan daftar nilai juga:

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

Apa pun-kecuali cocok pada awalan

Anda dapat menggunakan prefix bersama dengan anything-but untuk mencocokkan nilai string yang tidak dimulai dengan nilai yang ditentukan. Ini termasuk nilai tunggal, atau daftar nilai.

Pola acara berikut menunjukkan apa pun - tetapi cocok yang cocok dengan acara apa pun yang tidak memiliki awalan di lapangan"init". "state"

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

Pola acara berikut menunjukkan apa-tapi pencocokan yang digunakan dengan daftar nilai awalan. Pola acara ini cocok dengan peristiwa apa pun yang tidak memiliki awalan "init" atau "stop" di "state" lapangan.

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

Apa pun-kecuali cocok pada sufiks

Anda dapat menggunakan suffix bersama dengan anything-but untuk mencocokkan nilai string yang tidak berakhir dengan nilai yang ditentukan. Ini termasuk nilai tunggal, atau daftar nilai.

Pola peristiwa berikut cocok dengan nilai apapun untuk FileName bidang yang tidak berakhir dengan.txt.

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

Pola acara berikut menunjukkan apa pun-tetapi pencocokan yang digunakan dengan daftar nilai akhiran. Pola acara ini cocok dengan nilai apapun untuk FileName bidang yang tidak berakhir dengan salah satu .txt atau.rtf.

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

Apa pun-kecuali mencocokkan menggunakan wildcard

Anda dapat menggunakan karakter wildcard (*) dalam nilai yang Anda tentukan untuk apa pun-kecuali pencocokan. Ini termasuk nilai tunggal, atau daftar nilai.

Pola peristiwa berikut cocok dengan nilai apapun untuk FileName bidang yang tidak mengandung/lib/.

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

Pola acara berikut menunjukkan apa pun-tetapi pencocokan yang digunakan dengan daftar nilai termasuk wildcard. Pola acara ini cocok dengan nilai apapun untuk FileName bidang yang tidak mengandung salah satu /lib/ atau/bin/.

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

Untuk informasi selengkapnya, lihat Pencocokan menggunakan wildcard.

Pencocokan numerik

Pencocokan numerik bekerja dengan nilai yang merupakan angka JSON. Ini terbatas pada nilai antara -5.0e9 dan +5.0e9 inklusif, dengan 15 digit presisi, atau enam digit di sebelah kanan titik desimal.

Berikut ini menunjukkan pencocokan numerik untuk pola peristiwa yang hanya cocok dengan peristiwa yang betul untuk semua bidang.

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

Pencocokan alamat IP

Anda dapat menggunakan alamat IP yang cocok untuk alamat IPv4 dan IPv6. Pola peristiwa berikut menunjukkan alamat IP yang cocok dengan alamat IP yang dimulai dengan 10.0.0 dan diakhiri dengan angka antara 0 dan 255.

{ "detail": { "sourceIPAddress": [ { "cidr": "10.0.0.0/24" } ] } }

Pencocokan yang ada

Pencocokan yang ada bekerja pada ada tidaknya bidang di JSON peristiwa.

Pencocokan yang ada hanya bekerja pada simpul daun. Pencocokan yang ada tidak berfungsi pada simpul intermediet.

Pola acara berikut cocok dengan setiap peristiwa yang memiliki detail.state bidang.

{ "detail": { "state": [ { "exists": true } ] } }

Pola peristiwa sebelumnya cocok dengan peristiwa berikut ini.

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

Pola peristiwa sebelumnya TIDAK cocok dengan peristiwa berikut karena tidak memiliki detail.state bidang.

{ "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-casePencocokan E

quals-ignore-casePencocokan E bekerja pada nilai string terlepas dari kasusnya.

Pola peristiwa berikut cocok dengan peristiwa apa pun yang memiliki detail-type bidang yang cocok dengan string yang ditentukan, apa pun kasusnya.

{ "detail-type": [ { "equals-ignore-case": "ec2 instance state-change notification" } ] }

Pola peristiwa sebelumnya cocok dengan peristiwa berikut ini.

{ "detail-type": [ "EC2 Instance State-change Notification" ], "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-02ebd4584a2ebd341" ], "detail": { "c-count" : { "c1" : 100 } } }

Pencocokan menggunakan wildcard

Anda dapat menggunakan karakter wildcard (*) untuk mencocokkan nilai string dalam pola acara.

catatan

Saat ini karakter wildcard didukung hanya dalam aturan bus acara.

Pertimbangan saat menggunakan wildcard dalam pola acara Anda:

  • Anda dapat menentukan sejumlah karakter wildcard dalam nilai string tertentu; Namun, karakter wildcard berturut-turut tidak didukung.

  • EventBridge mendukung penggunaan karakter garis miring terbalik (\) untuk menentukan karakter * dan\ literal dalam filter wildcard:

    • String \* mewakili karakter * literal

    • String \\ mewakili karakter\ literal

    Menggunakan garis miring terbalik untuk melarikan diri dari karakter lain tidak didukung.

Wildcard dan kompleksitas pola acara

Ada batasan seberapa rumit aturan menggunakan wildcard. Jika aturan terlalu rumit, EventBridge mengembalikan InvalidEventPatternException ketika mencoba untuk membuat aturan. Jika aturan Anda menghasilkan kesalahan seperti itu, pertimbangkan untuk menggunakan panduan di bawah ini untuk mengurangi kompleksitas pola acara:

  • Mengurangi jumlah karakter wildcard yang digunakan

    Hanya gunakan karakter wildcard di mana Anda benar-benar perlu mencocokkan dengan beberapa nilai yang mungkin. Misalnya, pertimbangkan pola acara berikut, di mana Anda ingin mencocokkan dengan bus acara di Wilayah yang sama:

    { "EventBusArn": [ { "wildcard": "*:*:*:*:*:event-bus/*" } ] }

    Dalam kasus di atas, banyak bagian dari ARN akan langsung didasarkan pada Wilayah di mana bus acara Anda berada. Jadi jika Anda menggunakan us-east-1 Region, pola yang kurang kompleks yang masih cocok dengan nilai yang diinginkan mungkin adalah contoh berikut:

    { "EventBusArn": [ { "wildcard": "arn:aws:events:us-east-1:*:event-bus/*" } ] }
  • Kurangi urutan karakter berulang yang terjadi setelah karakter wildcard

    Memiliki urutan karakter yang sama muncul beberapa kali setelah penggunaan wildcard meningkatkan kompleksitas pemrosesan pola acara. Sesuaikan kembali pola acara Anda untuk meminimalkan urutan berulang. Misalnya, perhatikan contoh berikut, yang cocok pada file nama doc.txt file untuk setiap pengguna:

    { "FileName": [ { "wildcard": "/Users/*/dir/dir/dir/dir/dir/doc.txt" } ] }

    Jika Anda tahu bahwa doc.txt file hanya akan terjadi di jalur yang ditentukan, Anda dapat mengurangi urutan karakter berulang dengan cara ini:

    { "FileName": [ { "wildcard": "/Users/*/doc.txt" } ] }

Contoh kompleks dengan beberapa pencocokan

Anda dapat menggabungkan beberapa aturan pencocokan ke dalam pola peristiwa yang lebih kompleks. Sebagai contoh, pola peristiwa berikut ini menggabungkan anything-but dan 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 ] } ] } }
catatan

Saat membangun pola acara, jika Anda menyertakan kunci lebih dari sekali, referensi terakhir akan menjadi referensi yang digunakan untuk mengevaluasi peristiwa. Misalnya, untuk pola berikut:

{ "detail": { "location": [ { "prefix": "us-" } ], "location": [ { "anything-but": "us-east" } ] } }

hanya { "anything-but": "us-east" } akan diperhitungkan saat mengevaluasi. location

Contoh kompleks dengan $or pencocokan

Anda juga dapat membuat pola peristiwa kompleks yang memeriksa untuk melihat apakah ada nilai bidang yang cocok, di beberapa bidang. Gunakan $or untuk membuat pola acara yang cocok jika salah satu nilai untuk beberapa bidang cocok.

Perhatikan bahwa Anda dapat menyertakan jenis filter lain, seperti pencocokan numerik dan array, dalam pencocokan pola Anda untuk masing-masing bidang dalam konstruksi Anda$or.

Pola acara berikut cocok jika salah satu dari kondisi berikut terpenuhi:

  • c-countBidang lebih besar dari 0 atau kurang dari atau sama dengan 5.

  • d-countBidang kurang dari 10.

  • x-limitBidang sama dengan 3.018e2.

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

API yang menerima pola peristiwa (sepertiPutRule,CreateArchive,UpdateArchive, danTestEventPattern) akan menampilkan InvalidEventPatternException jika penggunaan $or menghasilkan lebih dari 1000 kombinasi aturan.

Untuk menentukan jumlah kombinasi aturan dalam pola peristiwa, kalikan jumlah total argumen dari setiap $or array dalam pola peristiwa. Misalnya, pola di atas berisi $or array tunggal dengan tiga argumen, sehingga jumlah total kombinasi aturan juga tiga. Jika Anda menambahkan $or array lain dengan dua argumen, kombinasi aturan total akan menjadi enam.