1. Ringkasan
Di lab sebelumnya, Anda telah membangun versi aplikasi Pic-a-daily berbasis peristiwa yang menggunakan Google Cloud Storage yang memicu Cloud Function untuk layanan Analisis Gambar, GCS memicu container Cloud Run melalui Pub/Sub untuk layanan Thumbnail, dan Eventarc untuk memicu layanan Image Garbage Collector di Cloud Run. Ada juga layanan Kolase yang dipicu Cloud Scheduler:
Di lab ini, Anda akan membuat versi aplikasi yang diorkestrasi. Anda akan menggunakan Workflows untuk melakukan orkestrasi dan memanggil layanan sebagai berikut, bukan berbagai jenis peristiwa yang mengalir melalui sistem:
Yang akan Anda pelajari
- App Engine
- Cloud Firestore
- Cloud Functions
- Cloud Run
- Workflows
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
- Login ke Cloud Console lalu buat project baru atau gunakan kembali project yang sudah ada. (Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.)
Ingat project ID, nama unik di semua project Google Cloud (maaf, nama di atas telah digunakan dan tidak akan berfungsi untuk Anda!) Project ID tersebut selanjutnya akan dirujuk di codelab ini sebagai PROJECT_ID
.
- Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan resource Google Cloud.
Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Pastikan untuk mengikuti petunjuk yang ada di bagian "Membersihkan" yang memberi tahu Anda cara menonaktifkan resource sehingga tidak menimbulkan penagihan di luar tutorial ini. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai$300 USD.
Mulai Cloud Shell
Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.
Dari GCP Console, klik ikon Cloud Shell di toolbar kanan atas:
Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:
Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda di lab ini dapat dilakukan hanya dengan browser.
3. Pengantar Alur Kerja
Anda dapat menggunakan Workflows untuk membuat alur kerja serverless yang menautkan serangkaian tugas serverless secara bersamaan sesuai urutan yang Anda tetapkan. Anda dapat menggabungkan kecanggihan API Google Cloud, produk serverless seperti Cloud Functions dan Cloud Run, serta panggilan ke API eksternal untuk membuat aplikasi serverless yang fleksibel.
Seperti yang mungkin diharapkan dari orkestrator, Workflows memungkinkan Anda menentukan alur logika bisnis dalam bahasa definisi alur kerja berbasis YAML/JSON dan menyediakan Workflows Execution API dan UI Workflows untuk memicu alur tersebut.
Platform ini lebih dari sekadar orkestrasi dengan fitur bawaan yang dapat dikonfigurasi berikut:
- Penanganan error dan percobaan ulang fleksibel di antara langkah-langkah untuk eksekusi langkah yang andal.
- Penguraian JSON dan variabel yang melewati langkah-langkah untuk menghindari glue-code.
- Formula ekspresi untuk keputusan memungkinkan eksekusi langkah bersyarat.
- Sub-alur kerja untuk Workflows modular dan dapat digunakan kembali.
- Dukungan untuk layanan eksternal memungkinkan orkestrasi layanan di luar Google Cloud.
- Dukungan autentikasi untuk Google Cloud dan layanan eksternal untuk eksekusi langkah yang aman.
- Konektor ke layanan Google Cloud seperti Pub/Sub, Firestore, Tasks, Secret Manager untuk integrasi yang lebih mudah.
Selain itu, Workflows adalah produk serverless yang terkelola sepenuhnya. Tidak ada server untuk dikonfigurasi atau diskalakan dan Anda hanya membayar sesuai penggunaan.
4. Mengaktifkan API
Di lab ini, Anda akan menghubungkan layanan Cloud Functions dan Cloud Run dengan Workflows. Anda juga akan menggunakan App Engine, Cloud Build, Vision API, dan layanan lainnya.
Di Cloud Shell, pastikan semua layanan yang diperlukan telah diaktifkan:
gcloud services enable \ appengine.googleapis.com \ cloudbuild.googleapis.com \ cloudfunctions.googleapis.com \ compute.googleapis.com \ firestore.googleapis.com \ run.googleapis.com \ vision.googleapis.com \ workflows.googleapis.com \
Setelah beberapa waktu, Anda akan melihat operasi berhasil diselesaikan:
Operation "operations/acf.5c5ef4f6-f734-455d-b2f0-ee70b5a17322" finished successfully.
5. Mendapatkan kode
Dapatkan kodenya, jika Anda belum melakukannya di lab kode sebelumnya:
git clone https://github.com/GoogleCloudPlatform/serverless-photosharing-workshop
Anda akan memiliki struktur folder berikut yang relevan untuk lab ini:
frontend | workflows | ├── functions ├── |── trigger-workflow ├── |── vision-data-transform ├── services ├── |── collage ├── |── thumbnails ├── workflows.yaml
Berikut adalah folder yang relevan:
frontend
berisi frontend App Engine yang akan kita gunakan kembali dari Lab 4.functions
berisi Cloud Functions yang dibuat untuk Alur Kerja.services
berisi layanan Cloud Run yang dimodifikasi untuk Workflow.workflows.yaml
adalah file definisi Alur kerja.
6. Mempelajari YAML Workflows
File workflows.yaml menentukan Workflow dalam serangkaian langkah. Mari kita bahas untuk memahaminya dengan lebih baik.
Di awal alur kerja, ada beberapa parameter yang diteruskan. Fungsi tersebut akan diteruskan oleh dua Cloud Functions yang memicu Workflows. Kita akan membahas fungsi ini nanti, tetapi beginilah cara Workflows dimulai:
Di YAML, Anda dapat melihat bahwa parameter ini ditetapkan ke variabel dalam langkah init
, seperti nama file dan bucket yang memicu peristiwa, serta URL beberapa layanan Cloud Functions dan Cloud Run yang akan dipanggil oleh Workflows:
main: params: [args] steps: - init: assign: - file: ${args.file} - bucket: ${args.bucket} - gsUri: ${"gs://" + bucket + "/" + file} - projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")} - urls: ${args.urls}
Selanjutnya, Workflows akan memeriksa jenis peristiwa. Ada 2 jenis peristiwa yang didukung: object.finalize
(dimunculkan saat file disimpan di bucket Cloud Storage) dan object.delete
(ditampilkan saat file dihapus). Tindakan lainnya akan melaporkan pengecualian peristiwa yang tidak didukung.
Berikut langkahnya, dalam definisi alur kerja YAML, di mana kita memeriksa jenis peristiwa penyimpanan file:
- eventTypeSwitch: switch: - condition: ${args.eventType == "google.storage.object.finalize"} next: imageAnalysisCall - condition: ${args.eventType == "google.storage.object.delete"} next: pictureGarbageCollectionGCS - eventTypeNotSupported: raise: ${"eventType " + args.eventType + " is not supported"} next: end
Perhatikan bagaimana Workflows mendukung pernyataan switch dan penanganan pengecualian, dengan instruksi switch dan berbagai kondisinya, serta instruksi kenaikan untuk memunculkan error saat peristiwa tidak dikenali.
Selanjutnya, mari kita lihat imageAnalysisCall
. Fungsi ini adalah serangkaian panggilan dari Workflows untuk memanggil Vision API guna menganalisis gambar, mengubah data respons Vision API untuk mengurutkan label hal yang dikenali dalam gambar, memilih warna dominan, memeriksa apakah gambar aman ditampilkan, lalu menyimpan metadata ke Cloud Firestore.
Perlu diperhatikan bahwa semuanya dilakukan di Workflows kecuali di Vision Transform Cloud Functions (yang akan kita deploy nanti):
Seperti inilah tampilan langkah-langkahnya dalam YAML:
- imageAnalysisCall: call: http.post args: url: https://vision.googleapis.com/v1/images:annotate headers: Content-Type: application/json auth: type: OAuth2 body: requests: - image: source: gcsImageUri: ${gsUri} features: - type: LABEL_DETECTION - type: SAFE_SEARCH_DETECTION - type: IMAGE_PROPERTIES result: imageAnalysisResponse - transformImageAnalysisData: call: http.post args: url: ${urls.VISION_DATA_TRANSFORM_URL} auth: type: OIDC body: ${imageAnalysisResponse.body} result: imageMetadata - checkSafety: switch: - condition: ${imageMetadata.body.safe == true} next: storeMetadata next: end - storeMetadata: call: http.request args: url: ${"https://firestore.googleapis.com/v1/projects/" + projectId + "/databases/(default)/documents/pictures/" + file + "?updateMask.fieldPaths=color&updateMask.fieldPaths=labels&updateMask.fieldPaths=created"} auth: type: OAuth2 method: PATCH body: name: ${"projects/" + projectId + "/databases/(default)/documents/pictures/" + file} fields: color: stringValue: ${imageMetadata.body.color} created: timestampValue: ${imageMetadata.body.created} labels: arrayValue: values: ${imageMetadata.body.labels} result: storeMetadataResponse
Setelah gambar dianalisis, dua langkah berikutnya adalah membuat thumbnail gambar dan kolase gambar terbaru. Hal ini dilakukan dengan men-deploy 2 layanan Cloud Run dan melakukan panggilan ke layanan tersebut dari langkah thumbnailCall
dan collageCall
:
Langkah-langkah dalam YAML:
- thumbnailCall: call: http.post args: url: ${urls.THUMBNAILS_URL} auth: type: OIDC body: gcsImageUri: ${gsUri} result: thumbnailResponse - collageCall: call: http.get args: url: ${urls.COLLAGE_URL} auth: type: OIDC result: collageResponse
Cabang eksekusi ini berakhir dengan menampilkan kode status dari setiap layanan di langkah finalizeCompleted
:
- finalizeCompleted: return: imageAnalysis: ${imageAnalysisResponse.code} storeMetadata: ${storeMetadataResponse.code} thumbnail: ${thumbnailResponse.code} collage: ${collageResponse.code}
Cabang lain dari eksekusi ini adalah ketika file dihapus dari bucket penyimpanan utama, yang berisi gambar versi resolusi tinggi. Di cabang ini, kita ingin menghapus thumbnail gambar, dalam bucket yang berisi thumbnail, dan menghapus metadatanya dari Firestore. Keduanya dilakukan dengan panggilan HTTP dari Workflows:
Langkah-langkah dalam YAML:
- pictureGarbageCollectionGCS: try: call: http.request args: url: ${"https://storage.googleapis.com/storage/v1/b/thumbnails-" + projectId + "/o/" + file} auth: type: OAuth2 method: DELETE result: gcsDeletionResult except: as: e steps: - dummyResultInOutVar: assign: - gcsDeletionResult: code: 200 body: "Workaround for empty body response" - pictureGarbageCollectionFirestore: call: http.request args: url: ${"https://firestore.googleapis.com/v1/projects/" + projectId + "/databases/(default)/documents/pictures/" + file} auth: type: OAuth2 method: DELETE result: firestoreDeletionResult
Cabang penghapusan berakhir dengan menampilkan hasil / kode dari setiap langkah:
- deleteCompleted: return: gcsDeletion: ${gcsDeletionResult} firestoreDeletion: ${firestoreDeletionResult.code}
Pada langkah-langkah berikut, kita akan membuat semua dependensi eksternal Workflows: bucket, Cloud Functions, layanan Cloud Run, dan database Firestore.
7. Membuat bucket
Anda memerlukan 2 bucket untuk gambar: 1 untuk menyimpan gambar asli beresolusi tinggi dan 1 untuk menyimpan thumbnail gambar.
Buat bucket regional publik (dalam kasus ini di Eropa) dengan akses seragam bagi pengguna untuk mengupload gambar, menggunakan alat gsutil
:
export BUCKET_PICTURES=uploaded-pictures-${GOOGLE_CLOUD_PROJECT} gsutil mb -l EU gs://${BUCKET_PICTURES} gsutil uniformbucketlevelaccess set on gs://${BUCKET_PICTURES} gsutil iam ch allUsers:objectViewer gs://${BUCKET_PICTURES}
Buat bucket regional publik lain untuk thumbnail:
export BUCKET_THUMBNAILS=thumbnails-${GOOGLE_CLOUD_PROJECT} gsutil mb -l EU gs://${BUCKET_THUMBNAILS} gsutil uniformbucketlevelaccess set on gs://${BUCKET_THUMBNAILS} gsutil iam ch allUsers:objectViewer gs://${BUCKET_THUMBNAILS}
Anda dapat memeriksa kembali apakah bucket dibuat dan bersifat publik dengan membuka bagian Cloud Storage di Konsol Cloud:
8. Transformasi Data Vision (Cloud Function)
Workflows.yaml dimulai dengan init
, eventTypeSwitch
, eventTypeNotSupported
langkah. Hal ini memastikan peristiwa yang berasal dari bucket dirutekan ke langkah yang benar.
Untuk peristiwa object.finalize
, langkah imageAnalysisCall
akan melakukan panggilan ke Vision API untuk mengekstrak metadata gambar yang dibuat. Semua langkah ini dilakukan dalam Workflows:
Selanjutnya, kita perlu mengubah data yang ditampilkan dari Vision API, sebelum dapat menyimpannya ke Firestore. Lebih khususnya, kita perlu:
- Menampilkan daftar label yang ditampilkan untuk gambar.
- Ambil warna dominan gambar.
- Tentukan apakah gambar tersebut aman.
Hal ini dilakukan dalam kode di Cloud Function dan Workflows hanya memanggil fungsi ini:
Mempelajari kode
Cloud Function disebut vision-data-transform
. Anda dapat memeriksa kode lengkapnya di index.js. Seperti yang dapat Anda lihat, tujuan satu-satunya dari fungsi ini adalah melakukan transformasi JSON ke JSON, sehingga dapat menyimpan metadata gambar dengan mudah di Firestore.
Men-deploy ke Cloud Functions
Buka folder:
cd workflows/functions/vision-data-transform/nodejs
Tetapkan region pilihan Anda:
export REGION=europe-west1 gcloud config set functions/region ${REGION}
Deploy fungsi dengan:
export SERVICE_NAME=vision-data-transform gcloud functions deploy ${SERVICE_NAME} \ --source=. \ --runtime nodejs10 \ --entry-point=vision_data_transform \ --trigger-http \ --allow-unauthenticated
Setelah fungsi di-deploy, langkah transformImageAnalysisData
Workflows akan dapat memanggil fungsi ini untuk melakukan transformasi data Vision API.
9. Menyiapkan database
Selanjutnya di Workflows adalah memeriksa keamanan gambar dari data gambar, kemudian menyimpan informasi tentang gambar yang ditampilkan oleh Vision API ke dalam database Cloud Firestore, yaitu database dokumen NoSQL yang cepat, terkelola sepenuhnya, serverless, dan berbasis cloud:
Keduanya dilakukan di Workflows, tetapi Anda perlu membuat database Firestore agar penyimpanan metadata dapat berfungsi.
Pertama, buat aplikasi App Engine di region tempat Anda menginginkan database Firestore (persyaratan untuk Firestore):
export REGION_FIRESTORE=europe-west2 gcloud app create --region=${REGION_FIRESTORE}
Selanjutnya, buat database Firestore di region yang sama:
gcloud firestore databases create --region=${REGION_FIRESTORE}
Dokumen akan dibuat secara terprogram dalam koleksi kami dan akan berisi 4 kolom:
- name (string): nama file gambar yang diupload dan juga merupakan kunci dokumen
- label (array string): label item yang dikenali oleh Vision API
- color (string): kode warna heksadesimal dari warna dominan (yaitu #ab12ef)
- dibuat (tanggal): stempel waktu saat metadata gambar ini disimpan
- thumbnail (boolean): kolom opsional yang akan ada dan bernilai benar jika gambar thumbnail telah dibuat untuk gambar ini
Karena kita akan menelusuri di Firestore untuk menemukan gambar yang memiliki thumbnail, dan mengurutkan berdasarkan tanggal pembuatan, kita harus membuat indeks penelusuran. Anda dapat membuat indeks dengan perintah berikut:
gcloud firestore indexes composite create --collection-group=pictures \ --field-config field-path=thumbnail,order=descending \ --field-config field-path=created,order=descending
Perhatikan bahwa pembuatan indeks dapat memerlukan waktu hingga 10 menit atau lebih.
Setelah indeks dibuat, Anda dapat melihatnya di Cloud Console:
Sekarang, langkah storeMetadata
alur kerja akan dapat menyimpan metadata gambar ke Firestore.
10. Layanan thumbnail (Cloud Run)
Selanjutnya dalam rantai ini adalah membuat {i>thumbnail<i} dari gambar. Hal ini dilakukan dalam kode di layanan Cloud Run dan Workflows memanggil layanan ini dalam langkah thumbnailCall
:
Mempelajari kode
Layanan Cloud Run disebut thumbnails
. Anda dapat memeriksa kode lengkapnya di index.js.
Membuat dan memublikasikan image container
Cloud Run menjalankan container, tetapi Anda harus membangun image container terlebih dahulu (ditentukan di Dockerfile
). Google Cloud Build dapat digunakan untuk membangun image container, lalu menghosting ke Google Container Registry.
Buka folder:
cd workflows/services/thumbnails/nodejs
Bentukan:
export SERVICE_SRC=thumbnails export SERVICE_NAME=${SERVICE_SRC}-service gcloud builds submit \ . \ --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/${SERVICE_NAME}
Setelah satu atau dua menit, build akan berhasil dan container akan di-deploy ke Google Container Registry.
Men-deploy ke Cloud Run
Tetapkan beberapa variabel dan konfigurasi yang diperlukan:
export BUCKET_THUMBNAILS=thumbnails-${GOOGLE_CLOUD_PROJECT} export REGION=europe-west1 gcloud config set run/region ${REGION} gcloud config set run/platform managed
Deploy dengan perintah berikut:
gcloud run deploy ${SERVICE_NAME} \ --image gcr.io/${GOOGLE_CLOUD_PROJECT}/${SERVICE_NAME} \ --no-allow-unauthenticated \ --memory=1Gi \ --update-env-vars BUCKET_THUMBNAILS=${BUCKET_THUMBNAILS}
Setelah layanan di-deploy, langkah thumbnailCall
Workflows akan dapat memanggil layanan ini.
11. Layanan kolase (Cloud Run)
Selanjutnya dalam rantai tersebut adalah membuat kolase dari gambar terbaru. Hal ini dilakukan dalam kode di layanan Cloud Run dan Workflows memanggil layanan ini dalam langkah collageCall
:
Mempelajari kode
Layanan Cloud Run disebut collage
. Anda dapat memeriksa kode lengkapnya di index.js.
Membuat dan memublikasikan image container
Cloud Run menjalankan container, tetapi Anda harus membangun image container terlebih dahulu (ditentukan di Dockerfile
). Google Cloud Build dapat digunakan untuk membangun image container, lalu menghosting ke Google Container Registry.
Buka folder:
cd services/collage/nodejs
Bentukan:
export SERVICE_SRC=collage export SERVICE_NAME=${SERVICE_SRC}-service gcloud builds submit \ . \ --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/${SERVICE_NAME}
Setelah satu atau dua menit, build akan berhasil dan container akan di-deploy ke Google Container Registry.
Men-deploy ke Cloud Run
Tetapkan beberapa variabel dan konfigurasi yang diperlukan:
export BUCKET_THUMBNAILS=thumbnails-${GOOGLE_CLOUD_PROJECT} export REGION=europe-west1 gcloud config set run/region ${REGION} gcloud config set run/platform managed
Kerahkan:
gcloud run deploy ${SERVICE_NAME} \ --image gcr.io/${GOOGLE_CLOUD_PROJECT}/${SERVICE_NAME} \ --no-allow-unauthenticated \ --memory=1Gi \ --update-env-vars BUCKET_THUMBNAILS=${BUCKET_THUMBNAILS}
Setelah layanan di-deploy, Anda dapat memeriksa bahwa kedua layanan tersebut berjalan di bagian Cloud Run di Konsol Cloud dan langkah Workflows collageCall
akan dapat memanggil layanan ini:
12. Deployment alur kerja
Kita telah men-deploy semua dependensi eksternal Workflows. Semua langkah yang tersisa (finalizeCompleted
, pictureGarbageCollectionGCS
, pictureGarbageCollectionFirestore
, deleteCompleted
) dapat diselesaikan oleh Workflows itu sendiri.
Saatnya men-deploy Workflows.
Buka folder yang berisi file workflows.yaml
dan deploy dengan:
export WORKFLOW_REGION=europe-west4 export WORKFLOW_NAME=picadaily-workflows gcloud workflows deploy ${WORKFLOW_NAME} \ --source=workflows.yaml \ --location=${WORKFLOW_REGION}
Dalam beberapa detik, Workflow akan di-deploy dan Anda dapat melihatnya di bagian Workflows di Konsol Cloud:
Anda dapat mengklik Alur Kerja dan mengeditnya, jika mau. Selama pengeditan, Anda mendapatkan representasi visual yang bagus dari Workflows:
Anda juga dapat menjalankan Workflows dari Cloud Console secara manual dengan parameter yang tepat. Sebagai gantinya, kita akan menjalankannya secara otomatis sebagai respons terhadap peristiwa Cloud Storage di langkah berikutnya.
13. Pemicu Workflows (Cloud Functions)
Alur kerja telah di-deploy dan siap. Sekarang, kita perlu memicu Workflows saat file dibuat atau dihapus di bucket Cloud Storage. Keduanya masing-masing adalah peristiwa storage.object.finalize
dan storage.object.delete
.
Alur kerja memiliki API dan library klien untuk membuat, mengelola, dan menjalankan Alur Kerja yang dapat Anda gunakan. Dalam hal ini, Anda akan menggunakan Workflows Execution API dan lebih khusus lagi library klien Node.js untuk memicu Alur Kerja.
Anda akan memicu Workflows dari Cloud Function yang memproses peristiwa Cloud Storage. Karena Cloud Function hanya dapat memproses satu jenis peristiwa, Anda akan men-deploy dua Cloud Functions untuk memproses peristiwa pembuatan dan penghapusan:
Mempelajari kode
Cloud Function disebut trigger-workflow
. Anda dapat memeriksa kode lengkapnya di index.js.
Men-deploy ke Cloud Functions
Buka folder:
cd workflows/functions/trigger-workflow/nodejs
Tetapkan beberapa variabel dan konfigurasi yang diperlukan:
export BUCKET_PICTURES=uploaded-pictures-${GOOGLE_CLOUD_PROJECT} export REGION=europe-west1 export WORKFLOW_NAME=picadaily-workflows export WORKFLOW_REGION=europe-west4 export COLLAGE_URL=$(gcloud run services describe collage-service --format 'value(status.url)') export THUMBNAILS_URL=$(gcloud run services describe thumbnails-service --format 'value(status.url)') export VISION_DATA_TRANSFORM_URL=$(gcloud functions describe vision-data-transform --format 'value(httpsTrigger.url)') gcloud config set functions/region ${REGION}
Deploy fungsi yang merespons peristiwa final:
export SERVICE_NAME=trigger-workflow-on-finalize gcloud functions deploy ${SERVICE_NAME} \ --source=. \ --runtime nodejs10 \ --entry-point=trigger_workflow \ --trigger-resource=${BUCKET_PICTURES} \ --trigger-event=google.storage.object.finalize \ --allow-unauthenticated \ --set-env-vars GOOGLE_CLOUD_PROJECT=${GOOGLE_CLOUD_PROJECT},WORKFLOW_REGION=${WORKFLOW_REGION},WORKFLOW_NAME=${WORKFLOW_NAME},THUMBNAILS_URL=${THUMBNAILS_URL},COLLAGE_URL=${COLLAGE_URL},VISION_DATA_TRANSFORM_URL=${VISION_DATA_TRANSFORM_URL}
Deploy fungsi kedua yang merespons peristiwa penghapusan:
export SERVICE_NAME=trigger-workflow-on-delete gcloud functions deploy ${SERVICE_NAME} \ --source=. \ --runtime nodejs10 \ --entry-point=trigger_workflow \ --trigger-resource=${BUCKET_PICTURES} \ --trigger-event=google.storage.object.delete \ --allow-unauthenticated \ --set-env-vars GOOGLE_CLOUD_PROJECT=${GOOGLE_CLOUD_PROJECT},WORKFLOW_REGION=${WORKFLOW_REGION},WORKFLOW_NAME=${WORKFLOW_NAME},THUMBNAILS_URL=${THUMBNAILS_URL},COLLAGE_URL=${COLLAGE_URL},VISION_DATA_TRANSFORM_URL=${VISION_DATA_TRANSFORM_URL}
Setelah deployment selesai, Anda dapat melihat kedua fungsi di Cloud Console:
14. Frontend (App Engine)
Pada langkah ini, Anda akan membuat frontend web di Google App Engine dari Pic-a-daily: Lab 4—Buat frontend web yang memungkinkan pengguna mengupload gambar dari aplikasi web, serta menjelajahi gambar yang diupload dan thumbnail mereka.
Anda dapat mempelajari App Engine lebih lanjut dan membaca deskripsi kode di Pic-a-daily: Lab 4—Membuat frontend web.
Mempelajari kode
Aplikasi App Engine disebut frontend
. Anda dapat memeriksa kode lengkapnya di index.js.
Men-deploy ke App Engine
Buka folder:
cd frontend
Tetapkan region pilihan Anda dan ganti GOOGLE_CLOUD_PROJECT
dalam app.yaml dengan ID project Anda yang sebenarnya:
export REGION=europe-west1 gcloud config set compute/region ${REGION} sed -i -e "s/GOOGLE_CLOUD_PROJECT/${GOOGLE_CLOUD_PROJECT}/" app.yaml
Kerahkan:
gcloud app deploy app.yaml -q
Setelah satu atau dua menit, Anda akan diberi tahu bahwa aplikasi menyalurkan traffic:
Beginning deployment of service [default]... ╔════════════════════════════════════════════════════════════╗ ╠═ Uploading 8 files to Google Cloud Storage ═╣ ╚════════════════════════════════════════════════════════════╝ File upload done. Updating service [default]...done. Setting traffic split for service [default]...done. Deployed service [default] to [https://GOOGLE_CLOUD_PROJECT.appspot.com] You can stream logs from the command line by running: $ gcloud app logs tail -s default To view your application in the web browser run: $ gcloud app browse
Anda juga dapat mengunjungi bagian App Engine di Konsol Cloud untuk melihat apakah aplikasi sudah di-deploy dan mempelajari fitur App Engine seperti pembuatan versi dan pemisahan traffic:
15. Menguji Alur Kerja
Untuk menguji, buka URL App Engine default untuk aplikasi aplikasi (https://<YOUR_PROJECT_ID>.appspot.com/
) dan Anda akan melihat UI frontend aktif dan berjalan.
Upload gambar. Tindakan ini akan memicu Workflows dan Anda dapat melihat eksekusi Workflow dalam status Active
di Konsol Cloud:
Setelah Workflows selesai, Anda dapat mengklik ID eksekusi dan melihat output dari berbagai layanan:
Upload 3 gambar lagi. Anda juga akan melihat thumbnail dan kolase gambar di bucket Cloud Storage dan frontend App Engine yang diperbarui:
16. Pembersihan (Opsional)
Jika tidak ingin mempertahankan aplikasi, Anda dapat membersihkan resource untuk menghemat biaya dan menjadi cloud citizen yang baik secara keseluruhan dengan menghapus seluruh project:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}
17. Selamat!
Anda telah membuat versi aplikasi yang diorkestrasi menggunakan Workflows untuk melakukan orkestrasi dan memanggil layanan.
Yang telah kita bahas
- App Engine
- Cloud Firestore
- Cloud Functions
- Cloud Run
- Workflows