Menerima peristiwa Pub/Sub menggunakan layanan Cloud Run yang diautentikasi


Tutorial ini menunjukkan cara men-deploy aplikasi dalam container menggunakan layanan Cloud Run terautentikasi yang menerima peristiwa menggunakan Pub/Sub. Pub/Sub adalah layanan pesan real-time terkelola sepenuhnya yang memungkinkan Anda mengirim dan menerima pesan antar-aplikasi independen.

Tujuan

Dalam tutorial ini, Anda akan:

  1. Men-deploy layanan penerima peristiwa ke Cloud Run yang memerlukan pemanggilan yang diautentikasi.

  2. Buat pemicu Eventarc yang menghubungkan topik Pub/Sub ke layanan Cloud Run.

  3. Publikasikan pesan ke topik Pub/Sub untuk membuat peristiwa.

  4. Lihat peristiwa di log Cloud Run.

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

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

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

  10. Update komponen Google Cloud CLI:
    gcloud components update
  11. Login menggunakan akun Anda:
    gcloud auth login
  12. Aktifkan API:
    gcloud services enable artifactregistry.googleapis.com \
        cloudbuild.googleapis.com \
        eventarc.googleapis.com \
        pubsub.googleapis.com \
        run.googleapis.com
  13. Tetapkan variabel konfigurasi 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}
    export SERVICE_NAME=trigger-pubsub
  14. 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:

    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.

  15. Catat akun layanan default Compute Engine karena Anda akan melampirkan akun tersebut ke pemicu Eventarc untuk merepresentasikan identitas pemicu untuk tujuan pengujian. Akun layanan ini dibuat secara otomatis setelah mengaktifkan atau menggunakan Google Cloud layanan yang menggunakan Compute Engine, dan dengan format email berikut:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Ganti PROJECT_NUMBER dengan Google Cloudnomor project Anda. Anda dapat menemukan nomor project di halaman Selamat Datang pada Konsol Google Cloud atau dengan menjalankan perintah berikut:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

    Untuk lingkungan produksi, sebaiknya buat akun layanan baru dan berikan satu atau beberapa peran IAM yang berisi izin minimum yang diperlukan dan ikuti prinsip hak istimewa terendah.

  16. Secara default, layanan Cloud Run hanya dapat dipanggil oleh Project Owner, Project Editor, Cloud Run Admin dan Invoker. Anda dapat mengontrol akses per layanan; namun, untuk tujuan pengujian, berikan peran Cloud Run Invoker (run.invoker) di project Google Cloud ke akun layanan Compute Engine. Peran ini akan memberikan peran tersebut di semua layanan dan tugas Cloud Run dalam suatu project.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/run.invoker

    Perhatikan bahwa pemicu akan berhasil dibuat dan diaktifkan jika Anda membuat pemicu untuk layanan Cloud Run yang diautentikasi tanpa memberikan peran Cloud Run Namun, pemicu tidak akan berfungsi seperti yang diharapkan dan pesan yang mirip dengan berikut ini akan muncul di log:

    The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
  17. Jika Anda mengaktifkan agen layanan Cloud Pub/Sub pada atau sebelum 8 April 2021, untuk mendukung permintaan push Pub/Sub yang diautentikasi, berikan peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator) ke agen layanan. Jika tidak, peran ini akan diberikan secara default:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator

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.

Men-deploy penerima peristiwa ke Cloud Run

Men-deploy layanan Cloud Run yang mencatat konten peristiwa ke dalam log.

  1. Buat clone repositori GitHub:

    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 sebagai file ZIP dan mengekstraknya.

    Ruby

    git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git

    Atau, Anda dapat mendownload contoh sebagai file ZIP dan mengekstraknya.

    C#

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git

    Atau, Anda dapat mendownload contoh sebagai file ZIP dan mengekstraknya.

  2. Ubah ke direktori yang berisi kode contoh Cloud Run:

    Node.js

    cd nodejs-docs-samples/eventarc/pubsub/

    Python

    cd python-docs-samples/eventarc/pubsub/

    Go

    cd golang-samples/eventarc/pubsub/

    Java

    cd java-docs-samples/eventarc/pubsub/

    Ruby

    cd ruby-docs-samples/eventarc/pubsub/

    C#

    cd dotnet-docs-samples/eventarc/pubsub/
  3. Build container dan upload ke Cloud Build:

    gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/trigger-pubsub:v1
  4. Men-deploy image container ke Cloud Run

    gcloud run deploy ${SERVICE_NAME} \
        --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/trigger-pubsub:v1
  5. Pada perintah Allow unauthenticated invocations to trigger-pubsub (y/N)?, respons n dengan "No".

Jika Anda melihat URL layanan Cloud Run, berarti deployment selesai.

Membuat pemicu Eventarc

Saat pesan dipublikasikan ke topik Pub/Sub, peristiwa tersebut akan memicu layanan Cloud Run.

  1. Buat pemicu untuk memproses pesan Pub/Sub:

    Topik pub/sub baru

      gcloud eventarc triggers create ${SERVICE_NAME} \
          --destination-run-service=${SERVICE_NAME} \
          --destination-run-region=${REGION} \
          --location=${REGION} \
          --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
          --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    Tindakan ini akan membuat topik Pub/Sub baru dan pemicu untuk topik tersebut yang disebut trigger-pubsub.

    Topik Pub/Sub yang ada

      gcloud eventarc triggers create ${SERVICE_NAME} \
          --destination-run-service=${SERVICE_NAME} \
          --destination-run-region=${REGION} \
          --location=${REGION} \
          --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
          --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID \
          --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    Ganti kode berikut:

    • PROJECT_ID: Google Cloud project ID Anda
    • TOPIC_ID: ID topik Pub/Sub yang ada

    Tindakan ini akan membuat pemicu yang disebut trigger-pubsub untuk topik Pub/Sub yang ada.

    Perhatikan bahwa saat membuat pemicu Eventarc untuk pertama kalinya dalam project Google Cloud , mungkin akan ada penundaan dalam penyediaan agen layanan Eventarc. Masalah ini biasanya dapat diatasi dengan mencoba membuat ulang pemicu. Untuk informasi selengkapnya, lihat Error izin ditolak.

  2. Konfirmasi bahwa pemicu telah berhasil dibuat. Perhatikan bahwa meskipun pemicu Anda langsung dibuat, diperlukan waktu hingga dua menit agar pemicu berfungsi sepenuhnya.

    gcloud eventarc triggers list --location=${REGION}

    Status pemicu yang ditampilkan harus ACTIVE: Yes.

Membuat dan melihat peristiwa

Publikasikan pesan ke topik Pub/Sub untuk membuat peristiwa dan memicu layanan Cloud Run. Layanan Cloud Run mencatat pesan ke dalam log layanan.

  1. Cari dan tetapkan topik Pub/Sub sebagai variabel lingkungan:

    export TOPIC_ID=$(gcloud eventarc triggers describe ${SERVICE_NAME} \
        --format='value(transport.pubsub.topic)')
  2. Kirim pesan ke topik Pub/Sub untuk membuat peristiwa:

    gcloud pubsub topics publish $TOPIC_ID --message "Hello there"

    Peristiwa dikirim ke layanan Cloud Run, yang mencatat pesan peristiwa.

  3. Lihat entri log terkait peristiwa yang dibuat oleh layanan Anda:

    gcloud logging read 'textPayload: "Hello there!"'

    Entri log akan terlihat seperti berikut:

    textPayload: 'Hello, Hello there!'

Log mungkin memerlukan waktu beberapa saat untuk ditampilkan. Jika Anda tidak melihatnya, periksa lagi setelah satu menit.

Pembersihan

Agar tidak dikenai biaya seperti menyimpan image container di Artifact Registry, menyimpan file di bucket Cloud Storage, dan memicu Eventarc, Anda dapat menghapus resource yang Anda buat untuk tutorial ini:

  1. Hapus layanan Cloud Run.

  2. Hapus image container Anda.

  3. Hapus pemicu Eventarc.

Atau, Anda dapat menghapus project Google Cloud. Menghapus project Google Cloud akan menghentikan penagihan untuk semua resource yang digunakan dalam project tersebut.

Delete a Google Cloud project:

gcloud projects delete PROJECT_ID

Langkah berikutnya