Tutorial ini mengajarkan cara memecahkan masalah error runtime yang terjadi saat Anda menggunakan Eventarc untuk merutekan peristiwa dari Cloud Storage ke layanan Cloud Run yang tidak diautentikasi menggunakan Cloud Audit Logs.
Membuat repositori standar Artifact Registry
Buat repositori standar Artifact Registry untuk menyimpan image container Anda:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
Ganti REPOSITORY
dengan nama unik untuk
repositori.
Membuat bucket Cloud Storage
Buat bucket Cloud Storage di masing-masing dari dua region sebagai sumber peristiwa untuk layanan Cloud Run:
Buat bucket di
us-east1
:export BUCKET1="troubleshoot-bucket1-PROJECT_ID" gcloud storage buckets create gs://${BUCKET1} --location=us-east1
Buat bucket di
us-west1
:export BUCKET2="troubleshoot-bucket2-PROJECT_ID" gcloud storage buckets create gs://${BUCKET2} --location=us-west1
Setelah sumber peristiwa dibuat, deploy layanan penerima peristiwa di Cloud Run.
Men-deploy penerima peristiwa
Deploy layanan Cloud Run yang menerima dan mencatat peristiwa ke dalam log.
Ambil contoh kode dengan meng-clone repositori GitHub:
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git cd golang-samples/eventarc/audit_storage
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git cd java-docs-samples/eventarc/audit-storage
.NET
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git cd dotnet-docs-samples/eventarc/audit-storage
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git cd nodejs-docs-samples/eventarc/audit-storage
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/eventarc/audit-storage
Tinjau kode untuk tutorial ini yang terdiri dari:
Handler peristiwa yang menerima peristiwa masuk sebagai CloudEvent dalam permintaan HTTP
POST
:Go
Java
.NET
Node.js
Python
Server yang menggunakan pengendali peristiwa:
Go
Java
.NET
Node.js
Python
Dockerfile yang menentukan lingkungan operasi untuk layanan. Konten Dockerfile bervariasi menurut bahasa:
Go
Java
.NET
Node.js
Python
Bangun image container Anda dengan Cloud Build dan upload image ke Artifact Registry:
export PROJECT_ID=$(gcloud config get-value project) export SERVICE_NAME=troubleshoot-service gcloud builds submit --tag $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
Men-deploy image container ke Cloud Run
gcloud run deploy ${SERVICE_NAME} \ --image $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1 \ --allow-unauthenticated
Jika deployment berhasil, command line akan menampilkan URL layanan.
Buat pemicu
Setelah men-deploy layanan Cloud Run, siapkan pemicu untuk memantau peristiwa dari Cloud Storage melalui log audit.
Buat pemicu Eventarc untuk memproses peristiwa Cloud Storage yang dirutekan menggunakan Cloud Audit Logs:
gcloud eventarc triggers create troubleshoot-trigger \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
Tindakan ini akan membuat pemicu yang disebut
troubleshoot-trigger
.Untuk mengonfirmasi bahwa
troubleshoot-trigger
telah dibuat, jalankan:gcloud eventarc triggers list
Outputnya akan mirip dengan berikut ini:
NAME: troubleshoot-trigger TYPE: google.cloud.audit.log.v1.written DESTINATION: Cloud Run service: troubleshoot-service ACTIVE: By 20:03:37 LOCATION: us-central1
Membuat dan melihat peristiwa
Konfirmasi bahwa Anda telah berhasil men-deploy layanan dan dapat menerima peristiwa dari Cloud Storage.
Buat dan upload file ke bucket penyimpanan
BUCKET1
:echo "Hello World" > random.txt gcloud storage cp random.txt gs://${BUCKET1}/random.txt
Pantau log untuk memeriksa apakah layanan menerima peristiwa. Untuk melihat entri log, selesaikan langkah-langkah berikut:
Filter entri log dan tampilkan output dalam format JSON:
gcloud logging read "resource.labels.service_name=troubleshoot-service \ AND textPayload:random.txt" \ --format=json
Cari entri log yang mirip dengan:
"textPayload": "Detected change in Cloud Storage bucket: ..."
Perhatikan bahwa pada awalnya, tidak ada entri log yang ditampilkan. Hal ini menunjukkan bahwa ada masalah dalam penyiapan yang harus Anda selidiki.
Menyelidiki masalah
Lakukan proses penyelidikan mengapa layanan tidak menerima peristiwa.
Waktu inisialisasi
Meskipun pemicu Anda langsung dibuat, diperlukan waktu hingga dua menit agar pemicu diterapkan dan memfilter peristiwa. Jalankan perintah berikut untuk mengonfirmasi bahwa pemicu aktif:
gcloud eventarc triggers list
Output menunjukkan status pemicu. Dalam contoh berikut,
troubleshoot-trigger
akan aktif pada 14:16:56:
NAME TYPE DESTINATION_RUN_SERVICE ACTIVE
troubleshoot-trigger google.cloud.audit.log.v1.written troubleshoot-service By 14:16:56
Setelah pemicu aktif, upload file lagi ke bucket penyimpanan. Peristiwa ditulis dalam log layanan Cloud Run. Jika layanan tidak menerima peristiwa, hal ini dapat terkait dengan ukuran peristiwa.
Log audit
Dalam tutorial ini, peristiwa Cloud Storage dirutekan menggunakan Cloud Audit Logs dan dikirim ke Cloud Run. Pastikan log audit diaktifkan untuk Cloud Storage.
Di konsol Google Cloud , buka halaman Log audit.
- Centang kotak Google Cloud Storage.
- Pastikan jenis log Admin Read, Data Read, dan Data Write dipilih.
Setelah mengaktifkan Cloud Audit Logs, upload kembali file ke bucket penyimpanan dan periksa log. Jika layanan masih tidak menerima peristiwa, hal ini dapat terkait dengan lokasi pemicu.
Lokasi pemicu
Mungkin ada beberapa resource di lokasi yang berbeda dan Anda harus memfilter peristiwa dari sumber yang berada di region yang sama dengan target Cloud Run. Untuk mengetahui informasi selengkapnya, lihat lokasi yang didukung oleh Eventarc dan Memahami lokasi Eventarc.
Dalam tutorial ini, Anda telah men-deploy layanan Cloud Run ke
us-central1
. Karena Anda menyetel eventarc/location
ke us-central1
, Anda juga
membuat pemicu di lokasi yang sama.
Namun, Anda membuat dua bucket Cloud Storage di lokasi us-east1
dan us-west1
. Untuk menerima peristiwa dari lokasi tersebut, Anda harus membuat
pemicu Eventarc di lokasi tersebut.
Buat pemicu Eventarc yang berada di us-east1
:
Konfirmasi lokasi pemicu yang ada:
gcloud eventarc triggers describe troubleshoot-trigger
Tetapkan lokasi dan wilayah ke
us-east1
:gcloud config set eventarc/location us-east1 gcloud config set run/region us-east1
Deploy penerima peristiwa lagi dengan membangun dan men-deploy image container ke Cloud Run.
Buat pemicu baru yang berada di
us-east1
:gcloud eventarc triggers create troubleshoot-trigger-new \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
Periksa apakah pemicu telah dibuat:
gcloud eventarc triggers list
Pemicu dapat memerlukan waktu hingga dua menit untuk diinisialisasi sebelum mulai merutekan peristiwa.
Untuk mengonfirmasi bahwa pemicu kini di-deploy dengan benar, buat dan lihat peristiwa.
Masalah lain yang mungkin Anda temui
Anda mungkin mengalami masalah lain saat menggunakan Eventarc.
Ukuran acara
Peristiwa yang Anda kirimkan tidak boleh melebihi batas ukuran peristiwa.
Pemicu yang sebelumnya mengirimkan peristiwa telah berhenti berfungsi
Pastikan sumber menghasilkan peristiwa. Periksa Cloud Audit Logs dan pastikan layanan yang dipantau memancarkan log. Jika log dicatat, tetapi peristiwa tidak dikirim, hubungi dukungan.
Pastikan topik Pub/Sub dengan nama pemicu yang sama ada. Eventarc menggunakan Pub/Sub sebagai lapisan transportasinya dan akan menggunakan topik Pub/Sub yang ada atau akan otomatis membuat topik dan mengelolanya untuk Anda.
- Untuk mencantumkan pemicu, lihat
gcloud eventarc triggers list
. Untuk mencantumkan topik Pub/Sub, jalankan:
gcloud pubsub topics list
Pastikan nama topik Pub/Sub menyertakan nama pemicu yang dibuat. Contoh:
name: projects/PROJECT_ID/topics/eventarc-us-east1-troubleshoot-trigger-new-123
Jika topik Pub/Sub tidak ada, buat pemicu lagi untuk penyedia, jenis peristiwa, dan tujuan Cloud Run tertentu.
- Untuk mencantumkan pemicu, lihat
Pastikan pemicu telah dikonfigurasi untuk layanan.
Di konsol Google Cloud , buka halaman Services.
Klik nama layanan untuk membuka halaman Service details.
Klik tab Trigger.
Pemicu Eventarc yang terkait dengan layanan harus tercantum.
Verifikasi kondisi topik dan langganan Pub/Sub menggunakan jenis metrik Pub/Sub.
Anda dapat memantau pesan yang tidak terkirim yang diteruskan menggunakan metrik
subscription/dead_letter_message_count
. Metrik ini menunjukkan jumlah pesan yang tidak dapat dikirim yang diteruskan Pub/Sub dari langganan.Jika pesan tidak dipublikasikan ke topik, periksa Cloud Audit Logs dan pastikan layanan yang dipantau memancarkan log. Jika log dicatat, tetapi peristiwa tidak dikirim, hubungi dukungan.
Anda dapat memantau langganan push menggunakan metrik
subscription/push_request_count
dan mengelompokkan metrik menurutresponse_code
dansubcription_id
.Jika error push dilaporkan, periksa log layanan Cloud Run. Jika endpoint penerima menampilkan kode status non-OK, hal ini menunjukkan bahwa kode Cloud Run tidak berfungsi seperti yang diharapkan dan Anda harus menghubungi dukungan.
Untuk mengetahui informasi selengkapnya, lihat Membuat kebijakan pemberitahuan batas metrik.