Tutorial ini menunjukkan cara menggunakan Workflows untuk menautkan serangkaian layanan bersama-sama. Dengan menghubungkan dua layanan HTTP publik menggunakan Cloud Run Functions, REST API eksternal, dan layanan Cloud Run pribadi, Anda dapat membuat aplikasi serverless yang fleksibel.
Tujuan
Dalam tutorial ini, Anda menggunakan Google Cloud CLI untuk membuat satu alur kerja yang menghubungkan satu layanan dalam satu waktu:
- Deploy dua fungsi Cloud Run: fungsi pertama menghasilkan angka acak, lalu meneruskan angka tersebut ke fungsi kedua yang mengalikannya.
- Dengan menggunakan Workflows, hubungkan kedua fungsi HTTP. Jalankan alur kerja dan tampilkan hasil yang kemudian diteruskan ke API eksternal.
- Dengan menggunakan Workflows, hubungkan API HTTP eksternal
yang menampilkan
loguntuk nomor tertentu. Jalankan alur kerja dan tampilkan hasil yang kemudian diteruskan ke layanan Cloud Run. - Deploy layanan Cloud Run yang hanya mengizinkan
akses terautentikasi. Layanan menampilkan
math.flooruntuk nomor tertentu. - Dengan menggunakan Workflows, hubungkan layanan Cloud Run, jalankan seluruh alur kerja, dan tampilkan hasil akhir.
Diagram berikut menunjukkan ringkasan proses serta visualisasi alur kerja akhir:
Biaya
Dalam 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 Google Cloud yang terbatas.
- 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.
-
Instal 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 -
Buat atau pilih Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan Artifact Registry, Cloud Build, Cloud Run, Cloud Run Functions, Cloud Storage, dan Workflows API:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com run.googleapis.com cloudfunctions.googleapis.com storage.googleapis.com workflows.googleapis.com -
Instal 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 -
Buat atau pilih Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan Artifact Registry, Cloud Build, Cloud Run, Cloud Run Functions, Cloud Storage, dan Workflows API:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com run.googleapis.com cloudfunctions.googleapis.com storage.googleapis.com workflows.googleapis.com - Update komponen Google Cloud CLI:
gcloud components update
- Jika menjalankan perintah di dalam Cloud Shell,
berarti Anda sudah diautentikasi
dengan gcloud CLI. Jika tidak, login dengan akun Anda:
gcloud auth login
- Tetapkan lokasi default yang digunakan dalam tutorial ini:
gcloud config set project PROJECT_ID export REGION=REGION gcloud config set functions/region ${REGION} gcloud config set run/region ${REGION} gcloud config set workflows/location ${REGION}
Ganti
REGIONdengan lokasi Workflows yang didukung pilihan Anda. -
Jika Anda adalah project creator, Anda diberi peran Pemilik dasar (
roles/owner). Secara default, peran Identity and Access Management (IAM) ini mencakup izin yang diperlukan untuk akses penuh ke sebagian besar resource Google Cloud dan Anda dapat melewati langkah ini.Jika Anda bukan project creator, izin yang diperlukan harus diberikan pada project kepada akun utama yang sesuai. Misalnya, akun utama dapat berupa Akun Google (untuk pengguna akhir) atau akun layanan (untuk aplikasi dan workload komputasi). Untuk mengetahui informasi selengkapnya, lihat halaman eran dan izin untuk tujuan peristiwa Anda.
Izin yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:
-
Editor Cloud Build (
roles/cloudbuild.builds.editor) -
Cloud Functions Developer (
roles/cloudfunctions.developer) -
Admin Cloud Run (
roles/run.admin) -
Buat Akun Layanan (
roles/iam.serviceAccountCreator) -
Project IAM Admin (
roles/resourcemanager.projectIamAdmin) -
Service Account User (
roles/iam.serviceAccountUser) -
Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) -
Storage Admin (
roles/storage.admin) -
Workflows Editor (
roles/workflows.editor)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
-
Editor Cloud Build (
- Saat men-deploy alur kerja, Anda mengaitkannya dengan akun layanan yang ditentukan. Buat akun layanan untuk Workflows yang akan digunakan:
export SERVICE_ACCOUNT=workflows-sa gcloud iam service-accounts create ${SERVICE_ACCOUNT}
- Semua layanan Cloud Run di-deploy secara pribadi secara default
dan hanya dapat dipanggil oleh Project Owner, Project Editor, Cloud Run
Admin, dan Cloud Run Invoker. Untuk mengizinkan akun layanan memanggil layanan Cloud Run yang diautentikasi, berikan peran
run.invokerke akun layanan Workflows:gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:${SERVICE_ACCOUNT}@PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/run.invoker"
Men-deploy fungsi Cloud Run pertama
Setelah menerima permintaan HTTP, fungsi HTTP ini menghasilkan angka acak antara 1 dan 100, lalu menampilkan angka dalam format JSON.
Buat direktori bernama
randomgen, lalu ubah ke direktori tersebut:mkdir ~/randomgen cd ~/randomgen
Buat file teks dengan nama file
main.pyyang berisi kode Python berikut:Agar dapat mendukung dependensi pada Flask untuk pemrosesan HTTP, buat file teks untuk pengelola paket pip. Berikan nama file
requirements.txtdan tambahkan hal berikut:Deploy fungsi dengan pemicu HTTP, dan izinkan akses yang tidak diautentikasi:
gcloud functions deploy randomgen-function \ --gen2 \ --runtime python310 \ --entry-point=randomgen \ --trigger-http \ --allow-unauthenticated
Fungsi mungkin memerlukan waktu beberapa menit untuk di-deploy. Atau, Anda dapat menggunakan antarmuka Cloud Run Functions di konsol Google Cloud untuk men-deploy fungsi tersebut.
Setelah fungsi
randomgendi-deploy, Anda dapat mengonfirmasi propertihttpsTrigger.url:gcloud functions describe randomgen-function \ --gen2 \ --format="value(serviceConfig.uri)"
Simpan URL. Anda harus menambahkannya ke file sumber Alur Kerja Anda di latihan selanjutnya.
Anda dapat mencoba fungsi ini dengan perintah curl berikut:
curl $(gcloud functions describe randomgen-function \ --gen2 \ --format="value(serviceConfig.uri)")
Angka dibuat secara acak dan ditampilkan.
Men-deploy fungsi Cloud Run kedua
Setelah menerima permintaan HTTP, fungsi HTTP ini akan mengekstrak input
dari isi JSON, mengalikannya dengan 2, dan menampilkan hasilnya dalam format JSON.
Kembali ke direktori utama Anda:
cd ~
Buat direktori bernama
multiplylalu ubah ke direktori tersebut:mkdir ~/multiply cd ~/multiply
Buat file teks dengan nama file
main.pyyang berisi kode Python berikut:Agar dapat mendukung dependensi pada Flask untuk pemrosesan HTTP, buat file teks untuk pengelola paket pip. Berikan nama file
requirements.txtdan tambahkan hal berikut:Deploy fungsi dengan pemicu HTTP, dan izinkan akses yang tidak diautentikasi:
gcloud functions deploy multiply-function \ --gen2 \ --runtime python310 \ --entry-point=multiply \ --trigger-http \ --allow-unauthenticated
Fungsi mungkin memerlukan waktu beberapa menit untuk di-deploy. Atau, Anda dapat menggunakan antarmuka Cloud Run Functions di konsol Google Cloud untuk men-deploy fungsi tersebut.
Setelah fungsi
multiplydi-deploy, Anda dapat mengonfirmasi propertihttpsTrigger.url:gcloud functions describe multiply-function \ --gen2\ --format="value(serviceConfig.uri)"
Simpan URL. Anda harus menambahkannya ke file sumber Alur Kerja Anda di latihan selanjutnya.
Anda dapat mencoba fungsi ini dengan perintah curl berikut:
curl -X POST MULTIPLY_FUNCTION_URL \ -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{"input": 5}'
Angka 10 harus ditampilkan.
Menghubungkan dua fungsi Cloud Run dalam 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. Untuk penjelasan mendetail, lihat halaman Referensi sintaksis.
Kembali ke direktori utama Anda:
cd ~
Buat file teks dengan nama file
workflow.yamlyang berisi konten berikut:- randomgen_function: call: http.get args: url: RANDOMGEN_FUNCTION_URL result: randomgen_result - multiply_function: call: http.post args: url: MULTIPLY_FUNCTION_URL body: input: ${randomgen_result.body.random} result: multiply_result - return_result: return: ${multiply_result}- Ganti
RANDOMGEN_FUNCTION_URLdengan URL fungsirandomgenAnda. - Ganti
MULTIPLY_FUNCTION_URLdengan URL fungsimultiplyAnda.
File sumber ini menautkan dua fungsi HTTP bersama-sama dan menampilkan hasil akhir.
- Ganti
Setelah membuat alur kerja, Anda dapat men-deploy alur kerja tersebut sehingga siap untuk dieksekusi.
gcloud workflows deploy WORKFLOW_NAME \ --source=workflow.yaml \ --service-account=${SERVICE_ACCOUNT}@PROJECT_ID.iam.gserviceaccount.com
Ganti
WORKFLOW_NAMEdengan nama untuk alur kerja Anda.Jalankan alur kerja:
gcloud workflows run WORKFLOW_NAME
Eksekusi adalah satu eksekusi logika yang terkandung dalam definisi alur kerja. Semua eksekusi alur kerja bersifat independen, dan penskalaan Workflows yang cepat memungkinkan banyak eksekusi serentak.
Setelah alur kerja dieksekusi, output-nya akan terlihat seperti berikut:
result: '{"body":{"multiplied":120},"code":200,"headers":{"Alt-Svc":"h3-29=\":443\"; ... startTime: '2021-05-05T14:17:39.135251700Z' state: SUCCEEDED ...
Menghubungkan layanan REST publik dalam alur kerja
Perbarui alur kerja yang ada dan hubungkan
REST API publik (math.js)
yang dapat mengevaluasi ekspresi matematika. Contoh,
curl https://api.mathjs.org/v4/?'expr=log(56)'.
Perlu diperhatikan bahwa karena telah men-deploy alur kerja, Anda juga dapat mengeditnya melalui halaman Workflows di konsol Google Cloud .
Edit file sumber untuk alur kerja Anda dan ganti dengan konten berikut:
- randomgen_function: call: http.get args: url: RANDOMGEN_FUNCTION_URL result: randomgen_result - multiply_function: call: http.post args: url: MULTIPLY_FUNCTION_URL body: input: ${randomgen_result.body.random} result: multiply_result - log_function: call: http.get args: url: https://api.mathjs.org/v4/ query: expr: ${"log(" + string(multiply_result.body.multiplied) + ")"} result: log_result - return_result: return: ${log_result}- Ganti
RANDOMGEN_FUNCTION_URLdengan URL fungsirandomgenAnda. - Ganti
MULTIPLY_FUNCTION_URLdengan URL fungsimultiplyAnda.
Tindakan ini akan menautkan layanan REST eksternal ke fungsi Cloud Run, dan menampilkan hasil akhir.
- Ganti
Deploy alur kerja yang diubah:
gcloud workflows deploy WORKFLOW_NAME \ --source=workflow.yaml \ --service-account=${SERVICE_ACCOUNT}@PROJECT_ID.iam.gserviceaccount.com
Men-deploy layanan Cloud Run
Deploy layanan Cloud Run yang, setelah menerima
permintaan HTTP, mengekstrak input dari isi JSON, menghitung math.floor-nya,
dan menampilkan hasilnya.
Buat direktori bernama
floor, lalu ubah ke direktori tersebut:mkdir ~/floor cd ~/floor
Buat file teks dengan nama file
app.pyyang berisi kode Python berikut:Dalam direktori yang sama, buat
Dockerfiledengan konten berikut:Buat repositori standar Artifact Registry untuk menyimpan image container Docker:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=${REGION}
Ganti
REPOSITORYdengan nama unik untuk repositori.Bangun image container:
export SERVICE_NAME=floor gcloud builds submit --tag ${REGION}-docker.pkg.dev/PROJECT_ID/REPOSITORY/${SERVICE_NAME}
Deploy image container ke Cloud Run untuk memastikan bahwa image tersebut hanya menerima panggilan yang diautentikasi:
gcloud run deploy ${SERVICE_NAME} \ --image ${REGION}-docker.pkg.dev/PROJECT_ID/REPOSITORY/${SERVICE_NAME}:latest \ --no-allow-unauthenticated
Jika Anda melihat URL layanan, berarti deployment selesai. Anda harus menentukan URL tersebut saat memperbarui definisi alur kerja.
Menghubungkan layanan Cloud Run dalam alur kerja
Perbarui alur kerja yang ada dan tentukan URL untuk layanan Cloud Run.
Kembali ke direktori utama Anda:
cd ~
Edit file sumber untuk alur kerja Anda dan ganti dengan konten berikut:
- randomgen_function: call: http.get args: url: RANDOMGEN_FUNCTION_URL result: randomgen_result - multiply_function: call: http.post args: url: MULTIPLY_FUNCTION_URL body: input: ${randomgen_result.body.random} result: multiply_result - log_function: call: http.get args: url: https://api.mathjs.org/v4/ query: expr: ${"log(" + string(multiply_result.body.multiplied) + ")"} result: log_result - floor_function: call: http.post args: url: CLOUD_RUN_SERVICE_URL auth: type: OIDC body: input: ${log_result.body} result: floor_result - create_output_map: assign: - outputMap: randomResult: ${randomgen_result} multiplyResult: ${multiply_result} logResult: ${log_result} floorResult: ${floor_result} - return_output: return: ${outputMap}- Ganti
RANDOMGEN_FUNCTION_URLdengan URL fungsirandomgenAnda. - Ganti
MULTIPLY_FUNCTION_URLdengan URL fungsimultiplyAnda. - Ganti
CLOUD_RUN_SERVICE_URLdengan URL layanan Cloud Run Anda.
Tindakan ini akan menghubungkan layanan Cloud Run dalam alur kerja. Perlu diperhatikan bahwa kunci
authmemastikan token autentikasi diteruskan dalam panggilan ke layanan Cloud Run. Untuk mengetahui informasi selengkapnya, lihat Membuat permintaan yang diautentikasi dari alur kerja.- Ganti
Deploy alur kerja yang diubah:
gcloud workflows deploy WORKFLOW_NAME \ --source=workflow.yaml \ --service-account=${SERVICE_ACCOUNT}@PROJECT_ID.iam.gserviceaccount.com
Jalankan alur kerja akhir:
gcloud workflows run WORKFLOW_NAME
Outputnya akan terlihat seperti berikut:
result: '{"floorResult":{"body":"4","code":200 ... "logResult":{"body":"4.02535169073515","code":200 ... "multiplyResult":{"body":{"multiplied":56},"code":200 ... "randomResult":{"body":{"random":28},"code":200 ... startTime: '2023-11-13T21:22:56.782669001Z' state: SUCCEEDED
Selamat! Anda telah men-deploy dan menjalankan alur kerja yang menghubungkan serangkaian layanan secara bersamaan.
Untuk membuat alur kerja yang lebih kompleks menggunakan ekspresi, lompatan kondisional, encoding atau decoding Base64, sub-alur kerja, dan lainnya, lihat Referensi sintaksis Workflows dan Ringkasan library standar.
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:
- 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 layanan Cloud Run yang Anda deploy dalam tutorial ini:
Hapus alur kerja yang Anda buat dalam tutorial ini.
Hapus image container dari Artifact Registry.
Hapus konfigurasi default Google Cloud CLI yang Anda tambahkan selama penyiapan tutorial:
gcloud config unset functions/region gcloud config unset run/region gcloud config unset workflows/location gcloud config unset project