Tutorial ini menunjukkan penulisan, deployment, dan pemicuan fungsi Cloud Run yang dipicu peristiwa dengan pemicu Cloud Audit Logs.
Fungsi Cloud Run memungkinkan fungsi Anda dipicu oleh entri Cloud Audit Log. Banyak produk Google Cloud menulis ke Cloud Audit Log saat terjadi tindakan penting dalam produk. Entri log ini dapat memicu eksekusi fungsi Cloud Run secara real time, sehingga pengguna dapat memproses dan/atau menindaklanjutinya secara otomatis.
Log ini dihasilkan oleh berbagai peristiwa di Google Cloud dan mencakup sebagian besar produk Google Cloud. Dengan demikian, pemicu Cloud Audit Logs memungkinkan Anda membuat fungsi yang bereaksi terhadap sebagian besar perubahan status di Google Cloud.
Tutorial ini akan menunjukkan cara menggunakan pemicu Cloud Audit Logs untuk memberi label instance Compute Engine yang baru dibuat dengan nama entity (orang atau akun layanan) yang membuatnya.
Jika Anda baru menggunakan Cloud Audit Logs dan ingin mempelajari lebih lanjut, lihat dokumentasi Cloud Audit Logs.
Tujuan
- Tulis fungsi Cloud Run berbasis peristiwa yang menerima peristiwa Cloud Audit Logs saat instance VM Compute Engine dibuat.
- Picu fungsi dengan membuat instance VM Compute Engine. Setelah itu, instance akan diberi label dengan nama entity (orang atau akun layanan) yang membuatnya.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
- Cloud Run functions
- Cloud Build
- Pub/Sub
- Artifact Registry
- Eventarc
- Cloud Logging
- Compute Engine
For details, see Cloud Run functions pricing.
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
- 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Cloud Functions, Cloud Run, Cloud Build, Artifact Registry, Eventarc, Logging, Compute Engine, and Pub/Sub.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Cloud Functions, Cloud Run, Cloud Build, Artifact Registry, Eventarc, Logging, Compute Engine, and Pub/Sub.
- Instal dan lakukan inisialisasi Cloud SDK.
- Perbarui komponen
gcloud
: - Menyiapkan lingkungan pengembangan.
gcloud components update
Perlu command prompt? Anda dapat menggunakan Google Cloud Shell. Google Cloud Shell adalah lingkungan command line yang sudah menyertakan Google Cloud SDK, sehingga Anda tidak perlu menginstalnya. Google Cloud SDK juga sudah terinstal di Virtual Machine Compute Engine.
Prasyarat
Buka halaman IAM & Admin > Log Audit di Konsol Google Cloud:
Aktifkan Jenis Log Pembacaan Admin, Pembacaan Data, dan Penulisan Data Cloud Audit Log untuk Compute Engine API:
Periksa apakah Akun Layanan Compute Engine memiliki peran
Editor
. Akun layanan ini akan digunakan sebagai identitas layanan untuk fungsi Cloud Run.Buka halaman IAM & Admin > IAM
Temukan entri
PROJECT_NUMBER-compute@
dalam tabel dan lihat kolomRoles
. Jika kolom berisiEditor
, Anda dapat melewati langkah-langkah berikut. Jika tidak, lanjutkan ke langkah berikutnya dan tetapkan peran yang diperlukan ke akun layanan.Berikan peran
eventarc.eventReceiver
ke akun layanan Compute Engine project:PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@ \ --role roles/eventarc.eventReceiver
Berikan peran
run.invoker
ke akun layanan Compute Engine project agar pemicu Pub/Sub dapat menjalankan fungsi:PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@ \ --role roles/run.invoker
Berikan peran
compute.instanceAdmin
ke akun layanan Compute Engine project agar kode fungsi memiliki izin yang diperlukan untuk mendapatkan instance VM dan menetapkan label pada instance tersebut:PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@ \ --role roles/compute.instanceAdmin
Menyiapkan aplikasi
Clone repositori aplikasi contoh ke komputer lokal Anda:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Atau, Anda dapat mendownload contoh dalam file ZIP dan mengekstraknya.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Atau, Anda dapat mendownload contoh dalam file ZIP dan mengekstraknya.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Atau, Anda dapat mendownload contoh dalam file ZIP dan mengekstraknya.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Atau, Anda dapat mendownload contoh dalam file ZIP dan mengekstraknya.
Beralihlah ke direktori yang berisi kode contoh fungsi Cloud Run untuk mengakses Audit Cloud Log:
Node.js
cd nodejs-docs-samples/functions/v2/autoLabelInstance/
Python
cd python-docs-samples/functions/v2/label_gce_instance/
Go
cd golang-samples/functions/functionsv2/label_gce_instance/
Java
cd java-docs-samples/functions/v2/label-compute-instance/
Lihat kode contoh:
Node.js
Python
Go
Java
Men-deploy fungsi
Untuk men-deploy fungsi dengan pemicu Cloud Audit Logs, jalankan perintah berikut di direktori yang berisi kode contoh (atau untuk Java, file pom.xml
):
Node.js
gcloud functions deploy nodejs-cal-function \ --gen2 \ --runtime=nodejs22 \ --region=REGION
\ --source=. \ --entry-point=autoLabelInstance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Gunakan flag --runtime
untuk menentukan ID runtime dari versi Node.js yang didukung untuk menjalankan fungsi Anda.
Python
gcloud functions deploy python-cal-function \ --gen2 \ --runtime=python312 \ --region=REGION
\ --source=. \ --entry-point=label_gce_instance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Gunakan flag --runtime
untuk menentukan ID runtime
versi Python yang didukung untuk menjalankan
fungsi Anda.
Go
gcloud functions deploy go-cal-function \ --gen2 \ --runtime=go122 \ --region=REGION
\ --source=. \ --entry-point=label-gce-instance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Gunakan flag --runtime
untuk menentukan ID runtime versi Go yang didukung untuk menjalankan fungsi Anda.
Java
gcloud functions deploy java-cal-function \ --gen2 \ --runtime=java21 \ --region=REGION
\ --source=. \ --entry-point=functions.AutoLabelInstance \ --memory=512MB \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Gunakan flag --runtime
untuk menentukan ID runtime
versi Java yang didukung guna menjalankan
fungsi Anda.
Perintah deployment di atas menetapkan parameter filter peristiwa berikut yang sesuai dengan pembuatan VM:
type
: Jenis peristiwa Cloud Audit Logs (google.cloud.audit.log.v1.written
).serviceName
: Nama layanan Google Cloud yang menghasilkan entri log, dalam hal inicompute.googleapis.com
.methodName
: Nama metode API yang menghasilkan entri log, dalam hal iniv1.compute.instances.insert
.
Memicu fungsi
Setelah fungsi di-deploy, Anda dapat mengonfirmasi bahwa fungsi tersebut berfungsi:
Buat instance VM Compute Engine:
gcloud compute instances create
YOUR_INSTANCE_NAME
--zoneYOUR_ZONE
Atau, buka Konsol Google Cloud, lalu klik Buat VM.
Jalankan perintah berikut untuk memverifikasi bahwa instance telah diberi label dengan benar:
gcloud compute instances describe
YOUR_INSTANCE_NAME
\ --zoneYOUR_ZONE \ --format 'value(labels)'
Anda akan melihat label dengan format
creator=YOURNAMEYOUR_DOMAIN
.
Pembersihan
Agar tidak dikenakan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource-nya.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Untuk menghapus project:
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Menghapus fungsi
Menghapus fungsi Cloud Run tidak akan menghapus resource apa pun yang tersimpan di Cloud Storage.
Untuk menghapus fungsi Cloud Run yang Anda buat dalam tutorial ini, jalankan perintah berikut:
Node.js
gcloud functions delete nodejs-cal-function --gen2 --region REGION
Python
gcloud functions delete python-cal-function --gen2 --region REGION
Go
gcloud functions delete go-cal-function --gen2 --region REGION
Java
gcloud functions delete java-cal-function --gen2 --region REGION
Anda juga dapat menghapus fungsi Cloud Run dari Konsol Google Cloud.
Menghapus instance VM Compute Engine
Untuk menghapus instance VM Compute Engine yang Anda buat dalam tutorial ini, jalankan perintah berikut:
gcloud compute instances deleteYOUR_INSTANCE_NAME
--zoneYOUR_ZONE