Halaman ini menjelaskan tentang penggunaan Pub/Sub untuk push pesan ke endpoint layanan Cloud Run, tempat pesan selanjutnya dikirim ke container sebagai permintaan HTTP. Halaman ini menunjukkan cara mengaktifkan layanan Anda untuk memproses pesan yang dikirim dengan aman dari langganan Pub/Sub dalam project Google Cloud yang sama.
Dengan memanfaatkan akun layanan dan izin IAM, Anda dapat menggunakan Pub/Sub secara aman dan pribadi dengan Cloud Run, tanpa harus mengekspos layanan Cloud Run Anda ke publik. Hanya langganan Pub/Sub yang telah Anda siapkan yang dapat memanggil layanan.
Batas waktu konfirmasi untuk Cloud Run
Pastikan Anda menetapkan
batas waktu konfirmasi langganan Pub/Sub (ackDeadlineSeconds
)
ke batas maksimum 600 detik.
Layanan Cloud Run Anda harus mengonfirmasi pesan Pub/Sub
dengan menampilkan respons dalam waktu 600 detik.
Jika tidak, Pub/Sub akan mengirim ulang pesan,
sehingga menyebabkan pemicu diduplikat layanan Cloud Run Anda.
Kasus penggunaan
Kemungkinan kasus penggunaan meliputi:
- Mentransformasi data setelah menerima peristiwa pada saat mengupload file ke bucket Cloud Storage.
- Memproses log Google Cloud Operations Suite Anda dengan Cloud Run dengan mengekspornya ke Pub/Sub
- Mempublikasi dan memproses peristiwa kustom Anda sendiri dari layanan Cloud Run.
Ringkasan integrasi
Untuk mengintegrasikan layanan Anda dengan Pub/Sub,
- Buat topik Pub/Sub.
- Tambahkan kode di layanan Cloud Run untuk merespons pesan Pub/Sub yang dikirim ke topik yang Anda buat.
- Buat akun layanan dengan izin yang diperlukan.
- Buat langganan Pub/Sub lalu kaitkan dengan akun layanan. Langganan ini akan mengirim segala pesan ke layanan Anda berisikan pesan yang dipublikasikan ke topik tersebut.
Sebelum memulai
- Siapkan lingkungan Anda seperti yang dijelaskan di halaman penyiapan untuk Cloud Run jika Anda belum melakukannya.
- Dalam panduan ini, Anda diasumsikan sudah memiliki layanan Cloud Run dan ingin menambahkan kode yang dapat mengintegrasikannya dengan Pub/Sub. Jika Anda tidak memiliki layanan tersebut, alih-alih mengikuti halaman ini ada baiknya untuk menggunakan tutorial Cloud Run untuk Pub/Sub.
Menambahkan kode untuk menangani pesan dari Pub/Sub
Edit kode layanan yang ada untuk menambahkan kode yang diperlukan untuk mendukung Pub/Sub. Layanan Anda harus mengekstrak pesan dari permintaan dan menampilkan kode berhasil yang diharapkan. Cuplikan berikut menunjukkan cara melakukannya untuk membuat pesan Hello World sederhana dengan bahasa yang dipilih (Anda dapat menggunakan bahasa apa saja):
Node.js
Python
Go
Java
Anda harus membuat kode layanan untuk mengembalikan kode respons HTTP yang akurat. Kode
berhasil, seperti HTTP 200
atau 204
, mengonfirmasi pemrosesan lengkap
pesan Pub/Sub. Kode error, seperti HTTP 400
atau 500
, menunjukkan bahwa
pesan akan dicoba lagi, seperti yang dijelaskan dalam
Menerima pesan menggunakan Push.
Build lalu deploy layanan Cloud Run Anda setelah Anda mengupdatenya dengan kode Pub/Sub di atas.
Membuat akun layanan untuk langganan
Anda perlu membuat akun layanan untuk dikaitkan dengan langganan Pub/Sub dan memberinya izin untuk memanggil layanan Cloud Run. Pesan Pub/Sub yang dikirim ke layanan Cloud Run Anda akan membawa identitas akun layanan ini.
Anda dapat menggunakan akun layanan yang ada untuk merepresentasikan identitas langganan Pub/Sub, atau Anda dapat membuat yang baru.
Untuk membuat akun layanan baru dan memberinya izin memanggil layanan Cloud Run:
Konsol
Di Konsol Google Cloud, buka halaman Akun Layanan.
Pilih project.
Masukkan nama akun layanan untuk ditampilkan di Konsol Google Cloud.
Konsol Google Cloud membuat ID akun layanan berdasarkan nama ini. Edit ID jika perlu. Anda tidak dapat mengubah ID di kemudian hari.
Opsional: Masukkan deskripsi akun layanan.
Klik Create and continue.
Opsional: Klik kolom Select a role.
Pilih Cloud Run > Cloud Run Invoker.
Klik Done.
Command line
Buat akun layanan:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \ --display-name "DISPLAYED_SERVICE_ACCOUNT_NAME"
Ganti
- SERVICE_ACCOUNT_NAME dengan nama huruf kecil yang unik dalam
project Google Cloud Anda, misalnya
my-invoker-service-account-name
. - DISPLAYED_SERVICE_ACCOUNT_NAME dengan nama yang ingin Anda
tampilkan untuk akun layanan ini, di konsol, misalnya,
My Invoker Service Account
.
- SERVICE_ACCOUNT_NAME dengan nama huruf kecil yang unik dalam
project Google Cloud Anda, misalnya
Untuk Cloud Run, beri akun layanan Anda izin untuk memanggil layanan:
gcloud run services add-iam-policy-binding SERVICE \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker
Ganti
- SERVICE dengan nama layanan yang ingin dipanggil oleh Pub/Sub.
- SERVICE_ACCOUNT_NAME dengan nama akun layanan.
- PROJECT_ID dengan ID project Google Cloud Anda.
Beri akun layanan ini akses ke project sehingga memiliki izin untuk menyelesaikan tindakan tertentu pada resource di project Anda:
gcloud projects add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL --role=roles/run.invoker
Ganti
RESOURCE_ID: ID project Google Cloud Anda.
PRINCIPAL: ID untuk akun utama, atau anggota, yang biasanya memiliki bentuk berikut: PRINCIPAL_TYPE:ID. Misalnya,
user:my-user@example.com
. Untuk daftar lengkap nilai yang dapat dimiliki PRINCIPAL, lihat referensi Binding Kebijakan.
Terraform
Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.
Untuk membuat akun layanan, tambahkan kode berikut ke file
.tf
yang sudah ada:Untuk memberi akun layanan Anda izin agar dapat memanggil layanan, tambahkan kode berikut ke file
.tf
yang sudah ada:
Membuat topik Pub/Sub
Permintaan yang masuk ke layanan Anda muncul dipicu oleh pesan yang dipublikasikan ke topik Pub/Sub sehingga Anda harus membuat topik:
Konsol
Buka halaman topik Pub/Sub di Konsol Google Cloud.
Klik Buat topik.
Masukkan Nama unik untuk topik Anda, misalnya, MyTopic.
Command line
gcloud pubsub topics create TOPIC-NAME
Ganti TOPIC-NAME dengan nama topik yang unik dalam project Google Cloud Anda.
Terraform
Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.
Bagian ini menunjukkan cara menggunakan Terraform untuk
menentukan layanan di konfigurasi Terraform,
menggunakan resource google_pubsub_topic
dari Penyedia Google Cloud Platform.
Tambahkan konten berikut ke file .tf
yang sudah ada:
Membuat langganan push dan mengaitkannya dengan akun layanan
Setelah membuat topik Pub/Sub, Anda harus berlangganan layanan untuk menerima pesan yang dikirim ke topik, dan Anda harus mengaitkan langganan dengan akun layanan yang Anda buat untuk layanan. Anda dapat menggunakan Konsol Google Cloud atau command line gcloud:
Konsol
Buka halaman topik Pub/Sub.
Klik topik yang ingin dilanggan.
Klik Buat Langganan untuk menampilkan formulir langganan:
Di dalam formulir,
- Tentukan jenis pengiriman push.
- Untuk URL Endpoint, tentukan URL layanan Anda, yang ditampilkan di halaman detail layanan.
- Di menu dropdown Akun Layanan, pilih akun layanan yang Anda buat dengan izin yang diperlukan.
- Tetapkan akhir masa berlaku langganan dan batas waktu konfirmasi selama 600 detik.
- Klik Buat.
Langganan selesai. Pesan yang diposting ke topik tersebut sekarang akan dikirim ke layanan Anda.
Command line
Izinkan Pub/Sub membuat token autentikasi di project Anda:
gcloud projects add-iam-policy-binding PROJECT-ID \ --member=serviceAccount:service-PROJECT-NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Ganti
- PROJECT-ID dengan ID project Google Cloud Anda.
PROJECT-NUMBER dengan nomor project Google Cloud Anda.
Project ID dan nomor project tercantum di panel Project info di Konsol Google Cloud untuk project Anda.
Buat langganan Pub/Sub dengan akun layanan yang Anda buat dengan izin yang diperlukan:
gcloud pubsub subscriptions create SUBSCRIPTION-ID --topic TOPIC-NAME \ --ack-deadline=600 \ --push-endpoint=SERVICE-URL/ \ --push-auth-service-account=SERVICE-ACCOUNT-NAME@PROJECT-ID.iam.gserviceaccount.com
Ganti
- TOPIC-NAME dengan topik yang dibuat sebelumnya.
- SERVICE-URL dengan URL HTTP yang diberikan
saat Anda men-deploy layanan. Anda dapat menemukannya dengan menggunakan perintah
gcloud run services describe
, dengan menentukan nama layanan Anda: cari baris nilai yang dimulai dengandomain
. - PROJECT-ID dengan ID project Google Cloud Anda.
Flag
--push-auth-service-account
mengaktifkan fungsi push Pub/Sub untuk Autentikasi dan otorisasiPerlu diperhatikan bahwa batas waktu konfirmasi ditetapkan ke maksimum 600 detik.
Langganan selesai. Pesan yang diposting ke topik tersebut sekarang akan dikirim ke layanan Anda. Anda dapat mengirim pesan pengujian ke topik menggunakan perintah:
gcloud pubsub topics publish TOPIC --message "hello"
Ganti TOPIC dengan nama topik yang Anda buat.
Terraform
Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.
-
Izinkan Pub/Sub membuat token autentikasi di project Anda. Tambahkan kode berikut ke file
.tf
Anda: -
Buat langganan Pub/Sub dengan akun layanan yang dibuat dengan izin yang diperlukan. Tambahkan kode berikut ke file
.tf
Anda: -
Langganan selesai. Pesan yang diposting ke topik tersebut kini akan dikirim ke layanan Anda. Anda dapat mengirim pesan pengujian ke topik menggunakan perintah:
gcloud pubsub topics publish TOPIC --message "hello"
Ganti TOPIC dengan nama topik yang Anda buat.
Langkah berikutnya
- Lihat Membatasi traffic masuk untuk informasi tentang cara meningkatkan keamanan produksi dengan menggunakan kontrol traffic masuk internal untuk membatasi traffic masuk.
- Lihat tutorial Cloud Run untuk Pub/Sub untuk mengetahui contoh aplikasi yang lengkap.
- Lihat tutorial Cloud Run untuk Cloud Storage untuk mengetahui contoh penggunaan Pub/Sub untuk mendorong pemrosesan gambar asinkron.
- Lihat dokumentasi Pub/Sub untuk detail lebih lanjut tentang Pub/Sub.