Tutorial ini menunjukkan cara menggunakan Eventarc untuk membuat pipeline pemrosesan yang menjadwalkan kueri ke set data BigQuery publik, membuat diagram berdasarkan data, dan membagikan link ke diagram tersebut melalui email.
Tujuan
Dalam tutorial ini, Anda akan mem-build dan men-deploy tiga layanan penayangan Knative yang berjalan di cluster Google Kubernetes Engine (GKE) dan menerima peristiwa menggunakan Eventarc:
- Pemroses kueri—Dipicu saat tugas Cloud Scheduler memublikasikan pesan ke topik Pub/Sub; layanan ini menggunakan BigQuery API untuk mengambil data dari set data COVID-19 publik, dan menyimpan hasilnya dalam tabel BigQuery baru.
- Pembuat diagram—Dipicu saat layanan runner kueri memublikasikan pesan ke topik Pub/Sub; layanan ini membuat diagram menggunakan library plot Python, Matplotlib, dan menyimpan diagram ke bucket Cloud Storage.
- Notifier—Dipicu oleh log audit saat layanan pembuat diagram menyimpan diagram di bucket Cloud Storage; layanan ini menggunakan layanan email, SendGrid, untuk mengirim link diagram ke alamat email.
Diagram berikut menunjukkan arsitektur tingkat tinggi:
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
- Artifact Registry
- BigQuery
- Cloud Build
- Cloud Scheduler
- Cloud Storage
- Eventarc
- Google Kubernetes Engine
- Pub/Sub
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.
- 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 Scheduler, Eventarc, GKE, Pub/Sub, and Resource Manager APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com cloudresourcemanager.googleapis.com cloudscheduler.googleapis.com container.googleapis.com eventarc.googleapis.com pubsub.googleapis.com run.googleapis.com logging.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 Scheduler, Eventarc, GKE, Pub/Sub, and Resource Manager APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com cloudresourcemanager.googleapis.com cloudscheduler.googleapis.com container.googleapis.com eventarc.googleapis.com pubsub.googleapis.com run.googleapis.com logging.googleapis.com - 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:
- Tetapkan default yang digunakan dalam tutorial ini:
CLUSTER_NAME=events-cluster CLUSTER_LOCATION=us-central1 PROJECT_ID=PROJECT_ID gcloud config set project $PROJECT_ID gcloud config set run/region $CLUSTER_LOCATION gcloud config set run/cluster $CLUSTER_NAME gcloud config set run/cluster_location $CLUSTER_LOCATION gcloud config set run/platform gke gcloud config set eventarc/location $CLUSTER_LOCATION
Ganti
PROJECT_ID
dengan project ID Anda.
Membuat kunci API SendGrid
SendGrid adalah penyedia email berbasis cloud yang memungkinkan Anda mengirim email tanpa harus mengelola server email.
- Login ke SendGrid dan buka Settings > API Keys.
- Klik Create API Key.
- Pilih izin untuk kunci tersebut. Setidaknya, kunci harus memiliki izin Pengiriman Email untuk mengirim email.
- Klik Save untuk membuat kunci.
- SendGrid akan membuat kunci baru. Ini adalah satu-satunya salinan kunci, jadi pastikan Anda menyalin kunci dan menyimpannya untuk nanti.
Membuat cluster GKE
Buat cluster dengan Workload Identity Federation for GKE yang diaktifkan agar dapat mengakses Google Cloud layanan dari aplikasi yang berjalan dalam GKE. Anda juga memerlukan Workload Identity Federation for GKE untuk meneruskan peristiwa menggunakan Eventarc.
Buat cluster GKE untuk penayangan Knative dengan add-on
CloudRun
,HttpLoadBalancing
, danHorizontalPodAutoscaling
yang diaktifkan:gcloud beta container clusters create $CLUSTER_NAME \ --addons=HttpLoadBalancing,HorizontalPodAutoscaling,CloudRun \ --machine-type=n1-standard-4 \ --enable-autoscaling --min-nodes=2 --max-nodes=10 \ --no-issue-client-certificate --num-nodes=2 \ --logging=SYSTEM,WORKLOAD \ --monitoring=SYSTEM \ --scopes=cloud-platform,logging-write,monitoring-write,pubsub \ --zone us-central1 \ --release-channel=rapid \ --workload-pool=$PROJECT_ID.svc.id.goog
Tunggu beberapa menit hingga pembuatan cluster selesai. Selama proses ini, Anda mungkin melihat peringatan yang dapat diabaikan dengan aman. Setelah cluster dibuat, output-nya akan mirip dengan yang berikut ini:
Creating cluster ...done. Created [https://container.googleapis.com/v1beta1/projects/my-project/zones/us-central1/clusters/events-cluster].
Buat repositori standar Artifact Registry untuk menyimpan image container Docker Anda:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$CLUSTER_LOCATION
Ganti
REPOSITORY
dengan nama unik untuk repositori.
Mengonfigurasi akun layanan GKE
Konfigurasikan akun layanan GKE untuk bertindak sebagai akun layanan compute default.
Buat binding Identity and Access Management (IAM) di antara akun layanan:
PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')" gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[default/default]" \ $PROJECT_NUMBER-compute@developer.gserviceaccount.com
Tambahkan anotasi
iam.gke.io/gcp-service-account
ke akun layanan GKE, menggunakan alamat email akun layanan komputasi:kubectl annotate serviceaccount \ --namespace default \ default \ iam.gke.io/gcp-service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com
Mengaktifkan tujuan GKE
Agar Eventarc dapat mengelola resource di cluster GKE, aktifkan tujuan GKE dan ikat akun layanan Eventarc dengan peran yang diperlukan.
Aktifkan tujuan GKE untuk Eventarc:
gcloud eventarc gke-destinations init
Pada perintah untuk mengikat peran yang diperlukan, masukkan
y
.Peran berikut terikat:
roles/compute.viewer
roles/container.developer
roles/iam.serviceAccountAdmin
Membuat akun layanan dan mengikat peran akses
Sebelum membuat pemicu Eventarc, siapkan akun layanan yang dikelola pengguna dan berikan peran tertentu agar Eventarc dapat meneruskan peristiwa Pub/Sub.
Buat akun layanan bernama
TRIGGER_GSA
:TRIGGER_GSA=eventarc-bigquery-triggers gcloud iam service-accounts create $TRIGGER_GSA
Berikan peran
pubsub.subscriber
,monitoring.metricWriter
, daneventarc.eventReceiver
ke akun layanan:PROJECT_ID=$(gcloud config get-value project) gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/pubsub.subscriber" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/monitoring.metricWriter" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/eventarc.eventReceiver"
Membuat bucket Cloud Storage
Buat bucket Cloud Storage untuk menyimpan diagram. Pastikan bucket dan diagram tersedia secara publik, dan berada di region yang sama dengan layanan GKE Anda:
export BUCKET="$(gcloud config get-value core/project)-charts" gsutil mb -l $(gcloud config get-value run/region) gs://${BUCKET} gsutil uniformbucketlevelaccess set on gs://${BUCKET} gsutil iam ch allUsers:objectViewer gs://${BUCKET}
Membuat cloning repositori
Clone repositori GitHub.
git clone https://github.com/GoogleCloudPlatform/eventarc-samples cd eventarc-samples/processing-pipelines
Men-deploy layanan pemberitahuan
Dari direktori bigquery/notifier/python
, deploy layanan penayangan Knative yang menerima peristiwa pembuat diagram dan menggunakan SendGrid untuk mengirim link melalui email ke diagram yang dihasilkan.
Build dan kirim image container:
pushd bigquery/notifier/python export SERVICE_NAME=notifier docker build -t $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 . docker push $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 popd
Deploy image container ke penayangan Knative, dengan meneruskan alamat tujuan pengiriman email, dan kunci API SendGrid:
export TO_EMAILS=EMAIL_ADDRESS export SENDGRID_API_KEY=YOUR_SENDGRID_API_KEY gcloud run deploy ${SERVICE_NAME} \ --image $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 \ --update-env-vars TO_EMAILS=${TO_EMAILS},SENDGRID_API_KEY=${SENDGRID_API_KEY},BUCKET=${BUCKET}
Ganti kode berikut:
EMAIL_ADDRESS
: alamat email untuk mengirim link ke diagram yang dihasilkanYOUR_SENDGRID_API_KEY
: kunci API SendGrid yang Anda catat sebelumnya
Jika Anda melihat URL layanan, berarti deployment selesai.
Membuat pemicu untuk layanan notifikasi
Pemicu Eventarc untuk layanan notifikasi yang di-deploy di
filter penayangan Knative untuk log audit Cloud Storage
dengan methodName storage.objects.create
.
Buat pemicu:
gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \ --destination-gke-cluster=$CLUSTER_NAME \ --destination-gke-location=$CLUSTER_LOCATION \ --destination-gke-namespace=default \ --destination-gke-service=$SERVICE_NAME \ --destination-gke-path=/ \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com
Tindakan ini akan membuat pemicu yang disebut
trigger-notifier-gke
.
Men-deploy layanan pembuat diagram
Dari direktori bigquery/chart-creator/python
, deploy layanan penayangan
Knative yang menerima peristiwa runner kueri, mengambil data dari tabel BigQuery
untuk negara tertentu, lalu membuat diagram, menggunakan Matplotlib, dari
data. Diagram diupload ke bucket Cloud Storage.
Build dan kirim image container:
pushd bigquery/chart-creator/python export SERVICE_NAME=chart-creator docker build -t $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 . docker push $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 popd
Deploy image container ke penayangan Knative, dengan meneruskan
BUCKET
:gcloud run deploy ${SERVICE_NAME} \ --image $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 \ --update-env-vars BUCKET=${BUCKET}
Jika Anda melihat URL layanan, berarti deployment selesai.
Membuat pemicu untuk layanan pembuat diagram
Pemicu Eventarc untuk layanan pembuat diagram yang di-deploy di filter penayangan Knative untuk pesan yang dipublikasikan ke topik Pub/Sub.
Buat pemicu:
gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \ --destination-gke-cluster=$CLUSTER_NAME \ --destination-gke-location=$CLUSTER_LOCATION \ --destination-gke-namespace=default \ --destination-gke-service=$SERVICE_NAME \ --destination-gke-path=/ \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com
Tindakan ini akan membuat pemicu yang disebut
trigger-chart-creator-gke
.Tetapkan variabel lingkungan topik Pub/Sub.
export TOPIC_QUERY_COMPLETED=$(basename $(gcloud eventarc triggers describe trigger-${SERVICE_NAME}-gke --format='value(transport.pubsub.topic)'))
Men-deploy layanan runner kueri
Dari direktori processing-pipelines
, deploy layanan penayangan Knative yang menerima peristiwa Cloud Scheduler, mengambil data dari set data COVID-19 publik, dan menyimpan hasilnya dalam tabel BigQuery baru.
Build dan kirim image container:
export SERVICE_NAME=query-runner docker build -t $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 -f Dockerfile . docker push $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
Deploy image container ke penayangan Knative, dengan meneruskan
PROJECT_ID
danTOPIC_QUERY_COMPLETED
:gcloud run deploy ${SERVICE_NAME} \ --image $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 \ --update-env-vars PROJECT_ID=$(gcloud config get-value project),TOPIC_ID=${TOPIC_QUERY_COMPLETED}
Jika Anda melihat URL layanan, berarti deployment selesai.
Membuat pemicu untuk layanan runner kueri
Pemicu Eventarc untuk layanan runner kueri yang di-deploy di filter penayangan Knative untuk pesan yang dipublikasikan ke topik Pub/Sub.
Buat pemicu:
gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \ --destination-gke-cluster=$CLUSTER_NAME \ --destination-gke-location=$CLUSTER_LOCATION \ --destination-gke-namespace=default \ --destination-gke-service=$SERVICE_NAME \ --destination-gke-path=/ \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com
Tindakan ini akan membuat pemicu yang disebut
trigger-query-runner-gke
.Tetapkan variabel lingkungan untuk topik Pub/Sub.
export TOPIC_QUERY_SCHEDULED=$(gcloud eventarc triggers describe trigger-${SERVICE_NAME}-gke --format='value(transport.pubsub.topic)')
Menjadwalkan tugas
Pipeline pemrosesan dipicu oleh dua tugas Cloud Scheduler.
Buat aplikasi App Engine yang diperlukan oleh Cloud Scheduler dan tentukan lokasi yang sesuai (misalnya,
europe-west
):export APP_ENGINE_LOCATION=LOCATION gcloud app create --region=${APP_ENGINE_LOCATION}
Buat dua tugas Cloud Scheduler yang memublikasikan ke topik Pub/Sub sekali per hari:
gcloud scheduler jobs create pubsub cre-scheduler-uk \ --schedule="0 16 * * *" \ --topic=${TOPIC_QUERY_SCHEDULED} \ --message-body="United Kingdom"
gcloud scheduler jobs create pubsub cre-scheduler-cy \ --schedule="0 17 * * *" \ --topic=${TOPIC_QUERY_SCHEDULED} \ --message-body="Cyprus"
Jadwal ditentukan dalam format unix-cron. Misalnya,
0 16 * * *
berarti tugas berjalan pada pukul 16.00 (16.00) UTC setiap hari.
Menjalankan pipeline
Konfirmasi bahwa semua pemicu berhasil dibuat:
gcloud eventarc triggers list
Outputnya akan mirip dengan berikut ini:
NAME TYPE DESTINATION ACTIVE LOCATION trigger-chart-creator-gke google.cloud.pubsub.topic.v1.messagePublished GKE:chart-creator Yes us-central1 trigger-notifier-gke google.cloud.audit.log.v1.written GKE:notifier Yes us-central1 trigger-query-runner-gke google.cloud.pubsub.topic.v1.messagePublished GKE:query-runner Yes us-central1
Ambil ID tugas Cloud Scheduler:
gcloud scheduler jobs list
Outputnya akan mirip dengan berikut ini:
ID LOCATION SCHEDULE (TZ) TARGET_TYPE STATE cre-scheduler-cy us-central1 0 17 * * * (Etc/UTC) Pub/Sub ENABLED cre-scheduler-uk us-central1 0 16 * * * (Etc/UTC) Pub/Sub ENABLED
Meskipun tugas dijadwalkan untuk berjalan setiap hari pukul 16.00 dan 17.00, Anda juga dapat menjalankan tugas Cloud Scheduler secara manual:
gcloud scheduler jobs run cre-scheduler-cy gcloud scheduler jobs run cre-scheduler-uk
Setelah beberapa menit, pastikan ada dua diagram di bucket Cloud Storage:
gsutil ls gs://${BUCKET}
Outputnya akan mirip dengan berikut ini:
gs://PROJECT_ID-charts/chart-cyprus.png gs://PROJECT_ID-charts/chart-unitedkingdom.png
Selamat! Anda juga akan menerima dua email dengan link ke diagram.
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.
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Menghapus resource tutorial
Hapus layanan penayangan Knative 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 penayangan Knative dari Konsol Google Cloud.
Hapus pemicu Eventarc yang Anda buat dalam tutorial ini:
gcloud eventarc triggers delete TRIGGER_NAME
Ganti
TRIGGER_NAME
dengan nama pemicu Anda.Hapus konfigurasi default Google Cloud CLI yang Anda tambahkan selama penyiapan tutorial.
gcloud config unset project gcloud config unset run/cluster gcloud config unset run/cluster_location gcloud config unset run/platform gcloud config unset eventarc/location gcloud config unset compute/zone
Hapus image dari Artifact Registry.
gcloud artifacts docker images delete $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/notifier:v1 gcloud artifacts docker images delete $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/chart-creator:v1 gcloud artifacts docker images delete $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/query-runner:v1
Hapus bucket, beserta semua objek di dalam bucket:
gcloud storage rm --recursive gs://${BUCKET}/
Hapus tugas Cloud Scheduler:
gcloud scheduler jobs delete cre-scheduler-cy gcloud scheduler jobs delete cre-scheduler-uk