Banyak aplikasi perlu melakukan pemrosesan di latar belakang di luar konteks permintaan web. Tutorial ini membuat aplikasi web yang memungkinkan pengguna memasukkan teks untuk diterjemahkan, lalu menampilkan daftar terjemahan sebelumnya. Terjemahan dilakukan dalam proses latar belakang untuk menghindari pemblokiran permintaan pengguna.
Diagram berikut menggambarkan proses permintaan terjemahan.
Berikut urutan peristiwa cara kerja aplikasi tutorial:
- Buka halaman web untuk melihat daftar terjemahan sebelumnya, yang disimpan di Firestore.
- Minta terjemahan teks dengan memasukkan formulir HTML.
- Permintaan terjemahan dipublikasikan ke Pub/Sub.
- Aplikasi Cloud Run menerima pesan Pub/Sub.
- Aplikasi Cloud Run menggunakan Cloud Translation untuk menerjemahkan teks.
- Aplikasi Cloud Run menyimpan hasilnya di Firestore.
Tutorial ini ditujukan bagi siapa saja yang tertarik untuk mempelajari pemrosesan di latar belakang dengan Google Cloud. Anda tidak memerlukan pengalaman sebelumnya dengan Pub/Sub, Firestore, App Engine, atau Cloud Run. Namun, untuk memahami semua kode, pengalaman dengan PHP, JavaScript, dan HTML akan sangat membantu.
Tujuan
- Pahami dan deploy layanan Cloud Run.
- Memahami dan men-deploy aplikasi App Engine.
- Coba aplikasi.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, baca bagian Pembersihan.
Sebelum memulai
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore, Cloud Run, Pub/Sub, and Cloud Translation APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore, Cloud Run, Pub/Sub, and Cloud Translation APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Di konsol Google Cloud , buka aplikasi di Cloud Shell.
Cloud Shell menyediakan akses command line ke resource cloud langsung dari browser. Buka Cloud Shell di browser Anda dan klik Proceed untuk mendownload kode contoh dan beralih ke direktori aplikasi.
-
Di Cloud Shell, konfigurasi alat
gclouduntuk menggunakan project Google Cloud Anda:# Configure gcloud for your project gcloud config set project YOUR_PROJECT_ID
Memahami backend Cloud Run
Anda menentukan satu fungsi PHP translateString, dan mengonfigurasi layanan Cloud Run untuk merespons pesan Pub/Sub dengan memanggil fungsi ini.
Fungsi harus mengimpor beberapa dependensi untuk terhubung dengan Firestore dan Translation.
Cloud Run dimulai dengan menginisialisasi klien Firestore dan Pub/Sub. Kemudian, aplikasi mengurai data pesan Pub/Sub untuk mendapatkan teks yang akan diterjemahkan dan bahasa target yang diinginkan.
Translation API digunakan untuk menerjemahkan string ke dalam bahasa yang diinginkan.
Fungsi ini akan membuat nama unik untuk permintaan terjemahan guna memastikan kami tidak menyimpan terjemahan duplikat. Kemudian, menerjemahkan dalam transaksi Firestore untuk memastikan eksekusi serentak tidak secara tidak sengaja menjalankan terjemahan yang sama dua kali.
Membangun dan Men-deploy backend Cloud Run
Bangun aplikasi Cloud Run di direktori
backend:gcloud builds submit backend/ \ --tag gcr.io/PROJECT_ID/background-function
Deploy aplikasi Cloud Run menggunakan tag image dari langkah sebelumnya:
gcloud run deploy background-processing-function --platform managed \ --image gcr.io/PROJECT_ID/background-function --region REGION
Dengan
REGIONadalah Google Cloud region.Setelah deployment selesai, Anda akan melihat URL untuk aplikasi yang di-deploy di output perintah. Contoh:
Service [background-processing-function] revision [default-00002-vav] has been deployed and is serving 100 percent of traffic at https://default-c457u4v2ma-uc.a.run.app
Salin URL ini untuk langkah berikutnya.
Menyiapkan langganan Pub/Sub
Aplikasi Cloud Run Anda akan menerima pesan dari
Pub/Sub setiap kali pesan dipublikasikan ke topik translate.
Pemeriksaan autentikasi bawaan memastikan pesan Pub/Sub berisi token otorisasi yang valid dari akun layanan yang memiliki izin untuk memanggil backend Cloud Run Anda.
Langkah berikutnya akan memandu Anda menyiapkan topik, langganan, dan akun layanan Pub/Sub untuk melakukan panggilan yang diautentikasi ke backend Cloud Run Anda. Baca selengkapnya tentang integrasi ini di bagian Mengautentikasi service-to-service.
Buat topik
translateuntuk memublikasikan permintaan terjemahan baru:gcloud pubsub topics create translateAktifkan project Anda untuk membuat token autentikasi Pub/Sub:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Dengan
PROJECT_NUMBERsebagai nomor project Google Cloud Anda, yang dapat ditemukan dengan menjalankangcloud projects describe PROJECT_ID | grep projectNumber.Buat atau pilih akun layanan untuk merepresentasikan identitas langganan Pub/Sub.
gcloud iam service-accounts create cloud-run-pubsub-invoker \ --display-name "Cloud Run Pub/Sub Invoker"
Catatan: Anda dapat menggunakan
cloud-run-pubsub-invokeratau menggantinya dengan nama unik dalam project Google Cloud Anda.Berikan izin pada akun layanan invoker untuk memanggil layanan
background-processing-functionAnda:gcloud run services add-iam-policy-binding background-processing-function \ --member=serviceAccount:cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker --platform managed --region REGION
Mungkin diperlukan waktu beberapa menit agar perubahan Pengelolaan Identitas dan Akses diterapkan. Sementara itu, Anda mungkin melihat error
HTTP 403dalam log layanan.Buat langganan Pub/Sub dengan akun layanan:
gcloud pubsub subscriptions create run-translate-string --topic translate \ --push-endpoint=CLOUD_RUN_URL \ --push-auth-service-account=cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
Dengan
CLOUD_RUN_URLadalah URL HTTPS yang Anda salin setelah membangun dan men-deploy backend.Flag
--push-account-service-accountmengaktifkan fungsi push Pub/Sub untuk Autentikasi dan otorisasi.Domain layanan Cloud Run Anda secara otomatis didaftarkan untuk digunakan dengan langganan Pub/Sub.
Memahami aplikasi
Ada dua komponen utama untuk aplikasi web:
-
Server HTTP PHP untuk menangani permintaan web. Server memiliki dua
endpoint berikut:
-
/: Mencantumkan semua terjemahan yang ada dan menampilkan formulir yang dapat dikirim pengguna untuk meminta terjemahan baru. -
/request-translation: Pengiriman formulir dikirim ke endpoint ini, yang memublikasikan permintaan ke Pub/Sub untuk diterjemahkan secara asinkron.
-
- Template HTML yang diisi dengan terjemahan yang ada oleh server PHP.
Server HTTP
Di direktori
app,index.phpdimulai dengan menyiapkan aplikasi Lumen dan mendaftarkan pengendali HTTP:Handler indeks (
/) mendapatkan semua terjemahan yang ada dari Firestore dan merender template dengan daftar:Handler terjemahan permintaan, yang terdaftar di
/request-translation, mengurai pengiriman formulir HTML, memvalidasi permintaan, dan memublikasikan pesan ke Pub/Sub:
Template HTML
Template HTML adalah dasar untuk halaman HTML yang ditampilkan kepada pengguna sehingga mereka dapat melihat terjemahan sebelumnya dan meminta terjemahan baru. Template diisi oleh server HTTP dengan daftar terjemahan yang ada.
-
Elemen
<head>dari template HTML mencakup metadata, lembar gaya, dan JavaScript untuk halaman:Halaman menarik aset CSS dan JavaScript Material Design Lite (MDL). MDL memungkinkan Anda menambahkan tampilan dan nuansa Desain Material ke situs Anda.
Halaman ini menggunakan JQuery untuk menunggu hingga dokumen selesai dimuat dan menetapkan pengendali pengiriman formulir. Setiap kali formulir terjemahan permintaan dikirimkan, halaman akan melakukan validasi formulir minimal untuk memeriksa apakah nilai tidak kosong, lalu mengirimkan permintaan asinkron ke endpoint
/request-translation.Terakhir, snackbar MDL akan muncul untuk menunjukkan apakah permintaan berhasil atau mengalami error.
- Isi HTML halaman menggunakan Tata letak MDL dan beberapa komponen MDL untuk menampilkan daftar terjemahan dan formulir untuk meminta terjemahan tambahan:
Menjalankan aplikasi di Cloud Shell
Sebelum mencoba men-deploy aplikasi web, instal dependensi dan jalankan secara lokal.
Pertama, instal dependensi dengan Composer. Ekstensi gRPC untuk PHP diperlukan, dan sudah diinstal sebelumnya di Cloud Shell.
composer install -d appSelanjutnya, jalankan server web bawaan PHP untuk menayangkan aplikasi Anda:
APP_DEBUG=true php -S localhost:8080 -t appFlag
APP_DEBUG=trueakan menampilkan pengecualian yang terjadi.Di Cloud Shell, klik Pratinjau web , lalu pilih Pratinjau di port 8080. Tindakan ini akan membuka jendela baru dengan aplikasi yang sedang berjalan.
Men-deploy aplikasi web
Anda dapat menggunakan lingkungan standar App Engine untuk membangun dan men-deploy aplikasi yang berjalan secara andal dalam beban berat dan dengan data dalam jumlah besar.
Tutorial ini menggunakan lingkungan standar App Engine untuk men-deploy frontend HTTP.
app.yaml mengonfigurasi aplikasi App Engine:
-
Dari direktori yang sama dengan file
app.yaml, deploy aplikasi Anda ke lingkungan standar App Engine:gcloud app deploy
Menguji aplikasi
Setelah men-deploy fungsi Cloud Run dan aplikasi App Engine, coba minta terjemahan.
-
Untuk melihat aplikasi di browser,masukkan URL berikut:
https://PROJECT_ID.REGION_ID.r.appspot.comGanti kode berikut:
PROJECT_ID: Project ID Google Cloud AndaREGION_ID: A kode yang ditetapkan App Engine ke aplikasi Anda
Ada halaman dengan daftar terjemahan kosong dan formulir untuk meminta terjemahan baru.
-
Di kolom Teks yang akan diterjemahkan, masukkan beberapa teks yang akan diterjemahkan, misalnya,
Hello, World. - Pilih bahasa dari daftar drop-down yang ingin Anda gunakan untuk menerjemahkan teks.
- Klik Kirim.
- Untuk memuat ulang halaman, klik Muat ulang refresh. Ada baris baru dalam daftar terjemahan. Jika Anda tidak melihat terjemahan, tunggu beberapa detik lagi, lalu coba lagi. Jika Anda masih tidak melihat terjemahan, lihat bagian berikutnya tentang men-debug aplikasi.
Men-debug aplikasi
Jika Anda tidak dapat terhubung ke aplikasi App Engine atau tidak melihat terjemahan baru, periksa hal-hal berikut:
- Periksa apakah perintah deployment
gcloudberhasil diselesaikan dan tidak menghasilkan error. Jika ada error (misalnya,message=Build failed), perbaiki, lalu coba buat dan deploy aplikasi Cloud Run dan deploy aplikasi App Engine lagi. Di Konsol Google Cloud , buka halaman Logs Explorer.
- Di menu drop-down Recently selected resources, klik GAE Application, lalu klik All module_id. Anda akan melihat daftar permintaan sejak Anda mengunjungi aplikasi. Jika Anda tidak melihat daftar permintaan, pastikan Anda memilih Semua module_id dari daftar drop-down. Jika Anda melihat pesan error yang dicetak ke konsol Google Cloud , periksa apakah kode aplikasi Anda cocok dengan kode di bagian tentang memahami aplikasi web.
- Di daftar drop-down Recently selected resources, klik Cloud Run Revision, lalu klik All logs. Anda akan melihat permintaan POST dikirim ke URL aplikasi yang di-deploy. Jika tidak, periksa apakah aplikasi Cloud Run dan App Engine menggunakan topik Pub/Sub yang sama, dan apakah ada langganan Pub/Sub untuk mengirim ke endpoint Cloud Run Anda.
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus Google Cloud project
- Di Konsol Google Cloud , buka halaman Manage resources.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Menghapus resource tutorial
Hapus aplikasi App Engine yang Anda buat dalam tutorial ini:
- Di konsol Google Cloud , buka halaman Versions untuk App Engine.
- Pilih kotak centang untuk versi aplikasi non-default yang ingin Anda hapus.
- Untuk menghapus versi aplikasi, klik Hapus.
Hapus layanan Cloud Run yang Anda deploy dalam tutorial ini:
gcloud run services delete background-processing-function
Anda juga dapat menghapus layanan Cloud Run dari konsolGoogle Cloud .
Hapus resource Google Cloud lain yang dibuat dalam tutorial ini:
- Menghapus topik Pub/Sub
translate - Menghapus langganan Pub/Sub
run-translate-string - Menghapus image container bernama
gcr.io/PROJECT_ID/background-processingdari Container Registry. - Menghapus akun layanan invoker
cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
- Menghapus topik Pub/Sub