Tutorial ini menunjukkan cara menggunakan Workflows untuk menautkan serangkaian layanan bersama-sama. Dengan menghubungkan dua layanan HTTP publik menggunakan fungsi Cloud Run, REST API eksternal, dan layanan Cloud Run pribadi, Anda dapat membuat aplikasi serverless yang fleksibel.
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.py
yang berisi kode Python berikut:Agar dapat mendukung dependensi pada Flask untuk pemrosesan HTTP, buat file teks untuk pengelola paket pip. Berikan nama file
requirements.txt
dan 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 fungsi Cloud Run di konsol Google Cloud untuk men-deploy fungsi tersebut.
Setelah fungsi
randomgen
di-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
multiply
lalu ubah ke direktori tersebut:mkdir ~/multiply cd ~/multiply
Buat file teks dengan nama file
main.py
yang berisi kode Python berikut:Agar dapat mendukung dependensi pada Flask untuk pemrosesan HTTP, buat file teks untuk pengelola paket pip. Berikan nama file
requirements.txt
dan 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 fungsi Cloud Run di konsol Google Cloud untuk men-deploy fungsi tersebut.
Setelah fungsi
multiply
di-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.yaml
yang 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_URL
dengan URL fungsirandomgen
Anda. - Ganti
MULTIPLY_FUNCTION_URL
dengan URL fungsimultiply
Anda.
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_NAME
dengan nama untuk alur kerja Anda.Menjalankan 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
Memperbarui alur kerja yang ada dan menghubungkan 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_URL
dengan URL fungsirandomgen
Anda. - Ganti
MULTIPLY_FUNCTION_URL
dengan URL fungsimultiply
Anda.
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.py
yang berisi kode Python berikut:Dalam direktori yang sama, buat
Dockerfile
dengan konten berikut:Buat repositori standar Artifact Registry tempat Anda dapat menyimpan image container Docker:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=${REGION}
Ganti
REPOSITORY
dengan nama unik untuk repositori.Build 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_URL
dengan URL fungsirandomgen
Anda. - Ganti
MULTIPLY_FUNCTION_URL
dengan URL fungsimultiply
Anda. - Ganti
CLOUD_RUN_SERVICE_URL
dengan URL layanan Cloud Run Anda.
Tindakan ini akan menghubungkan layanan Cloud Run dalam alur kerja. Perlu diperhatikan bahwa kunci
auth
memastikan bahwa 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
Output 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 Workflows yang lebih kompleks menggunakan ekspresi, lompatan kondisional, encoding atau decoding Base64, subalur kerja, dan lainnya, lihat Referensi sintaksis Workflows dan Ringkasan library standar.