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.
- Fungsi Cloud Run yang berlangganan topik Pub/Sub tersebut akan dipicu.
- Fungsi Cloud Run menggunakan Cloud Translation untuk menerjemahkan teks.
- Fungsi 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 fungsi Pub/Sub, Firestore, App Engine, atau Cloud Run. Namun, untuk memahami semua kode, pengalaman dengan Go, JavaScript, dan HTML akan sangat membantu.
Tujuan
- Memahami dan men-deploy fungsi 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, lihat Pembersihan.
Sebelum memulai
- 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.
-
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Firestore, Cloud Run functions, 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.enable
permission. 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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Firestore, Cloud Run functions, 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.enable
permission. 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
gcloud
untuk menggunakan project Google Cloud Anda:# Configure gcloud for your project gcloud config set project YOUR_PROJECT_ID
Memahami fungsi Cloud Run
- Fungsi ini dimulai dengan mengimpor beberapa dependensi, seperti Firestore dan Translation. Library ini juga memiliki beberapa variabel dan jenis global.
- Klien Firestore dan Translation global diinisialisasi sehingga dapat digunakan kembali di antara pemanggilan fungsi. Dengan begitu, Anda tidak perlu menginisialisasi klien baru untuk setiap pemanggilan fungsi, yang akan memperlambat eksekusi.
- Translation API menerjemahkan string ke bahasa yang Anda pilih.
-
Fungsi Cloud Run dimulai dengan menginisialisasi klien Firestore dan Pub/Sub. Kemudian, aplikasi akan mem-parsing pesan Pub/Sub untuk mendapatkan teks yang akan diterjemahkan dan bahasa target yang diinginkan.
Kemudian, aplikasi akan menampilkan nama unik untuk permintaan terjemahan guna memastikan aplikasi tidak menyimpan terjemahan duplikat. Kemudian, menerjemahkan dalam transaksi Firestore untuk memastikan eksekusi serentak tidak secara tidak sengaja menjalankan terjemahan yang sama dua kali.
Men-deploy fungsi Cloud Run
Di Cloud Shell, di direktori yang sama dengan file
translate.go
, deploy fungsi Cloud Run dengan pemicu Pub/Sub:gcloud functions deploy Translate --runtime go111 \ --trigger-topic=translate --set-env-vars GOOGLE_CLOUD_PROJECT=YOUR_GOOGLE_CLOUD_PROJECT
dengan
YOUR_GOOGLE_CLOUD_PROJECT
adalah Google Cloud project ID Anda.
Memahami aplikasi
Ada dua komponen utama untuk aplikasi web:
-
Server HTTP Go 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 Go.
Server HTTP
Di direktori
index
,main.go
dimulai dengan menyiapkan aplikasi dan mendaftarkan pengendali HTTP:Handler indeks (
/
) mendapatkan semua terjemahan yang ada dari Firestore dan mengisi template HTML dengan daftar:Terjemahan baru diminta dengan mengirimkan formulir HTML. Handler terjemahan permintaan, yang terdaftar di
/request-translation
, mengurai pengiriman formulir, 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>
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:
Membangun aplikasi
-
Sebelum mencoba men-deploy aplikasi web, bangun aplikasi untuk memastikan aplikasi dikompilasi
dan semua dependensi Anda berfungsi.
go build -o start ./index
Build berhasil jika tidak ada yang dicetak dan file
start
dibuat.
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.com
Ganti kode berikut:
PROJECT_ID
: Google Cloud Project ID 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
gcloud
berhasil diselesaikan dan tidak menghasilkan error. Jika ada error, perbaiki, lalu coba men-deploy fungsi Cloud Run dan aplikasi App Engine lagi. -
Di konsol Google Cloud , buka halaman Logs Viewer.
Buka halaman Logs Viewer- Di menu drop-down Recently selected resources, klik GAE Application, lalu klik All module_id. Anda akan melihat daftar permintaan dari saat 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 Google Cloud konsol, periksa apakah kode aplikasi Anda cocok dengan kode di bagian tentang memahami aplikasi.
-
Di menu drop-down Recently selected resources, klik
Cloud Function, lalu klik All function name. Anda akan melihat
fungsi yang tercantum untuk setiap terjemahan yang diminta. Jika tidak, periksa apakah
fungsi Cloud Run dan aplikasi App Engine menggunakan
topik Pub/Sub yang sama:
- Di file
background/index/main.go
, periksa apakah konstantatopicName
adalah"translate"
. - Saat Anda
men-deploy fungsi Cloud Run,
pastikan untuk menyertakan flag
--trigger-topic=translate
.
- Di file
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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Menghapus instance App Engine
- In the Google Cloud console, go to the Versions page for App Engine.
- Select the checkbox for the non-default app version that you want to delete.
- Untuk menghapus versi aplikasi, klik Hapus.
Menghapus fungsi Cloud Run
-
Hapus fungsi Cloud Run yang Anda buat dalam tutorial ini:
gcloud functions delete Translate
Langkah berikutnya
- Coba tutorial Cloud Run Functions lainnya.
- Pelajari App Engine lebih lanjut.
- Coba Cloud Run, yang memungkinkan Anda menjalankan container stateless di lingkungan yang terkelola sepenuhnya atau di cluster Google Kubernetes Engine milik Anda.