Menggunakan revisi di fungsi Cloud Run untuk Pemisahan Traffic, Peluncuran Bertahap, dan Rollback

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

  1. Dari Cloud Console, klik Aktifkan Cloud Shell d1264ca30785e435.png.

cb81e7c8e34bc8d.png

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.

d95252b003979716.png

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

7833d5e1c5d18f54.png

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.

  1. 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`
  1. 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.