Tentang codelab ini
1. Pengantar
Ringkasan
Dengan revisi Cloud Run, Anda dapat menentukan revisi mana yang akan menerima traffic dan persentase traffic yang akan dikirim ke setiap 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 layanan Cloud Run Anda. Anda dapat mempelajari revisi lebih lanjut di dokumentasi Cloud Run.
Yang akan Anda pelajari
- Cara membagi traffic antara dua revisi atau lebih untuk layanan 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 sebelumnya telah men-deploy layanan Cloud Run. Misalnya, Anda dapat mengikuti cara men-deploy layanan Cloud Run untuk memulai.
Menetapkan Variabel Lingkungan
Anda dapat menetapkan variabel lingkungan yang akan digunakan di seluruh codelab ini.
PROJECT_ID=YOUR-PROJECT-ID
REGION=YOUR_REGION
BG_COLOR=darkseagreen
SERVICE_NAME=traffic-revisions-color
AR_REPO=traffic-revisions-color-repo
Membuat repositori registry artefak untuk Layanan
gcloud artifacts repositories create $AR_REPO \
--repository-format=docker \
--location=$REGION \
--description="codelab for finetuning using CR jobs" \
--project=$PROJECT_ID
3. Pembagian Traffic
Contoh ini menunjukkan cara membuat layanan Cloud Run yang membaca variabel lingkungan warna dan merespons kembali dengan nama revisi menggunakan warna latar belakang tersebut.
Meskipun codelab ini menggunakan python, 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 SERVICE_NAME=traffic-revisions-color AR_REPO=traffic-revisions-color-repo
Membuat layanan
Pertama, buat direktori untuk kode sumber dan cd ke direktori tersebut.
mkdir traffic-revisions-codelab && cd $_
Kemudian, buat file main.py
dengan konten berikut:
import os from flask import Flask, render_template_string app = Flask(__name__) TEMPLATE = """ <!doctype html> <html lang="en"> <head> <title>Cloud Run Traffic Revisions</title> <style> body { display: flex; justify-content: center; align-items: center; min-height: 50vh; background-color: {{ bg_color }}; /* Set by environment variable */ font-family: sans-serif; } .content { background-color: rgba(255, 255, 255, 0.8); /* Semi-transparent white background */ padding: 2em; border-radius: 8px; text-align: center; box-shadow: 0 4px 8px rgba(0,0,0,0.1); } </style> </head> <body> <div class="content"> <p>background color: <strong>{{ color_name }}</strong></p> </div> </body> </html> """ @app.route('/') def main(): """Serves the main page with a background color from the ENV.""" # Get the color from the 'BG_COLOR' environment variable. # Default to 'white' if the variable is not set. color = os.environ.get('BG_COLOR', 'white').lower() return render_template_string(TEMPLATE, bg_color=color, color_name=color) if __name__ == '__main__': port = int(os.environ.get('PORT', 8080)) app.run(debug=True, host='0.0.0.0', port=port)
Selanjutnya, buat file requirements.txt
dengan konten berikut:
Flask>=2.0.0 gunicorn>=20.0.0
Terakhir, buat Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8080
ENV PYTHONPATH /app
CMD ["gunicorn", "--bind", "0.0.0.0:8080", "main:app"]
Buat image di Artifact Registry menggunakan Buildpack dengan menggunakan Cloud Build:
gcloud builds submit \
--tag $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME
Kemudian, deploy revisi pertama ke Cloud Run dengan warna darkseagreen:
gcloud run deploy $SERVICE_NAME \
--image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
--region $REGION \
--allow-unauthenticated \
--set-env-vars BG_COLOR=darkseagreen
Untuk menguji layanan, Anda dapat membuka endpoint langsung di browser web untuk melihat warna latar belakang sebagai hijau laut gelap.
Sekarang, deploy revisi kedua dengan warna latar belakang cokelat.
# update the env var BG_COLOR=tan gcloud run deploy $SERVICE_NAME \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \ --region $REGION \ --set-env-vars BG_COLOR=tan
Sekarang, saat memuat ulang situs, Anda akan melihat warna latar belakang cokelat.
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 $SERVICE_NAME \ --region $REGION --format 'value(REVISION)'
Anda akan melihat hasil yang mirip dengan yang ada di bawah
traffic-revisions-color-00003-qoq traffic-revisions-color-00002-zag
Anda dapat membagi traffic 50/50 di antara dua revisi dengan menjalankan perintah berikut dengan revisi Anda:
gcloud run services update-traffic $SERVICE_NAME \ --region $REGION \ --to-revisions YOUR_REVISION_1=50,YOUR_REVISION_2=50
Menguji pemisahan traffic
Anda dapat menguji layanan dengan memuat ulang halaman di browser.
Sebagian besar waktu, Anda akan melihat revisi hijau laut gelap dan, sebagian lainnya, Anda akan melihat revisi cokelat. Anda juga akan melihat nama revisi yang tercantum dalam output, misalnya
<html><body style="background-color:tan;"><div><p>Hello traffic-revisions-color-00003-qoq</p></div></body></html>
4. Peluncuran Bertahap
Di bagian ini, Anda akan mempelajari cara meluncurkan perubahan secara bertahap ke revisi Layanan Cloud baru. Anda dapat mempelajari lebih lanjut peluncuran bertahap di dokumentasi.
Anda akan menggunakan kode yang sama dengan bagian sebelumnya, tetapi akan men-deploy-nya sebagai layanan Cloud Run baru.
Pertama, tetapkan warna latar belakang ke beige
dan deploy fungsi dengan nama gradual-rollouts-colors
.
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-colors \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \ --region $REGION \ --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 revisi Anda di masa mendatang tidak menerima traffic apa pun. Secara default, Cloud Run 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-colors \ --region $REGION --format 'value(REVISION)') # now set 100% traffic to that revision gcloud run services update-traffic gradual-rollouts-colors \ --to-revisions=$BEIGE_REVISION=100 \ --region $REGION
Anda akan melihat output yang mirip dengan Traffic: 100% radual-rollouts-colors-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-colors \ --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \ --region $REGION \ --allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
dan sekarang saat Anda mengunjungi situs di browser, Anda akan melihat warna krem, meskipun lavender adalah revisi yang baru saja di-deploy.
Menguji Revisi yang menyalurkan traffic 0%
Misalkan Anda telah memverifikasi bahwa revisi 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. Pemberian tag memungkinkan Anda menguji revisi baru secara langsung di URL tertentu, tanpa menyalurkan traffic.
Pertama, dapatkan URL gambar untuk revisi terbaru tersebut (yaitu lavender).
IMAGE_URL_LAVENDER=$(gcloud run services describe gradual-rollouts-colors --region $REGION --format 'value(IMAGE)')
Sekarang, beri tag pada gambar tersebut dengan warna terkait.
gcloud run deploy gradual-rollouts-colors --image $IMAGE_URL_LAVENDER --no-traffic --tag $BG_COLOR --region $REGION
Anda akan melihat output yang mirip dengan berikut ini:
The revision can be reached directly at https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app
Sekarang, saat mengunjungi URL revisi tertentu tersebut, Anda akan melihat warna lavender.
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-colors --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-colors --region $REGION --to-tags lavender=50
Anda akan melihat daftar jumlah traffic yang diterima setiap revisi.
Traffic: 50% gradual-rollouts-colors-00001-hos 50% gradual-rollouts-colors-00004-mum lavender: https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app
Jika sudah siap untuk meluncurkan lavender sepenuhnya, Anda dapat menetapkan lavender ke 100% untuk menggantikan beige.
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=100
dan sekarang saat mengunjungi situs, Anda hanya akan melihat warna lavender.
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-colors --region $REGION --to-revisions $BEIGE_REVISION=100
dan sekarang saat mengunjungi situs, Anda akan melihat warna krem sebagai warna latar belakang.
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 membagi traffic antara dua revisi atau lebih untuk layanan 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 Run bulanan Anda di paket gratis), Anda dapat menghapus layanan Cloud Run atau menghapus project yang Anda buat di Langkah 2.
Untuk menghapus layanan Cloud Run, buka Cloud Run di Cloud Console di https://console.cloud.google.com/run/ dan hapus fungsi yang Anda buat dalam 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
.