Mem-build pipeline pemrosesan BigQuery dengan Eventarc


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 mem-build dan men-deploy tiga layanan Cloud Run yang mengizinkan akses tidak diautentikasi dan menerima peristiwa menggunakan Eventarc:

  1. 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.
  2. Chart Creator—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.
  3. Notifier—Dipicu oleh log audit saat layanan Chart Creator menyimpan diagram di bucket Cloud Storage, layanan ini menggunakan layanan email, SendGrid, untuk mengirim link ke diagram ke alamat email.

Diagram berikut menunjukkan arsitektur tingkat tinggi:

Pipeline pemrosesan BigQuery

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

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.

  1. 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.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Artifact Registry, Cloud Build, Cloud Logging, Cloud Run, Cloud Scheduler, Eventarc, and Pub/Sub APIs:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com eventarc.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. 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.

  10. Make sure that billing is enabled for your Google Cloud project.

  11. Enable the Artifact Registry, Cloud Build, Cloud Logging, Cloud Run, Cloud Scheduler, Eventarc, and Pub/Sub APIs:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com eventarc.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com
  12. Untuk Cloud Storage, aktifkan logging audit untuk jenis akses data ADMIN_READ, DATA_WRITE, dan DATA_READ.

    1. 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
    2. Di editor teks, buka /tmp/policy.yaml, lalu tambahkan atau ubah hanya konfigurasi log audit di bagian auditConfigs:

      
        auditConfigs:
        - auditLogConfigs:
          - logType: ADMIN_READ
          - logType: DATA_WRITE
          - logType: DATA_READ
          service: storage.googleapis.com
        bindings:
        - members:
        [...]
        etag: BwW_bHKTV5U=
        version: 1
    3. 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.

  13. 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'

  14. 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'

  15. 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 REGION dengan lokasi Eventarc yang didukung pilihan Anda.

Membuat kunci API SendGrid

SendGrid adalah penyedia email berbasis cloud yang memungkinkan Anda mengirim email tanpa harus mengelola server email.

  1. Login ke SendGrid dan buka Settings > API Keys.
  2. Klik Create API Key.
  3. Pilih izin untuk kunci tersebut. Setidaknya, kunci harus memiliki izin Pengiriman Email untuk mengirim email.
  4. Beri nama kunci Anda dan untuk membuat kunci, klik Simpan.
  5. 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 penampung 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"
gsutil mb -l $(gcloud config get-value run/region) gs://${BUCKET}
gsutil uniformbucketlevelaccess set on gs://${BUCKET}
gsutil iam ch allUsers:objectViewer gs://${BUCKET}

Men-deploy layanan Notifier

Men-deploy layanan Cloud Run yang menerima peristiwa Chart Creator dan menggunakan SendGrid untuk mengirim email link ke diagram yang dihasilkan.

  1. 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/
  2. Build 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
  3. Deploy image container ke Cloud Run, dengan meneruskan alamat yang akan menerima 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_ADDRESS dengan alamat email untuk mengirim link ke diagram yang dihasilkan
    • YOUR_SENDGRID_API_KEY dengan kunci API SendGrid yang Andacatat 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.

  1. 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 Chart Creator

Men-deploy layanan Cloud Run yang menerima peristiwa Runner Kueri, mengambil data dari tabel BigQuery untuk negara tertentu, lalu membuat diagram, menggunakan Matplotlib, dari data tersebut. Diagram diupload ke bucket Cloud Storage.

  1. Ubah ke direktori chart-creator/python:

    cd ../../chart-creator/python
  2. Build 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
  3. 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 Chart Creator

Pemicu Eventarc untuk layanan Chart Creator yang di-deploy di Cloud Run memfilter pesan yang dipublikasikan ke topik Pub/Sub.

  1. 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.

  2. 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 Runner Kueri

Deploy layanan Cloud Run yang menerima peristiwa Cloud Scheduler, mengambil data dari set data COVID-19 publik, dan menyimpan hasilnya dalam tabel BigQuery baru.

  1. Ubah ke direktori processing-pipelines:

    cd ../../..
  2. Build 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
  3. Deploy image container ke Cloud Run, dengan meneruskan PROJECT_ID dan TOPIC_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 Runner Kueri

Pemicu Eventarc untuk layanan Runner Kueri yang di-deploy di Cloud Run memfilter pesan yang dipublikasikan ke topik Pub/Sub.

  1. 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.

  2. 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.

  1. 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}
  2. 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

  1. 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-central1
    
  2. 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
    
  3. 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
  4. Setelah beberapa menit, pastikan ada dua diagram di bucket Cloud Storage:

    gsutil 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 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

  1. Hapus layanan Cloud Run yang telah 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.

  2. 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
  3. Hapus pemicu Eventarc yang Anda buat dalam tutorial ini:

     gcloud eventarc triggers delete TRIGGER_NAME
     
    Ganti TRIGGER_NAME dengan nama pemicu Anda.

  4. 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
  5. Hapus bucket, beserta semua objek di dalam bucket:

    gcloud storage rm --recursive gs://${BUCKET}/
  6. Hapus tugas Cloud Scheduler:

    gcloud scheduler jobs delete cre-scheduler-cy
    gcloud scheduler jobs delete cre-scheduler-uk

Langkah berikutnya