1. Pengantar
Ringkasan
Fungsi Cloud Run memungkinkan Anda menentukan revisi mana yang akan menerima traffic dan menentukan persentase traffic yang diterima oleh revisi. Dengan revisi, Anda dapat melakukan rollback ke revisi sebelumnya, meluncurkan revisi secara bertahap, dan membagi traffic antara beberapa revisi.
Codelab ini menunjukkan cara menggunakan revisi untuk mengelola traffic ke fungsi Cloud Run Anda. Anda dapat mempelajari revisi lebih lanjut di dokumentasi Cloud Run.
Yang akan Anda pelajari
- Cara memisahkan traffic antara dua revisi atau lebih untuk fungsi Cloud Run
- Cara meluncurkan revisi baru secara bertahap
- Cara melakukan rollback ke revisi sebelumnya
2. Penyiapan dan Persyaratan
Prasyarat
- Anda login ke Cloud Console.
- Anda telah men-deploy fungsi Cloud Run sebelumnya. Misalnya, Anda dapat mengikuti cara men-deploy fungsi Cloud Run untuk memulai.
Mengaktifkan Cloud Shell
- Dari Cloud Console, klik Aktifkan Cloud Shell
.
Jika ini adalah pertama kalinya Anda memulai Cloud Shell, Anda akan melihat layar perantara yang menjelaskan apa itu Cloud Shell. Jika Anda melihat layar perantara, klik Lanjutkan.
Perlu waktu beberapa saat untuk penyediaan dan terhubung ke Cloud Shell.
Mesin virtual ini dimuat dengan semua alat pengembangan yang dibutuhkan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan dengan browser.
Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda telah diautentikasi dan project telah ditetapkan ke project ID Anda.
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list
Output perintah
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda:
gcloud config list project
Output perintah
[core] project = <PROJECT_ID>
Jika tidak, Anda dapat menyetelnya dengan perintah ini:
gcloud config set project <PROJECT_ID>
Output perintah
Updated property [core/project].
3. Pembagian Traffic
Contoh ini menunjukkan cara membuat fungsi yang membaca variabel lingkungan warna dan merespons kembali dengan nama revisi menggunakan warna latar belakang tersebut.
Meskipun codelab ini menggunakan node.js, Anda dapat menggunakan runtime apa pun.
Menetapkan Variabel Lingkungan
Anda dapat menetapkan variabel lingkungan yang akan digunakan di seluruh codelab ini.
REGION=<YOUR_REGION> PROJECT_ID=<YOUR-PROJECT-ID> BG_COLOR=darkseagreen
Membuat fungsi
Pertama, buat direktori untuk kode sumber dan {i>cd<i} ke direktori tersebut.
mkdir revisions-gcf-codelab && cd $_
Kemudian, buat file package.json
dengan konten berikut:
{ "dependencies": { "@google-cloud/functions-framework": "^3.0.0" } }
Selanjutnya, buat file sumber index.js
dengan konten berikut:
const functions = require('@google-cloud/functions-framework'); const BG_COLOR = process.env.BG_COLOR; const K_REVISION = process.env.K_REVISION; functions.http('helloWorld', (req, res) => { res.writeHead(200, { 'Content-Type': 'text/html' }); res.end('<html><body style="background-color:' + BG_COLOR + ';"' + '><div><p>' + 'Hello from ' + K_REVISION + ' using color ' + BG_COLOR + '</p></div></body>' + '</html>'); });
Untuk men-deploy fungsi Cloud Run langsung ke Cloud Run, jalankan perintah berikut:
gcloud beta run deploy traffic-splitting-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --set-env-vars BG_COLOR=$BG_COLOR
Jika Anda lebih memilih untuk men-deploy sebagai Cloud Functions generasi ke-2, gunakan perintah berikut:
gcloud functions deploy traffic-splitting-gcf \ --gen2 \ --runtime=nodejs20 \ --region=$REGION \ --source=. \ --entry-point=helloWorld \ --trigger-http \ --no-allow-unauthenticated \ --set-env-vars BG_COLOR=$BG_COLOR
Untuk menguji fungsi, Anda dapat melakukan curl pada endpoint yang ada untuk melihat warna darkseagreen di HTML, atau menggunakan browser untuk langsung membuka endpoint guna melihat warna latar belakang.
SERVICE_URL=$(gcloud run services describe traffic-splitting-gcf --platform managed --region $REGION --format 'value(status.url)') curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
Sekarang deploy revisi kedua dengan warna latar belakang cokelat.
Untuk men-deploy fungsi Cloud Run langsung ke Cloud Run, jalankan perintah berikut:
# update the env var BG_COLOR=tan gcloud beta run deploy traffic-splitting-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Jika Anda lebih memilih untuk men-deploy sebagai Cloud Functions generasi ke-2, gunakan perintah berikut:
# update the env var BG_COLOR=tan gcloud functions deploy traffic-splitting-gcf \ --gen2 \ --runtime nodejs20 \ --entry-point helloHttp \ --source . \ --region $REGION \ --trigger-http \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Sekarang, saat Anda meng-curl endpoint, Anda akan melihat warna latar belakang cokelat.
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
Membagi traffic 50-50
Untuk membagi traffic antara revisi warna laut dalam dan cokelat kecokelatan, Anda perlu menemukan ID revisi dari layanan Cloud Run yang mendasarinya. Anda dapat melihat ID revisi dengan menjalankan perintah ini:
gcloud run revisions list --service traffic-splitting-gcf \ --region $REGION --format 'value(REVISION)'
Anda akan melihat hasil yang mirip dengan yang ada di bawah ini
traffic-splitting-gcf-00003-qoq traffic-splitting-gcf-00002-zag
Anda dapat membagi traffic 50/50 di antara dua revisi dengan menjalankan perintah berikut:
gcloud run services update-traffic traffic-splitting-gcf \ --region $REGION \ --to-revisions <REVISION1>=50,<REVISION2>=50
Menguji pemisahan traffic
Anda dapat menguji fungsi dengan membuka URL publiknya (baik dengan curl atau langsung di browser).
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" $SERVICE_URL
Setengah waktu, Anda akan melihat revisi hijau laut gelap dan, setengah lainnya, revisi cokelat. Anda juga akan melihat nama revisi tercantum dalam output, mis.
<html><body style="background-color:tan;"><div><p>Hello traffic-splitting-gcf-00006-qoq</p></div></body></html>
4. Peluncuran Bertahap
Di bagian ini, Anda akan mempelajari cara meluncurkan perubahan secara bertahap pada revisi Cloud Function yang baru. Anda dapat mempelajari lebih lanjut peluncuran bertahap di dokumentasi.
Anda akan menggunakan kode yang sama seperti di bagian sebelumnya, tetapi Anda akan men-deploy-nya sebagai Cloud Function baru.
Pertama, tetapkan warna latar belakang ke beige
dan deploy fungsi dengan nama gradual-rollouts-gcf
.
Untuk men-deploy fungsi Cloud Run langsung ke Cloud Run, jalankan perintah berikut:
# update the env var BG_COLOR=beige gcloud beta run deploy gradual-rollouts-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Jika Anda lebih memilih untuk men-deploy sebagai Cloud Functions generasi ke-2, gunakan perintah berikut:
# update the env var BG_COLOR=beige # deploy the function gcloud functions deploy gradual-rollouts-gcf \ --gen2 \ --runtime nodejs20 \ --entry-point helloHttp \ --source . \ --region $REGION \ --trigger-http \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Sekarang, misalkan kita ingin meluncurkan revisi baru secara bertahap dengan warna latar belakang lavender.
Pertama, mari kita tetapkan revisi saat ini berwarna krem untuk menerima 100% traffic. Tindakan ini akan memastikan bahwa deployment Cloud Functions Anda di masa mendatang tidak menerima traffic apa pun. Secara default, Cloud Functions menetapkan 100% traffic ke revisi dengan flag latest
. Dengan menentukan secara manual bahwa revisi beige saat ini harus menerima semua traffic, revisi dengan flag latest
tidak akan lagi menerima 100% traffic. Lihat dokumentasi.
# get the revision name BEIGE_REVISION=$(gcloud run revisions list --service gradual-rollouts-gcf \ --region $REGION --format 'value(REVISION)') # now set 100% traffic to that revision gcloud run services update-traffic gradual-rollouts-gcf --to-revisions=$BEIGE_REVISION=100 --region $REGION
Anda akan melihat output yang mirip dengan Traffic: 100% gradual-rollouts-gcf2-00001-yox
Sekarang Anda dapat men-deploy revisi baru yang tidak akan menerima traffic apa pun. Daripada membuat perubahan kode, Anda dapat memperbarui variabel lingkungan BG_COLOR untuk revisi ini.
Untuk men-deploy fungsi Cloud Run langsung ke Cloud Run, jalankan perintah berikut:
# update color BG_COLOR=lavender # deploy the function that will not receive any traffic gcloud beta run deploy gradual-rollouts-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Jika Anda lebih memilih untuk men-deploy sebagai Cloud Functions generasi ke-2, gunakan perintah berikut:
# update color BG_COLOR=lavender # deploy the function that will not receive any traffic gcloud functions deploy gradual-rollouts-gcf \ --gen2 \ --runtime nodejs20 \ --entry-point helloHttp \ --source . \ --region $REGION \ --trigger-http \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR \ --tag $BG_COLOR
Sekarang, perbarui variabel lingkungan SERVICE_URL untuk menggunakan fungsi gradual-rollouts-gcf
SERVICE_URL=$(gcloud run services describe gradual-rollouts-gcf --platform managed --region $REGION --format 'value(status.url)')
dan sekarang saat Anda melakukan curl layanan
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
Anda akan melihat warna krem, meskipun lavender adalah revisi yang terakhir di-deploy.
<html><body style="background-color:beige;"><div><p>Hello from gradual-rollouts-gcf-24jan16-staging-2-00001-kop using color beige</p></div></body></html>
Menguji Revisi yang melayani traffic 0%
Misalkan Anda telah memverifikasi bahwa revisi Anda berhasil di-deploy dan telah melayani traffic 0%. Meskipun telah lulus pemeriksaan kondisi, Anda tetap ingin memverifikasi bahwa revisi ini menggunakan warna latar belakang lavender.
Untuk menguji revisi lavender, Anda dapat menerapkan tag ke revisi tersebut. Pemberian tag memungkinkan Anda menguji revisi baru secara langsung di URL tertentu, tanpa menyalurkan traffic.
Pertama, dapatkan URL gambar untuk revisi tersebut.
IMAGE_URL=$(gcloud run services describe gradual-rollouts-gcf --region $REGION --format 'value(IMAGE)')
Sekarang, beri tag pada gambar tersebut dengan warna terkait.
gcloud run deploy gradual-rollouts-gcf --image $IMAGE_URL --no-traffic --tag $BG_COLOR --region $REGION --no-allow-unauthenticated
Anda akan melihat output yang mirip dengan berikut ini:
The revision can be reached directly at https://lavender---gradual-rollouts-gcf-k6msmyp47q-lz.a.run.app
Sekarang Anda dapat meng-curl revisi ini secara langsung
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET <DIRECT_REVISION_URL>
dan lihat warna lavender dalam hasilnya:
<html><body style="background-color:lavender;"><div><p>Hello from gradual-rollouts-gcf-24jan16-00003-xik using color lavender</p></div></body></html>
Meningkatkan traffic secara bertahap
Sekarang, Anda dapat mulai mengirim traffic ke revisi lavender. Contoh di bawah menunjukkan cara mengirim 1% traffic ke lavender.
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=1
Untuk mengirim 50% traffic ke lavender, Anda dapat menggunakan perintah yang sama, tetapi tentukan 50%.
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=50
Anda akan melihat daftar jumlah traffic yang diterima setiap revisi.
Traffic: 50% gradual-rollouts-gcf-00001-hos 50% gradual-rollouts-gcf-00004-mum lavender: https://lavender---gradual-rollouts-gcf-k6msmyp47q-uc.a.run.app
Saat Anda siap untuk meluncurkan lavender sepenuhnya, Anda dapat mengatur lavender hingga 100% untuk mengganti warna krem.
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=100
dan kini saat Anda mengunjungi atau melakukan curl pada URL layanan fungsi secara bertahap-rollouts-gcf,
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
Anda hanya akan melihat warna lavender.
<html><body style="background-color:lavender;"><div><p>Hello gradual-rollouts-gcf-00004-mum</p></div></body></html>
5. Rollback
Misalnya, masukan UX awal telah diterima, yang menunjukkan bahwa pelanggan lebih menyukai warna krem daripada lavender, dan Anda perlu melakukan rollback ke warna krem.
Anda dapat melakukan roll back ke revisi sebelumnya (beige) dengan menjalankan perintah ini.
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-revisions $BEIGE_REVISION=100
dan sekarang saat Anda menggunakan curl atau mengunjungi endpoint URL fungsi,
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
Anda akan melihat warna beige ditampilkan.
<html><body style="background-color:beige;"><div><p>Hello gradual-rollouts-gcf-00001-hos</p></div></body></html>
Anda dapat mempelajari rollback lebih lanjut di dokumen.
6. Selamat!
Selamat, Anda telah menyelesaikan codelab.
Sebaiknya tinjau dokumentasi tentang peluncuran, rollback, dan migrasi traffic
Yang telah kita bahas
- Cara memisahkan traffic antara dua revisi atau lebih untuk fungsi Cloud Run
- Cara meluncurkan revisi baru secara bertahap
- Cara melakukan rollback ke revisi sebelumnya
7. Pembersihan
Untuk menghindari tagihan yang tidak disengaja, (misalnya, jika fungsi Cloud Run ini tidak sengaja dipanggil lebih dari alokasi pemanggilan Cloud Functions bulanan Anda di paket gratis), Anda dapat menghapus fungsi Cloud Run atau menghapus project yang Anda buat di Langkah 2.
Untuk menghapus fungsi Cloud Run yang di-deploy ke Cloud Run, buka Cloud Run di Cloud Console di https://console.cloud.google.com/functions/ dan hapus fungsi yang Anda buat dalam codelab ini.
Untuk menghapus fungsi Cloud Run yang di-deploy sebagai fungsi generasi ke-2, buka Cloud Functions di Konsol Cloud di https://console.cloud.google.com/functions/ dan hapus fungsi yang Anda buat di codelab ini.
Jika memilih untuk menghapus seluruh project, Anda dapat membuka https://console.cloud.google.com/cloud-resource-manager, memilih project yang Anda buat di Langkah 2, lalu memilih Hapus. Jika menghapus project, Anda harus mengubah project di Cloud SDK. Anda dapat melihat daftar semua project yang tersedia dengan menjalankan gcloud projects list
.