Menggunakan Common Expression Language

Common Expression Language (CEL) adalah bahasa open source non-Turing-complete yang dapat digunakan untuk mengevaluasi ekspresi. Setiap pendaftaran di Eventarc Advanced menyertakan ekspresi kondisi yang ditulis dalam CEL yang digunakan untuk mengevaluasi dan memfilter pesan. Anda juga dapat mengubah konten data peristiwa dengan menulis ekspresi transformasi menggunakan CEL.

Secara umum, ekspresi kondisi terdiri dari satu atau beberapa pernyataan yang digabungkan dengan operator logis (&&, ||, atau !). Setiap pernyataan menyatakan aturan berbasis atribut yang diterapkan ke data. Paling umum, operator digunakan untuk membandingkan nilai yang terdapat dalam variabel dengan nilai literal.

Misalnya, jika nilai message.type adalah google.cloud.dataflow.job.v1beta3.statusChanged, maka ekspresi message.type == "google.cloud.dataflow.job.v1beta3.statusChanged" akan bernilai True.

Untuk informasi selengkapnya, lihat referensi berikut:

Atribut yang tersedia

Semua atribut konteks peristiwa dapat diakses sebagai variabel melalui objek message yang telah ditentukan sebelumnya. Variabel ini diisi dengan nilai berdasarkan atribut konteks peristiwa saat runtime. Pendaftaran dapat menggunakan variabel untuk menyatakan atribut tertentu. Misalnya, message.type menampilkan nilai atribut type.

Perhatikan hal berikut:

  • Peristiwa dapat menyertakan, dan pendaftaran dapat menggunakan, sejumlah atribut CloudEvents kustom tambahan dengan nama yang berbeda (juga dikenal sebagai atribut ekstensi). Namun, keduanya direpresentasikan sebagai jenis String dalam ekspresi CEL, terlepas dari format sebenarnya. Anda dapat menggunakan ekspresi CEL untuk mentransmisikan nilainya ke jenis lain.

  • Anda tidak dapat mengevaluasi pendaftaran berdasarkan konten payload peristiwa. message.data dan message.data_base64 adalah variabel yang dicadangkan dan tidak dapat digunakan dalam ekspresi. Namun, CEL didukung saat mengubah data peristiwa yang memungkinkan Anda mengubah konten payload peristiwa (misalnya, untuk memenuhi kontrak API untuk tujuan tertentu).

Atribut berikut dapat diakses saat mengevaluasi ekspresi kondisi untuk pendaftaran:

Atribut Jenis atribut Deskripsi
message.datacontenttype String Jenis konten nilai data
message.dataschema URI Mengidentifikasi skema yang diikuti data
message.id String Mengidentifikasi peristiwa. Produsen harus memastikan bahwa source + id bersifat unik untuk setiap peristiwa yang berbeda.
message.source URI-reference Mengidentifikasi konteks tempat peristiwa terjadi
message.specversion String Versi spesifikasi CloudEvents yang digunakan peristiwa
message.subject String Menjelaskan subjek peristiwa dalam konteks produsen peristiwa (diidentifikasi oleh source)
message.time Timestamp Stempel waktu saat kejadian terjadi; dapat ditetapkan ke waktu lain (seperti waktu saat ini) oleh produsen CloudEvents; namun, semua produsen untuk source yang sama harus konsisten
message.type String Menjelaskan jenis peristiwa yang terkait dengan peristiwa asal

Operator dan fungsi

Anda dapat menggunakan operator dan fungsi untuk membuat ekspresi logika yang kompleks.

Operator logika, seperti &&, ||,, dan !, memungkinkan Anda memverifikasi beberapa variabel dalam ekspresi kondisional. Misalnya, message.time.getFullYear() < 2020 && message.type == "google.cloud.dataflow.job.v1beta3.statusChanged" menggabungkan dua pernyataan, dan mengharuskan kedua pernyataan tersebut menjadi True untuk menghasilkan hasil keseluruhan True.

Operator manipulasi string, seperti x.contains('y'), mencocokkan string atau substring yang Anda tentukan, dan memungkinkan Anda mengembangkan aturan untuk mencocokkan pesan tanpa mencantumkan setiap kemungkinan kombinasi.

Eventarc Advanced juga mendukung fungsi ekstensi, seperti merge dan flatten, yang dapat digunakan untuk mengubah data dan menyederhanakan perubahan peristiwa yang diterima dari bus.

Lihat daftar operator dan fungsi standar CEL dan makro standar CEL.

Operator logika

Tabel berikut menjelaskan operator logika yang didukung Eventarc Advanced.

Ekspresi Deskripsi
x == "my_string" Menampilkan True jika x sama dengan argumen literal string konstan.
x == R"my_string\n" Menampilkan True jika x sama dengan literal string mentah yang diberikan yang tidak menafsirkan urutan escape. Literal string mentah mudah digunakan untuk mengekspresikan string yang harus menggunakan urutan escape, seperti ekspresi reguler atau teks program.
x == y Menampilkan True jika x sama dengan y.
x != y Menampilkan True jika x tidak sama dengan y.
x && y Menampilkan True jika x dan y adalah True.
x || y Menampilkan True jika x, y, atau keduanya adalah True.
!x Menampilkan True jika nilai boolean x adalah False, atau menampilkan False jika nilai boolean x adalah True.
m['k'] Jika kunci k ada, nilai pada kunci k akan ditampilkan dalam peta string ke string m. Jika kunci k tidak ada, akan menampilkan error yang menyebabkan aturan yang sedang dievaluasi tidak cocok.

Operator manipulasi string

Tabel berikut menjelaskan operator manipulasi string yang didukung Eventarc Advanced.

Ekspresi Deskripsi
double(x) Mengonversi hasil string x menjadi jenis double. String yang dikonversi dapat digunakan untuk membandingkan bilangan floating point dengan operator aritmetika standar seperti > dan <=. Ini hanya berfungsi untuk nilai yang dapat berupa bilangan floating point.
int(x) Mengonversi hasil string x menjadi jenis int. String yang dikonversi dapat digunakan untuk membandingkan bilangan bulat dengan operator aritmetika standar seperti > dan <=. Hal ini hanya berfungsi untuk nilai yang dapat berupa bilangan bulat.
x + y Menampilkan string yang digabungkan xy.
x.contains(y) Menampilkan True jika string x berisi substring y.
x.endsWith(y) Menampilkan True jika string x diakhiri dengan substring y.
x.join() Menampilkan string baru tempat elemen daftar string digabungkan. Menerima pemisah opsional yang ditempatkan di antara elemen dalam string yang dihasilkan. Misalnya, ekspresi berikut menampilkan 'hello world':

['hello', 'world'].join(' ')

x.lowerAscii() Menampilkan string baru dengan semua karakter ASCII dalam huruf kecil.
x.matches(y)

Menampilkan True jika string x cocok dengan pola RE2 y yang ditentukan.

Pola RE2 dikompilasi menggunakan opsi RE2::Latin1 yang menonaktifkan fitur Unicode.

x.replace(y,z) Menampilkan string baru dengan kemunculan substring y diganti oleh substring z. Menerima argumen opsional yang membatasi jumlah penggantian yang akan dilakukan. Misalnya, ekspresi berikut menampilkan 'wello hello':

'hello hello'.replace('he', 'we', 1)

x.split(y) Menampilkan daftar string yang dipisahkan dari input oleh pemisah y. Menerima argumen opsional yang membatasi jumlah substring yang akan dihasilkan. Misalnya, ekspresi berikut menampilkan ['hello', 'hello hello']:

'hello hello hello'.split(' ', 2)

x.startsWith(y) Menampilkan True jika string x dimulai dengan substring y.
x.upperAscii() Menampilkan string baru dengan semua karakter ASCII dalam huruf besar.

Fungsi ekspresi reguler

Tabel berikut menjelaskan fungsi ekspresi reguler yang didukung Eventarc Advanced.

Ekspresi Deskripsi
re.capture(target,regex)

Menggunakan regex untuk mengambil nilai grup pertama yang tidak bernama atau bernama dalam string target, dan menampilkan string. Misalnya, ekspresi berikut menampilkan "o":

re.capture("hello", R"hell(o)")

re.captureN(target,regex) Menggunakan regex untuk mengambil nama dan string grup (untuk grup bernama) serta indeks dan string grup (untuk grup tanpa nama) dari string target, dan menampilkan peta pasangan kunci dan nilai. Misalnya, ekspresi berikut menampilkan {"1": "user", "Username": "testuser", "Domain": "testdomain"}:

re.captureN("The user testuser belongs to testdomain", R"The (user|domain) (?P.*) belongs to (?P.*)")

re.extract(target,regex,rewrite) Menggunakan regex untuk mengekstrak nilai grup yang cocok dari string target, dan menampilkan string nilai yang diekstrak yang diformat berdasarkan argumen rewrite. Misalnya, ekspresi berikut menampilkan "example.com":

re.extract("alex@example.com", "(^.*@)(.*)", "\\2")

x.matches(regex)

Menampilkan True jika string x cocok dengan pola RE2 regex yang ditentukan.

Pola RE2 dikompilasi menggunakan opsi RE2::Latin1 yang menonaktifkan fitur Unicode.

Ekspresi reguler mengikuti sintaksis RE2. Perhatikan bahwa R yang mendahului ekspresi reguler menunjukkan string mentah yang tidak memerlukan escape.

Fungsi ekstensi

Eventarc Advanced mendukung fungsi ekstensi tertentu yang dapat digunakan untuk mengubah data peristiwa yang diterima melalui bus. Untuk mengetahui informasi dan contoh selengkapnya, lihat Mengubah peristiwa yang diterima.

Langkah berikutnya