Memahami pola jalur

Eventarc mendukung penerapan pola jalur saat memfilter. Sintaksis pola jalur memungkinkan Anda menentukan ekspresi yang cocok dengan peristiwa. Hal ini memungkinkan Anda mengontrol tingkat perincian pemicu Eventarc yang Anda buat, serta merekam dan menindaklanjuti peristiwa tertentu. Misalnya, Anda dapat membuat pemicu yang berlaku untuk satu peristiwa, seperti perubahan pada file tertentu, atau Anda dapat memperluas cakupan pola dan membuat pemicu yang berlaku secara lebih luas.

Menerapkan pola jalur

Anda dapat menerapkan pola jalur untuk memfilter peristiwa saat membuat pemicu menggunakan halaman konsol Google Cloud Eventarc atau dengan menjalankan perintah gcloud.

Misalnya, Anda dapat menerapkan pola jalur saat memfilter nama resource atau instance database (satu instance atau jalur).

  • Menentukan pola jalur nama resource berlaku saat membuat pemicu untuk peristiwa Cloud Audit Logs dan untuk nilai resourceName. Nama resource menunjukkan resource yang diaudit melalui log audit. Nama resource diatur secara hierarkis menggunakan ID yang terdiri dari ID resource itu sendiri dan ID resource induk, semuanya dipisahkan oleh garis miring, seperti ini: /projects/project-1/datasets/dataset-id. Pemfilteran yang dilakukan oleh Eventarc mencocokkan pola berdasarkan nilai ID ini. Untuk informasi selengkapnya, dalam dokumen ini, lihat Format nama resource.

  • Menentukan pola jalur instance database berlaku saat membuat pemicu untuk peristiwa Firebase Realtime Database dan untuk nilai instance atau ref. Instance database menunjukkan instance Firebase Realtime Database. Anda dapat menerapkan pola jalur ke nama instance instance database, atau jalur dokumen yang ingin Anda terima peristiwanya saat data dibuat, diperbarui, atau dihapus di jalur tersebut, atau turunannya.

  • Penentuan pola jalur ID resource berlaku saat membuat pemicu untuk peristiwa Cloud IoT dan untuk nilai registry dan device. Anda dapat menerapkan pola jalur untuk memfilter perubahan di registry, dan perangkat di registry, dengan pencocokan karakter pengganti.

Untuk mengetahui detailnya, lihat petunjuk untuk membuat pemicu bagi penyedia spesifik, jenis peristiwa, dan tujuan.

Mengidentifikasi apakah Anda dapat menerapkan pola jalur

Untuk mengonfirmasi apakah Anda dapat menerapkan pola jalur ke atribut peristiwa dari penyedia, jelaskan penyedia peristiwa. Contoh:

gcloud eventarc providers describe cloudaudit.googleapis.com --location=us-central1

Output-nya mirip dengan berikut ini dan nilai pathPatternSupported dari true menunjukkan bahwa Anda dapat menerapkan pola jalur:

displayName: Cloud Audit Logs
eventTypes:
- description: An audit log is created that matches the trigger's filter criteria.
  filteringAttributes:
  - attribute: methodName
    description: The identifier of the service's operation.
    required: true
  - attribute: resourceName
    description: The complete path to a resource. Used to filter events for a specific
      resource.
    pathPatternSupported: true
  - attribute: serviceName
    description: The identifier of the Google Cloud service.
    required: true
  - attribute: type
    required: true
  type: google.cloud.audit.log.v1.written
name: projects/project-name/locations/us-central1/providers/cloudaudit.googleapis.com

Atau, misalnya:

gcloud eventarc providers describe firebasedatabase.googleapis.com --location=us-central1

Dengan output yang mirip dengan berikut ini:

displayName: Firebase Realtime Database
eventTypes:
- description: New data has been created in the database.
  filteringAttributes:
  - attribute: instance
    description: A single database instance.
    pathPatternSupported: true
    required: true
  - attribute: ref
    description: Pattern to match for the database instance.
    pathPatternSupported: true
    required: true
  - attribute: type
    required: true
  type: google.firebase.database.ref.v1.created
[...]

Untuk informasi selengkapnya, lihat gcloud eventarc providers describe.

Sintaksis pola jalur

Sintaksis pola jalur ditentukan sebagai berikut:

Sintaksis pola jalur

Pola /? Segment (/Segment)*
Segmen CaptureGroup | Expression
CaptureGroup { ID (= Expression)? }
Ekspresi Wildcard | MultiSegmentWildcard | NameSegment
NameSegment (Character* Wildcard? Character*)
ID [a-zA-Z0-9_]+
Karakter pengganti *
MultiSegmentWildcard **
Karakter1 [\\w\\s\\t~@#$%&.,?:;+='[]()-]

Legenda:

? nol atau satu
* nol atau lebih
+ satu atau beberapa
| ATAU
1 Hanya karakter ASCII yang tercantum yang didukung.

Ekspresi

Ekspresi dapat berupa salah satu jenis segmen berikut dan tidak boleh kosong:

  • Satu segmen Wildcard yang ditentukan sebagai * cocok dengan nol atau beberapa karakter dalam pola.
  • MultiSegmentWildcard yang ditentukan sebagai ** cocok dengan nol atau beberapa segmen dalam pola.
  • NameSegment terdiri dari nol atau satu * dan karakter lainnya. Kombinasi ini memungkinkan Anda memfilter menurut awalan, akhiran, atau ekstensi file; misalnya, file-*.txt.

Perhatikan bahwa jalur dapat berisi banyak karakter pengganti segmen tunggal, tetapi hanya satu karakter pengganti multi-segmen. Misalnya, jalur berikut tidak valid: /projects/**/buckets/**.

Regionalitas resource

Nama resource dapat berisi ID lokasi. Contoh:

/projects/$PROJECT_ID/locations/$REGION/triggers/my-trigger

Namun, pencocokan pola jalur dibatasi oleh regionalitas resource. Misalnya, untuk pemicu Cloud Audit Logs, karakter pengganti lokasi hanya cocok dengan pemicu dari region Cloud Audit Logs, atau pemicu global.

Grup tangkapan

CaptureGroup memungkinkan Anda mengambil konten ekspresi. Anda melakukannya dengan menetapkan nilai ke nama variabel dalam tanda kurung kurawal; misalnya, buckets/{path=**}/files/{filename=file-*.txt}. Karakter pengganti segmen tunggal dapat menghapus =* dalam grup pengambilan; misalnya, /projects/_/buckets/{bucket}/objects/file.*

Format nama resource

Tabel berikut memberikan contoh nama resource lengkap untuk layananGoogle Cloud yang biasa digunakan. Daftar ini tidak lengkap. Untuk mempelajari lebih lanjut cara nama lengkap resource yang diformat, lihat bagian Nama resource dalam panduan desain API.

Jenis resource Format nama lengkap resource
datasets BigQuery //bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID
akun Penagihan Cloud //cloudbilling.googleapis.com/billingAccounts/BILLING_ACCOUNT_ID
layanan Cloud Run //run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID
Instance Cloud SQL //sqladmin.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID
Bucket Cloud Storage1 //storage.googleapis.com/projects/_/buckets/BUCKET_ID
Objek Cloud Storage1, 2 //storage.googleapis.com/projects/_/buckets/BUCKET_ID/objects/OBJECT_ID
Instance Compute Engine //compute.googleapis.com/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_ID
jaringan Compute Engine //compute.googleapis.com/projects/PROJECT_ID/global/networks/NETWORK
subnetwork Compute Engine //compute.googleapis.com/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK
clusters Google Kubernetes Engine //container.googleapis.com/projects/PROJECT_ID/clusters/CLUSTER_ID
Identity-Aware Proxy Layanan aplikasi App Engine //iap.googleapis.com/projects/PROJECT_NUMBER/iap_web/appengine-PROJECT_ID/services/APP_SERVICE_ID
Layanan backend Compute Engine IAP //iap.googleapis.com/projects/PROJECT_NUMBER/iap_web/compute/services/BACKEND_SERVICE_ID_OR_NAME
topik Pub/Sub //pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID
organisasi Resource Manager //cloudresourcemanager.googleapis.com/organizations/ORGANIZATION_NUMBER
folder Resource Manager //cloudresourcemanager.googleapis.com/folders/FOLDER_NUMBER
project Resource Manager //cloudresourcemanager.googleapis.com/projects/PROJECT_ID

1 Untuk Cloud Storage, nama resource berisi garis bawah (_), bukan project ID. Anda tidak dapat mengganti garis bawah dengan project ID, nama project, atau nomor project.

2 Gunakan seluruh nama objek, termasuk garis miring ke depan. Di Cloud Storage, karakter ini adalah bagian dari nama objek, bukan pemisah jalur.

Contoh

Contoh berikut menunjukkan cara Anda dapat dan tidak dapat menggunakan sintaksis.

Pola yang valid

Pola Deskripsi
/projects/project-1/datasets/dataset-1 Nama resource tertentu.
/projects/project-1/regions/region-1/subnetworks/* Cocok dengan subjaringan apa pun di project-1 dan region-1.
/projects/_/buckets/bucket-1/objects/*.txt Mencocokkan semua file TXT di bucket.
/projects/_/buckets/bucket-1/objects/file-*.txt Mencocokkan semua file TXT dengan awalan file- di bucket.
/projects/project-1/serviceAccounts/service-account-email-1/keys/** Mencocokkan kunci apa pun untuk email akun layanan tertentu.
/projects/_/**/file-*.txt Mencocokkan file TXT apa pun dengan awalan file- untuk semua bucket.
/projects/_/buckets/bucket-*/objects/file-*.txt Mencocokkan semua file TXT dengan awalan file- untuk bucket apa pun dengan awalan bucket-.
/projects/_/buckets/{bucket}/objects/file.*
/projects/_/buckets/{bucket=*}/objects/file.*
/projects/_/buckets/*/objects/{filename=file.*}
Tiga representasi berbeda dari filter yang sama. Mencocokkan bucket apa pun dengan file bernama file dari jenis apa pun. Dua contoh pertama juga mengambil bucket dan contoh terakhir mengambil nama file.
/projects/project-1/zones/zone-1/instances/** Cocok dengan apa pun di project-1 dan zone-1.
/projects/*/zones/zone-1/instances/** Cocok dengan apa pun di zone-1 dalam project apa pun.

Pola yang tidak valid

Pola Deskripsi
/projects/_/buckets/bucket-1/objects/ Ekspresi kosong.
/projects//buckets/bucket-1/objects/file1.txt Ekspresi kosong.
/projects/_/buckets/bucket**/objects/file1.txt Ekspresi hanya dapat berisi satu *.
/projects/_/buckets/bucket-1/objects/file-*.* Ekspresi hanya dapat berisi satu *.
/projects/**/buckets/** Jalur resource hanya dapat berisi satu **.
/projects/_/buckets/{=*}/objects/file1.txt ID tidak ada di segmen.
/projects/_/buckets/{bucket=}/objects/file1.txt Ekspresi kosong di dalam grup tangkapan.
/projects/_/buckets/{bucket/objects/file1.txt Grup pengambilan tidak ditutup.

Pencocokan pola

Pola Resource Kecocokan?
/buckets/bucket-1/objects/file1.txt /buckets/bucket-1/objects/file1.txt
/buckets/bucket-1/objects/file2.txt
/buckets/bucket-1/objects/* /buckets/bucket-1/objects/file3.txt
/buckets/bucket-1/objects/file4.jpg
/buckets/bucket-1/objects/files/file4.jpg
/buckets/bucket-1/objects
/buckets/bucket-1/objects/*.txt /buckets/bucket-1/objects/file5.txt
/buckets/bucket-1/objects/file6.jpg
/buckets/bucket-1/objects/file-*.txt /buckets/bucket-1/objects/file-777.txt
/buckets/bucket-1/objects/file-.txt
/buckets/bucket-1/objects/file.txt
/projects/_/**/{filename=file-*.txt} /projects/_/objects/object-1/files/file-9.txt
/projects/_/{ob}jects/**/-+=*/file-9.txt
/projects/_/file-10.txt
/projects/_/files-1/file-1.txt/files-2/file-2.txt
/projects/_//file-1234.txt
/projects/_/files/file-5.txt/file.txt

Langkah berikutnya