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 melalui email.
Tujuan
Dalam tutorial ini, Anda akan membangun dan men-deploy tiga layanan Cloud Run yang memungkinkan akses tidak diautentikasi dan menerima peristiwa menggunakan Eventarc:
- Query Runner—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.
- Chart Creator—Dipicu saat layanan Query Runner memublikasikan pesan ke topik Pub/Sub, layanan ini membuat diagram menggunakan library plotting Python, Matplotlib, dan menyimpan diagram ke bucket Cloud Storage.
- Notifier—Dipicu oleh log audit saat layanan Chart Creator menyimpan diagram dalam bucket Cloud Storage, layanan ini menggunakan layanan email, SendGrid, untuk mengirim link ke diagram ke alamat email.
Diagram berikut menunjukkan arsitektur tingkat tinggi:
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.
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Buat atau pilih Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan Artifact Registry, Cloud Build, Cloud Logging, Cloud Run, Cloud Scheduler, Eventarc, dan Pub/Sub API:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com cloudscheduler.googleapis.com eventarc.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com -
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Buat atau pilih Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan Artifact Registry, Cloud Build, Cloud Logging, Cloud Run, Cloud Scheduler, Eventarc, dan Pub/Sub API:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com cloudscheduler.googleapis.com eventarc.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com - Untuk Cloud Storage, aktifkan audit logging untuk jenis akses data
ADMIN_READ,DATA_WRITE, danDATA_READ.- Baca kebijakan Identity and Access Management (IAM) yang terkait dengan
Google Cloud project, folder, atau organisasi Anda dan 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, maka ulangi langkah-langkah ini, mulai 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
Google Cloud project, folder, atau organisasi Anda dan simpan dalam file sementara:
- Berikan peran
eventarc.eventReceiverke 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.serviceAccountTokenCreatorke 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=REGION gcloud config set run/region ${REGION} gcloud config set run/platform managed gcloud config set eventarc/location ${REGION}
Ganti
REGIONdengan lokasi Eventarc yang didukung pilihan Anda.
Membuat kunci API SendGrid
SendGrid adalah penyedia email berbasis cloud yang memungkinkan Anda mengirim email tanpa harus memelihara 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.
- Beri nama kunci Anda, lalu klik Simpan untuk membuat kunci.
- SendGrid akan membuat kunci baru. Ini adalah satu-satunya salinan kunci, jadi pastikan Anda menyalin kunci dan menyimpannya untuk nanti.
Membuat repositori standar Artifact Registry
Buat repositori standar Artifact Registry untuk menyimpan image container Docker 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 unik untuk menyimpan diagram. Pastikan bucket dan diagram tersedia secara publik, dan berada di region yang sama dengan layanan Cloud Run Anda:
export BUCKET="$(gcloud config get-value core/project)-charts" gcloud storage buckets create gs://${BUCKET} --location=$(gcloud config get-value run/region) gcloud storage buckets update gs://${BUCKET} --uniform-bucket-level-access gcloud storage buckets add-iam-policy-binding gs://${BUCKET} --member=allUsers --role=roles/storage.objectViewer
Men-deploy layanan Notifier
Men-deploy layanan Cloud Run yang menerima peristiwa Chart Creator dan menggunakan SendGrid untuk mengirimkan email berisi link ke diagram yang dibuat.
Clone repositori GitHub dan ubah ke direktori
notifier/python:git clone https://github.com/GoogleCloudPlatform/eventarc-samples cd eventarc-samples/processing-pipelines/bigquery/notifier/python/
Buat dan kirim image container:
export SERVICE_NAME=notifier docker build -t $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 . docker push $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
Deploy image container ke Cloud Run, dengan meneruskan alamat untuk mengirim email, dan kunci API SendGrid:
export TO_EMAILS=EMAIL_ADDRESS export SENDGRID_API_KEY=YOUR_SENDGRID_API_KEY gcloud run deploy ${SERVICE_NAME} \ --image $REGION-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} \ --allow-unauthenticated
Ganti kode berikut:
EMAIL_ADDRESSdengan alamat email untuk mengirim link ke diagram yang dibuatYOUR_SENDGRID_API_KEYdengan kunci API SendGrid yang Anda catat sebelumnya
Jika Anda melihat URL layanan, berarti deployment selesai.
Membuat pemicu untuk layanan Notifier
Pemicu Eventarc untuk layanan Notifier yang di-deploy di
Cloud Run memfilter log audit Cloud Storage dengan
methodName adalah storage.objects.create.
Buat pemicu:
gcloud eventarc triggers create trigger-${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --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
trigger-notifier.
Men-deploy layanan Pembuat Diagram
Deploy layanan Cloud Run yang menerima peristiwa Query Runner, mengambil data dari tabel BigQuery untuk negara tertentu, lalu membuat diagram, menggunakan Matplotlib, dari data tersebut. Diagram diupload ke bucket Cloud Storage.
Ubah ke direktori
chart-creator/python:cd ../../chart-creator/python
Buat dan kirim image container:
export SERVICE_NAME=chart-creator docker build -t $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 . docker push $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
Deploy image container ke Cloud Run, dengan meneruskan
BUCKET:gcloud run deploy ${SERVICE_NAME} \ --image $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 \ --update-env-vars BUCKET=${BUCKET} \ --allow-unauthenticated
Jika Anda melihat URL layanan, berarti deployment selesai.
Membuat pemicu untuk layanan Pembuat Diagram
Pemicu Eventarc untuk layanan Chart Creator yang di-deploy di Cloud Run memfilter pesan yang dipublikasikan ke topik Pub/Sub.
Buat pemicu:
gcloud eventarc triggers create trigger-${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"
Tindakan ini akan membuat pemicu yang disebut
trigger-chart-creator.Tetapkan variabel lingkungan topik Pub/Sub.
export TOPIC_QUERY_COMPLETED=$(basename $(gcloud eventarc triggers describe trigger-${SERVICE_NAME} --format='value(transport.pubsub.topic)'))
Men-deploy layanan Query Runner
Men-deploy layanan Cloud Run yang menerima peristiwa Cloud Scheduler, mengambil data dari set data COVID-19 publik, dan menyimpan hasilnya dalam tabel BigQuery baru.
Ubah ke direktori
processing-pipelines:cd ../../..
Buat dan kirim image container:
export SERVICE_NAME=query-runner docker build -t $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 -f Dockerfile . docker push $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
Deploy image container ke Cloud Run, dengan meneruskan
PROJECT_IDdanTOPIC_QUERY_COMPLETED:gcloud run deploy ${SERVICE_NAME} \ --image $REGION-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} \ --allow-unauthenticated
Jika Anda melihat URL layanan, berarti deployment selesai.
Membuat pemicu untuk layanan Query Runner
Pemicu Eventarc untuk layanan Query Runner yang di-deploy di Cloud Run memfilter pesan yang dipublikasikan ke topik Pub/Sub.
Buat pemicu:
gcloud eventarc triggers create trigger-${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"
Tindakan ini akan membuat pemicu yang disebut
trigger-query-runner.Tetapkan variabel lingkungan untuk topik Pub/Sub.
export TOPIC_QUERY_SCHEDULED=$(gcloud eventarc triggers describe trigger-${SERVICE_NAME} --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:
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 (4 PM) UTC setiap hari.
Menjalankan pipeline
Pertama, pastikan semua pemicu berhasil dibuat:
gcloud eventarc triggers list
Outputnya akan mirip dengan berikut ini:
NAME: trigger-chart-creator TYPE: google.cloud.pubsub.topic.v1.messagePublished DESTINATION: Cloud Run service: chart-creator ACTIVE: Yes LOCATION: us-central1 NAME: trigger-notifier TYPE: google.cloud.audit.log.v1.written DESTINATION: Cloud Run service: notifier ACTIVE: Yes LOCATION: us-central1 NAME: trigger-query-runner TYPE: google.cloud.pubsub.topic.v1.messagePublished DESTINATION: Cloud Run service: query-runner ACTIVE: Yes LOCATION: us-central1Ambil 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 ENABLEDMeskipun tugas dijadwalkan untuk berjalan setiap hari pada 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, konfirmasi bahwa ada dua diagram di bucket Cloud Storage:
gcloud storage ls gs://${BUCKET}
Outputnya akan mirip dengan berikut ini:
gs://BUCKET/chart-cyprus.png gs://BUCKET/chart-unitedkingdom.png
Selamat! Anda juga akan menerima dua email berisi 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.
Menghapus Google Cloud project:
gcloud projects delete PROJECT_ID
Menghapus resource tutorial
Hapus layanan Cloud Run yang Anda deploy dalam tutorial ini:
gcloud run services delete SERVICE_NAME
Dengan
SERVICE_NAMEadalah nama layanan pilihan Anda.Anda juga dapat menghapus layanan Cloud Run dari konsolGoogle Cloud .
Hapus konfigurasi default Google Cloud CLI yang Anda tambahkan selama penyiapan tutorial.
gcloud config unset project gcloud config unset run/region gcloud config unset run/platform gcloud config unset eventarc/location
Hapus pemicu Eventarc yang Anda buat dalam tutorial ini:
Gantigcloud eventarc triggers delete TRIGGER_NAME
TRIGGER_NAMEdengan nama pemicu Anda.Hapus image dari Artifact Registry.
gcloud artifacts docker images delete $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/notifier:v1 gcloud artifacts docker images delete $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/chart-creator:v1 gcloud artifacts docker images delete $REGION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/query-runner:v1
Hapus bucket, beserta semua objek di dalamnya:
gcloud storage rm --recursive gs://${BUCKET}/Hapus tugas Cloud Scheduler:
gcloud scheduler jobs delete cre-scheduler-cy gcloud scheduler jobs delete cre-scheduler-uk