Tutorial ini mengajarkan cara memecahkan masalah error runtime yang dialami saat Anda menggunakan Eventarc untuk merutekan peristiwa dari Cloud Storage ke layanan Cloud Run yang tidak diautentikasi menggunakan Cloud Audit Logs.
Tujuan
Tutorial ini menunjukkan kepada Anda cara menyelesaikan tugas-tugas berikut:
- Buat repositori standar Artifact Registry untuk menyimpan image container Anda.
- Membuat bucket Cloud Storage untuk menjadi sumber peristiwa.
- Mem-build, mengupload, dan men-deploy image container ke Cloud Run.
- Membuat pemicu Eventarc.
- Upload file ke bucket Cloud Storage.
- Memecahkan masalah dan memperbaiki error runtime.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
Batasan keamanan yang ditentukan oleh organisasi mungkin mencegah Anda menyelesaikan langkah-langkah berikut. Untuk mengetahui informasi pemecahan masalah, lihat Mengembangkan aplikasi di lingkungan Google Cloud yang terbatas.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Logging, Cloud Run, Cloud Storage, Eventarc, and Pub/Sub APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com eventarc.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com storage.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Logging, Cloud Run, Cloud Storage, Eventarc, and Pub/Sub APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com eventarc.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com storage.googleapis.com -
Jika Anda adalah project creator, Anda diberi peran Pemilik dasar (
roles/owner
). Secara default, peran Identity and Access Management (IAM) ini mencakup izin yang diperlukan untuk akses penuh ke sebagian besar resource Google Cloud dan Anda dapat melewati langkah ini.Jika Anda bukan project creator, izin yang diperlukan harus diberikan pada project kepada akun utama yang sesuai. Misalnya, akun utama dapat berupa Akun Google (untuk pengguna akhir) atau akun layanan (untuk aplikasi dan workload komputasi). Untuk mengetahui informasi selengkapnya, lihat halaman eran dan izin untuk tujuan peristiwa Anda.
Perhatikan bahwa secara default, izin Cloud Build mencakup izin untuk mengupload dan mendownload artefak Artifact Registry.
Izin yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial ini, minta administrator untuk memberi Anda peran IAM berikut di project Anda:
-
Editor Cloud Build (
roles/cloudbuild.builds.editor
) -
Cloud Run Admin (
roles/run.admin
) -
Eventarc Admin (
roles/eventarc.admin
) -
Logs View Accessor (
roles/logging.viewAccessor
) -
Project IAM Admin (
roles/resourcemanager.projectIamAdmin
) -
Service Account Admin (
roles/iam.serviceAccountAdmin
) -
Service Account User (
roles/iam.serviceAccountUser
) -
Service Usage Admin (
roles/serviceusage.serviceUsageAdmin
) -
Storage Admin (
roles/storage.admin
)
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
-
Editor Cloud Build (
- Untuk Cloud Storage, aktifkan logging audit untuk jenis akses data
ADMIN_READ
,DATA_WRITE
, danDATA_READ
.- Baca kebijakan Identity and Access Management (IAM) yang terkait dengan project, folder, atau organisasi Google Cloud Anda, lalu simpan dalam file sementara:
gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
- Di editor teks, buka
/tmp/policy.yaml
, lalu tambahkan atau ubah hanya konfigurasi log audit di bagianauditConfigs
:auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_WRITE - logType: DATA_READ service: storage.googleapis.com bindings: - members: [...] etag: BwW_bHKTV5U= version: 1
- Tulis kebijakan IAM baru Anda:
gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
Jika perintah sebelumnya melaporkan konflik dengan perubahan lain, ulangi langkah-langkah ini, dimulai dengan membaca kebijakan IAM. Untuk informasi selengkapnya, lihat Mengonfigurasi log audit Akses Data dengan API.
- Baca kebijakan Identity and Access Management (IAM) yang terkait dengan project, folder, atau organisasi Google Cloud Anda, lalu simpan dalam file sementara:
- Berikan peran
eventarc.eventReceiver
ke akun layanan Compute Engine:export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')" gcloud projects add-iam-policy-binding $(gcloud config get-value project) \ --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com \ --role='roles/eventarc.eventReceiver'
- Jika Anda mengaktifkan akun layanan Pub/Sub pada atau sebelum 8 April
2021, berikan peran
iam.serviceAccountTokenCreator
ke akun layanan Pub/Sub:gcloud projects add-iam-policy-binding $(gcloud config get-value project) \ --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com"\ --role='roles/iam.serviceAccountTokenCreator'
- Tetapkan default yang digunakan dalam tutorial ini:
export REGION=us-central1 gcloud config set run/region ${REGION} gcloud config set run/platform managed gcloud config set eventarc/location ${REGION}
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 setiap dua region sebagai sumber peristiwa untuk layanan Cloud Run:
Buat bucket di
us-east1
:export BUCKET1="troubleshoot-bucket1-PROJECT_ID" gsutil mb -l us-east1 gs://${BUCKET1}
Buat bucket di
us-west1
:export BUCKET2="troubleshoot-bucket2-PROJECT_ID" gsutil mb -l us-west1 gs://${BUCKET2}
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:
Pengendali peristiwa yang menerima peristiwa masuk sebagai CloudEvent dalam permintaan
POST
HTTP: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
Build 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 memproses 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
Pastikan 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 gsutil 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 pukul 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 dicatat dalam log layanan Cloud Run. Jika layanan tidak menerima peristiwa, hal ini mungkin 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 Audit logs.
- Centang kotak Google Cloud Storage.
- Pastikan jenis log Admin Read, Data Read, dan Data Write dipilih.
Setelah mengaktifkan Log Audit Cloud, upload file lagi ke bucket penyimpanan dan periksa log. Jika layanan masih tidak menerima peristiwa, hal ini mungkin 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 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 menetapkan 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 terletak di us-east1
:
Konfirmasi lokasi pemicu yang ada:
gcloud eventarc triggers describe troubleshoot-trigger
Tetapkan lokasi dan region ke
us-east1
:gcloud config set eventarc/location us-east1 gcloud config set run/region us-east1
Deploy penerima peristiwa lagi dengan mem-build dan men-deploy image container ke Cloud Run.
Buat pemicu baru yang terletak 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
Pastikan pemicu dibuat:
gcloud eventarc triggers list
Pemicu dapat memerlukan waktu hingga dua menit untuk melakukan inisialisasi 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 peristiwa
Peristiwa yang Anda kirim 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 memunculkan log. Jika log dicatat, tetapi peristiwa tidak dikirim, hubungi dukungan.
Pastikan topik Pub/Sub dengan nama pemicu yang sama sudah ada. Eventarc menggunakan Pub/Sub sebagai lapisan transpornya 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 Detail layanan.
Klik tab Trigger.
Pemicu Eventarc yang terkait dengan layanan harus tercantum.
Verifikasi status topik dan langganan Pub/Sub menggunakan jenis metrik Pub/Sub.
Anda dapat memantau pesan yang diteruskan dan tidak dapat dikirim 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 memunculkan 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.
Pembersihan
Jika Anda membuat project baru untuk tutorial ini, hapus project tersebut. Jika Anda menggunakan project yang ada dan ingin mempertahankannya tanpa perubahan yang ditambahkan dalam tutorial ini, hapus resource yang dibuat untuk tutorial.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Untuk menghapus project:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Menghapus referensi tutorial
Hapus layanan Cloud Run yang Anda deploy dalam tutorial ini:
gcloud run services delete SERVICE_NAME
Dengan
SERVICE_NAME
adalah nama layanan pilihan Anda.Anda juga dapat menghapus layanan Cloud Run dari Google Cloud Console.
Hapus konfigurasi default gcloud CLI yang Anda tambahkan selama penyiapan tutorial.
Contoh:
gcloud config unset run/region
atau
gcloud config unset project
Hapus resource Google Cloud lain yang dibuat dalam tutorial ini:
- Hapus pemicu Eventarc:
Gantigcloud eventarc triggers delete TRIGGER_NAME
TRIGGER_NAME
dengan nama pemicu Anda.
- Hapus pemicu Eventarc: