Tutorial ini menunjukkan cara membuat alur kerja terjemahan yang menunggu input Anda—manusia dalam loop—dan yang menghubungkan database Firestore, dua fungsi Cloud Run, Cloud Translation API, dan halaman web yang menggunakan Firebase SDK untuk memperbarui secara real time.
Dengan Workflows, Anda dapat mendukung endpoint callback (atau webhook) yang menunggu permintaan HTTP tiba di endpoint tersebut, melanjutkan eksekusi alur kerja di kemudian hari. Dalam hal ini, alur kerja menunggu input Anda untuk menolak atau memvalidasi terjemahan beberapa teks, tetapi alur kerja juga dapat menunggu proses eksternal. Untuk mengetahui informasi selengkapnya, lihat Menunggu menggunakan callback.
Arsitektur
Tutorial ini membuat aplikasi web yang memungkinkan Anda melakukan hal berikut:
- Di halaman web terjemahan, masukkan teks yang ingin diterjemahkan dari bahasa Inggris ke bahasa Prancis. Klik Translate.
- Dari halaman web, fungsi Cloud Run dipanggil yang meluncurkan eksekusi alur kerja. Teks yang akan diterjemahkan diteruskan sebagai parameter ke fungsi dan alur kerja.
- Teks disimpan di database Cloud Firestore. Cloud Translation API dipanggil. Terjemahan yang ditampilkan disimpan dalam database. Aplikasi web di-deploy menggunakan Firebase Hosting dan diperbarui secara real time untuk menampilkan teks yang diterjemahkan.
- Langkah
create_callbackdalam alur kerja membuat URL endpoint callback yang juga disimpan di database Firestore. Halaman web kini menampilkan tombol Validasi dan Tolak. - Alur kerja kini dijeda dan menunggu permintaan HTTP POST eksplisit ke URL endpoint callback.
- Anda dapat memutuskan apakah akan memvalidasi atau menolak terjemahan. Mengklik tombol
akan memanggil fungsi Cloud Run kedua yang pada gilirannya memanggil
endpoint callback yang dibuat oleh alur kerja, dengan meneruskan status persetujuan.
Alur kerja melanjutkan eksekusinya dan menyimpan status persetujuan
trueataufalsedi database Firestore.
Diagram ini memberikan ringkasan prosesnya:
Tujuan
- Deploy aplikasi web.
- Buat database Firestore untuk menyimpan permintaan terjemahan.
- Deploy fungsi Cloud Run untuk menjalankan alur kerja.
- Deploy dan jalankan alur kerja untuk mengorkestrasi seluruh proses.
Biaya
Di dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.
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 yang terbatas Google Cloud .
- 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.
-
Install the Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Create or select 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.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith 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_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the App Engine, Cloud Build, Cloud Run functions, Firestore, Translation, and Workflows 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.gcloud services enable appengine.googleapis.com
cloudbuild.googleapis.com cloudfunctions.googleapis.com firestore.googleapis.com translate.googleapis.com workflows.googleapis.com -
Install the Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Create or select 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.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith 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_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the App Engine, Cloud Build, Cloud Run functions, Firestore, Translation, and Workflows 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.gcloud services enable appengine.googleapis.com
cloudbuild.googleapis.com cloudfunctions.googleapis.com firestore.googleapis.com translate.googleapis.com workflows.googleapis.com - Update komponen Google Cloud CLI:
gcloud components update
- Login menggunakan akun Anda:
gcloud auth login
- Tetapkan project ID dan lokasi default yang digunakan dalam tutorial ini:
export GOOGLE_CLOUD_PROJECT=PROJECT_ID export REGION=REGION gcloud config set workflows/location ${REGION}
Ganti kode berikut:
Buat direktori bernama
callback-translationdengan subdirektori bernamainvokeTranslationWorkflow,translationCallbackCall, danpublic:mkdir -p ~/callback-translation/{invokeTranslationWorkflow,translationCallbackCall,public}
Ubah ke direktori
invokeTranslationWorkflow:cd ~/callback-translation/invokeTranslationWorkflow
Buat file teks dengan nama file
index.jsyang berisi kode Node.js berikut:Buat file teks dengan nama file
package.jsonyang berisi metadatanpmberikut:Deploy fungsi dengan pemicu HTTP dan izinkan akses yang tidak diautentikasi:
gcloud functions deploy invokeTranslationWorkflow \ --region=${REGION} \ --runtime nodejs14 \ --entry-point=invokeTranslationWorkflow \ --set-env-vars PROJECT_ID=${GOOGLE_CLOUD_PROJECT},CLOUD_REGION=${REGION},WORKFLOW_NAME=translation_validation \ --trigger-http \ --allow-unauthenticated
Fungsi mungkin memerlukan waktu beberapa menit untuk di-deploy. Atau, Anda dapat menggunakan antarmuka fungsi Cloud Run di konsol Google Cloud untuk men-deploy fungsi tersebut.
Setelah fungsi di-deploy, Anda dapat mengonfirmasi properti
httpsTrigger.url:gcloud functions describe invokeTranslationWorkflow
Catat URL yang ditampilkan agar Anda dapat menggunakannya pada langkah berikutnya.
Ubah ke direktori
translationCallbackCall:cd ../translationCallbackCall
Buat file teks dengan nama file
index.jsyang berisi kode Node.js berikut:Buat file teks dengan nama file
package.jsonyang berisi metadatanpmberikut:Deploy fungsi dengan pemicu HTTP dan izinkan akses yang tidak diautentikasi:
gcloud functions deploy translationCallbackCall \ --region=${REGION} \ --runtime nodejs14 \ --entry-point=translationCallbackCall \ --trigger-http \ --allow-unauthenticated
Fungsi mungkin memerlukan waktu beberapa menit untuk di-deploy. Atau, Anda dapat menggunakan antarmuka fungsi Cloud Run di konsol Google Cloud untuk men-deploy fungsi tersebut.
Setelah fungsi di-deploy, Anda dapat mengonfirmasi properti
httpsTrigger.url:gcloud functions describe translationCallbackCall
Catat URL yang ditampilkan agar Anda dapat menggunakannya pada langkah berikutnya.
Ubah ke direktori
callback-translation:cd ..
Buat file teks dengan nama file
translation-validation.yamldan dengan konten berikut:Setelah membuat alur kerja, Anda dapat men-deploy-nya, tetapi jangan jalankan alur kerja:
gcloud workflows deploy translation_validation --source=translation-validation.yaml
Ubah ke direktori
public:cd public
Buat file teks dengan nama file
index.htmlyang berisi markup HTML berikut. (Pada langkah selanjutnya, Anda akan mengubah fileindex.htmldan menambahkan skrip Firebase SDK.)Buat file teks dengan nama file
script.jsyang berisi kode JavaScript berikut:Edit file
script.js, ganti placeholderUPDATE_MEdengan URL fungsi Cloud Run yang Anda catat sebelumnya.Dalam metode
translateBtn.addEventListener, ganticonst fnUrl = UPDATE_ME;dengan:
const fnUrl = "https://REGION-PROJECT_ID.cloudfunctions.net/invokeTranslationWorkflow";
Di fungsi
callCallbackUrl, ganticonst fnUrl = UPDATE_ME;dengan:
const fnUrl = "https://REGION-PROJECT_ID.cloudfunctions.net/translationCallbackCall";
Buat file teks dengan nama file
style.cssyang berisi gaya bertingkat berikut:-
Di Firebase console, klik Buat project, lalu pilih project Google Cloud yang sudah ada dari menu drop-down untuk menambahkan resource Firebase ke project tersebut.
-
Klik Lanjutkan hingga Anda melihat opsi untuk menambahkan Firebase.
-
Lewati penyiapan Google Analytics untuk project Anda.
-
Klik Add Firebase.
Di bagian tengah halaman ringkasan project, klik ikon Web (</>) untuk meluncurkan alur kerja penyiapan.
Masukkan nama panggilan untuk aplikasi Anda.
Bagian ini hanya dapat dilihat oleh Anda di Firebase console.
Lewati penyiapan Firebase Hosting untuk saat ini.
Klik Register app dan lanjutkan ke konsol.
Di bagian Build Firebase console, klik Firestore Database.
(Anda mungkin harus meluaskan panel navigasi kiri terlebih dahulu untuk melihat bagian Build.)
Di panel Cloud Firestore, klik Buat database.
Pilih Mulai dalam mode uji, menggunakan aturan keamanan seperti berikut:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write; } } }
Klik Berikutnya setelah membaca pernyataan penyangkalan tentang aturan keamanan.
Tetapkan lokasi tempat data Cloud Firestore Anda disimpan. Anda dapat menerima setelan default atau memilih region yang dekat dengan Anda.
Klik Enable untuk menyediakan Firestore.
- Untuk menginisialisasi Firebase di aplikasi, Anda perlu memberikan konfigurasi project Firebase untuk aplikasi Anda.
- Di Firebase console, buka Project settings .
- Di panel Aplikasi Anda, pilih aplikasi Anda.
- Di panel Penyiapan dan konfigurasi SDK, untuk memuat library Firebase SDK dari CDN, pilih CDN.
- Salin cuplikan ke file
index.htmldi bagian bawah tag<body>, dengan mengganti nilai placeholderXXXX.
Instal Firebase JavaScript SDK.
Jika Anda belum memiliki file
package.json, buat dengan menjalankan perintah berikut dari direktoricallback-translation:npm initInstal paket npm
firebasedan simpan ke filepackage.jsonAnda dengan menjalankan:npm install firebase
Dari direktori
callback-translation, jalankan perintah berikut:firebase initPilih opsi
Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys.Pilih untuk menggunakan project yang ada dan masukkan project ID Anda.
Terima
publicsebagai direktori root publik default.Pilih untuk mengonfigurasi aplikasi halaman tunggal.
Lewati penyiapan build dan deployment otomatis dengan GitHub.
Pada perintah
File public/index.html already exists. Overwrite?, ketik Tidak.Ubah ke direktori
public:cd public
Dari direktori
public, jalankan perintah berikut untuk men-deploy project Anda ke situs Anda:firebase deploy --only hosting
Dari direktori
public, jalankan perintah berikut:firebase serveBuka aplikasi web di URL lokal yang ditampilkan (biasanya
http://localhost:5000).Masukkan beberapa teks dalam bahasa Inggris, lalu klik Terjemahkan.
Terjemahan teks dalam bahasa Prancis akan ditampilkan.
Sekarang Anda dapat mengklik Validasi atau Tolak.
Di database Firestore, Anda dapat memverifikasi isinya. Aplikasi tersebut akan terlihat seperti berikut:
approved: true callback: "https://workflowexecutions.googleapis.com/v1/projects/26811016474/locations/us-central1/workflows/translation_validation/executions/68bfce75-5f62-445f-9cd5-eda23e6fa693/callbacks/72851c97-6bb2-45e3-9816-1e3dcc610662_1a16697f-6d90-478d-9736-33190bbe222b" text: "The quick brown fox jumps over the lazy dog." translation: "Le renard brun rapide saute par-dessus le chien paresseux."Status
approvedadalahtrueataufalse, bergantung pada apakah Anda memvalidasi atau menolak terjemahan.- 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.
Hapus konfigurasi default gcloud CLI yang Anda tambahkan selama penyiapan tutorial:
gcloud config unset workflows/location
Menghapus alur kerja yang dibuat dalam tutorial ini:
gcloud workflows delete WORKFLOW_NAME
Hapus fungsi Cloud Run yang Anda buat dalam tutorial ini:
gcloud functions delete FUNCTION_NAME
Anda juga dapat menghapus fungsi Cloud Run dari Google Cloud konsol.
Men-deploy fungsi Cloud Run pertama
Fungsi Cloud Run ini meluncurkan eksekusi alur kerja. Teks yang akan diterjemahkan diteruskan sebagai parameter ke fungsi dan alur kerja.
Men-deploy fungsi Cloud Run kedua
Fungsi Cloud Run ini membuat permintaan POST HTTP ke endpoint callback yang dibuat oleh alur kerja, dengan meneruskan status persetujuan yang mencerminkan apakah terjemahan divalidasi atau ditolak.
Men-deploy alur kerja
Alur kerja terdiri dari serangkaian langkah yang dijelaskan menggunakan sintaksis Workflows, yang dapat ditulis dalam format YAML atau JSON. Ini adalah definisi alur kerja. Setelah membuat alur kerja, Anda men-deploy alur kerja tersebut agar tersedia untuk dieksekusi.
Membuat aplikasi web
Buat aplikasi web yang memanggil Cloud Function yang meluncurkan eksekusi alur kerja. Halaman web diperbarui secara real time untuk menampilkan hasil permintaan terjemahan.
Tambahkan Firebase ke aplikasi web Anda
Dalam tutorial ini, halaman HTML, skrip JavaScript, dan lembar gaya CSS di-deploy sebagai aset statis menggunakan Firebase Hosting, tetapi dapat dihosting di mana saja dan ditayangkan secara lokal di komputer Anda sendiri untuk tujuan pengujian.
Membuat project Firebase
Agar dapat menambahkan Firebase ke aplikasi, Anda perlu membuat project Firebase untuk terhubung ke aplikasi.
Firebase otomatis menyediakan resource untuk project Firebase Anda. Setelah proses selesai, Anda akan diarahkan ke halaman ringkasan project Anda di Firebase console.
Mendaftarkan aplikasi ke Firebase
Setelah memiliki project Firebase, Anda dapat menambahkan aplikasi web ke project tersebut.
Aktifkan Cloud Firestore
Aplikasi web menggunakan Cloud Firestore untuk menerima dan menyimpan data. Anda harus mengaktifkan Cloud Firestore.
Tambahkan Firebase SDK dan lakukan inisialisasi Firebase
Firebase menyediakan library JavaScript untuk sebagian besar produk Firebase. Sebelum menggunakan Firebase Hosting, Anda harus menambahkan Firebase SDK ke aplikasi Web Anda.
Melakukan inisialisasi dan men-deploy project Anda
Untuk menghubungkan file project lokal ke project Firebase, Anda harus menginisialisasi project. Kemudian, Anda dapat men-deploy aplikasi web.
Menguji aplikasi web secara lokal
Dengan Firebase Hosting, Anda dapat melihat dan menguji perubahan secara lokal
serta berinteraksi dengan resource project backend yang diemulasikan. Saat menggunakan firebase serve,
aplikasi Anda berinteraksi dengan backend yang diemulasi untuk konten dan konfigurasi hosting
tetapi backend sebenarnya untuk semua resource project lainnya. Untuk tutorial ini, Anda
dapat menggunakan firebase serve, tetapi tidak direkomendasikan saat melakukan pengujian
yang lebih ekstensif.
Selamat! Anda telah membuat alur kerja terjemahan yang memerlukan interaksi manusia yang menggunakan callback Workflows.
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.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Untuk menghapus project: