1. Pengantar
Ringkasan
Cloud Run Functions memungkinkan Anda menentukan revisi mana yang akan menerima traffic dan menentukan persentase traffic yang diterima oleh revisi. Revisi memungkinkan Anda 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 Cloud Run Functions Anda. Anda dapat mempelajari lebih lanjut revisi 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 Konsol Cloud.
- 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 Continue.

Perlu waktu beberapa saat untuk menyediakan dan terhubung ke Cloud Shell.

Virtual machine ini dilengkapi dengan semua alat pengembangan yang diperlukan. VM 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 cd 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 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 membuka endpoint secara langsung untuk 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 muda.
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 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 melakukan curl endpoint, Anda akan melihat warna latar belakang cokelat muda.
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
Membagi traffic 50-50
Untuk memisahkan traffic antara revisi hijau laut dalam dan cokelat, Anda perlu menemukan ID revisi 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 contoh di bawah
traffic-splitting-gcf-00003-qoq traffic-splitting-gcf-00002-zag
Anda dapat memisahkan 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 dari waktu, Anda akan melihat revisi hijau laut gelap dan setengah lainnya, revisi cokelat muda. Anda juga akan melihat nama revisi yang tercantum dalam output, misalnya
<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 ke revisi Cloud Function baru. Anda dapat mempelajari lebih lanjut peluncuran bertahap dalam 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 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 Function Anda di masa mendatang tidak menerima traffic apa pun. Secara default, Cloud Functions menetapkan 100% traffic ke revisi dengan tanda latest. Dengan menentukan secara manual bahwa revisi beige saat ini harus menerima semua traffic, revisi dengan tanda 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 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 memanggil layanan
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
Anda akan melihat warna krem, meskipun revisi yang di-deploy terakhir adalah lavender.
<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 menyajikan traffic 0%
Misalkan Anda telah memverifikasi bahwa revisi Anda berhasil di-deploy dan menayangkan 0% traffic. 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. Dengan pemberian tag, Anda dapat 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 terkaitnya.
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 melakukan curl pada revisi ini secara langsung
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET <DIRECT_REVISION_URL>
dan lihat warna lavender di 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 mengirimkan 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% sebagai gantinya.
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
Jika sudah siap meluncurkan warna lavender sepenuhnya, Anda dapat menyetel warna lavender ke 100% untuk menggantikan warna krem.
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=100
dan sekarang saat Anda membuka atau melakukan curl pada URL layanan fungsi gradual-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
Misalkan, Anda telah menerima {i>feedback<i} UX awal yang menunjukkan bahwa pelanggan lebih menyukai warna krem daripada lavender, dan Anda perlu mengembalikan 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 melakukan curl atau membuka endpoint URL fungsi,
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
Anda akan melihat warna krem ditampilkan.
<html><body style="background-color:beige;"><div><p>Hello gradual-rollouts-gcf-00001-hos</p></div></body></html>
Anda dapat mempelajari lebih lanjut rollback dalam 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 biaya yang tidak disengaja (misalnya, jika fungsi Cloud Run ini tidak sengaja dipanggil lebih banyak daripada alokasi pemanggilan Cloud Function bulanan Anda di tingkat 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 Konsol Cloud di https://console.cloud.google.com/functions/, lalu 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/, lalu hapus fungsi yang Anda buat dalam codelab ini.
Jika Anda 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.