Trafik Bölme, Kademeli Kullanıma Sunma ve Geri Alma için Cloud Run'da düzeltmeleri kullanma

Trafik Bölme, Kademeli Kullanıma Sunma ve Geri Alma için Cloud Run'da düzeltmeleri kullanma

Bu codelab hakkında

subjectSon güncelleme Nis 5, 2025
account_circleBir Google çalışanı tarafından yazılmıştır

1. Giriş

Genel Bakış

Cloud Run düzeltmeleri, hangi düzeltmelerin trafik alması gerektiğini ve her düzeltmeye gönderilecek trafik yüzdesini belirtmenize olanak tanır. Düzeltmeler, önceki bir sürüme geri dönmenize, bir sürümü kademeli olarak kullanıma sunmanıza ve trafiği birden fazla sürüm arasında bölmenize olanak tanır.

Bu codelab'lerde, Cloud Run hizmetinize gelen trafiği yönetmek için düzeltmeleri nasıl kullanacağınız gösterilmektedir. Düzeltmeler hakkında daha fazla bilgiyi Cloud Run dokümanlarında bulabilirsiniz.

Neler öğreneceksiniz?

  • Cloud Run hizmeti için trafiği iki veya daha fazla revizyon arasında bölme
  • Yeni bir düzeltmeyi kademeli olarak kullanıma sunma
  • Önceki bir düzeltmeye geri dönme

2. Kurulum ve Gereksinimler

Ön koşullar

  • Cloud Console'a giriş yapmış olmanız gerekir.
  • Daha önce bir Cloud Run hizmeti dağıttıysanız. Örneğin, başlamak için Cloud Run hizmeti dağıtma adımlarını uygulayabilirsiniz.

Ortam Değişkenlerini Ayarlama

Bu codelab boyunca kullanılacak ortam değişkenlerini ayarlayabilirsiniz.

PROJECT_ID=YOUR-PROJECT-ID
REGION
=YOUR_REGION

BG_COLOR
=darkseagreen
SERVICE_NAME
=traffic-revisions-color
AR_REPO
=traffic-revisions-color-repo

Hizmet için bir Artifact Registry deposu oluşturun

gcloud artifacts repositories create $AR_REPO \
   
--repository-format=docker \
   
--location=$REGION \
   
--description="codelab for finetuning using CR jobs" \
   
--project=$PROJECT_ID

3. Trafiği Bölme

Bu örnekte, bir renk ortam değişkenini okuyan ve bu arka plan rengini kullanarak düzeltme adını döndüren bir Cloud Run hizmetinin nasıl oluşturulacağı gösterilmektedir.

Bu kod laboratuvarında Python kullanılsa da istediğiniz çalışma zamanını kullanabilirsiniz.

Ortam Değişkenlerini Ayarlama

Bu codelab boyunca kullanılacak ortam değişkenlerini ayarlayabilirsiniz.

REGION=<YOUR_REGION>
PROJECT_ID=<YOUR-PROJECT-ID>
BG_COLOR=darkseagreen
SERVICE_NAME=traffic-revisions-color
AR_REPO=traffic-revisions-color-repo

Hizmeti oluşturun

Öncelikle kaynak kod için bir dizin oluşturun ve cd komutunu kullanarak bu dizine gidin.

mkdir traffic-revisions-codelab && cd $_

Ardından, aşağıdaki içeriği içeren bir main.py dosyası oluşturun:

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)

Ardından, aşağıdaki içeriği içeren bir requirements.txt dosyası oluşturun:

Flask>=2.0.0
gunicorn>=20.0.0

Son olarak 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"]

Cloud Build'i kullanarak Buildpacks'i kullanarak Artifact Registry'de görüntü oluşturun:

gcloud builds submit \
   
--tag $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME

İlk revizyonu koyu deniz yeşili renkle Cloud Run'a dağıtın:

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

Hizmeti test etmek için uç noktayı doğrudan web tarayıcınızda açarak arka plan rengini koyu deniz yeşili olarak görebilirsiniz.

Şimdi, açık kahverengi arka plan rengine sahip ikinci bir düzeltme yayınlayın.

# 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

Artık web sitesini yenilediğinizde ten rengi arka plan rengini görürsünüz.

Trafiği 50-50 bölün

Trafiği koyu deniz yeşili ve ten rengi düzeltmeler arasında bölmek için temel Cloud Run hizmetlerinin düzeltme kimliklerini bulmanız gerekir. Düzeltme kimliklerini görmek için şu komutu çalıştırın:

gcloud run revisions list --service $SERVICE_NAME \
  --region $REGION --format 'value(REVISION)'

Aşağıdakine benzer sonuçlar görürsünüz.

traffic-revisions-color-00003-qoq
traffic-revisions-color-00002-zag

Düzeltmelerinizle birlikte aşağıdaki komutu çalıştırarak trafiği iki düzeltme arasında eşit olarak bölebilirsiniz:

gcloud run services update-traffic $SERVICE_NAME \
  --region $REGION \
  --to-revisions YOUR_REVISION_1=50,YOUR_REVISION_2=50

Trafiği bölme özelliğini test etme

Tarayıcınızdaki sayfayı yenileyerek hizmeti test edebilirsiniz.

Zamanların yarısında koyu deniz yeşili düzeltmeyi, diğer yarısında ise ten rengi düzeltmeyi görürsünüz. Çıktıda düzeltme adını da görürsünüz (ör.

<html><body style="background-color:tan;"><div><p>Hello traffic-revisions-color-00003-qoq</p></div></body></html>

4. Kademeli kullanıma sunma

Bu bölümde, yeni bir Cloud Service revizyonunda değişiklikleri nasıl kademeli olarak kullanıma sunacağınızı öğreneceksiniz. Kademeli kullanıma sunma hakkında daha fazla bilgiyi dokümanlar bölümünde bulabilirsiniz.

Önceki bölümdekiyle aynı kodu kullanacak ancak yeni bir Cloud Run hizmeti olarak dağıtacaksınız.

Öncelikle arka plan rengini beige olarak ayarlayın ve işlevi gradual-rollouts-colors adıyla dağıtın.

Bir Cloud Run işlevini doğrudan Cloud Run'a dağıtmak için aşağıdaki komutu çalıştırın:

# 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

Şimdi, arka plan rengi leylak olan yeni bir düzeltmeyi kademeli olarak kullanıma sunmak istediğimizi varsayalım.

Öncelikle, mevcut düzeltmeyi% 100 trafik alacak şekilde ayarlayalım. Bu sayede, gelecekteki düzeltmeleriniz trafik almaz. Cloud Run varsayılan olarak latest işaretli düzeltmeye% 100 trafik ayarlar. Mevcut bej düzeltmenin tüm trafiği alması gerektiğini manuel olarak belirterek latest işaretli düzeltme artık% 100 trafik almaz. Belgelere göz atın.

# 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

Traffic: 100% radual-rollouts-colors-00001-yox

Artık trafik almayan yeni bir düzeltme yayınlayabilirsiniz. Kod değişikliği yapmak yerine bu düzeltme için BG_COLOR ortam değişkenini güncelleyebilirsiniz.

Bir Cloud Run işlevini doğrudan Cloud Run'a dağıtmak için aşağıdaki komutu çalıştırın:

# 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

Artık tarayıcınızda web sitesini ziyaret ettiğinizde, en son dağıtılan düzeltme lavanta olsa bile bej rengini görürsünüz.

%0 trafik sunan bir düzeltmeyi test etme

Düzeltmenizin başarıyla dağıtıldığını ve% 0 trafik yayınladığını doğruladığınızı varsayalım. Durum denetimlerini geçmiş olsa da bu düzeltmenin lavanta arka plan rengini kullandığını doğrulamak istiyorsunuz.

Lavanta düzeltmesini test etmek için bu düzeltmeye etiket uygulayabilirsiniz. Etiketleme, trafiği yayınlamadan yeni düzeltmeyi belirli bir URL'de doğrudan test etmenizi sağlar.

Öncelikle, en son düzeltmenin resim URL'sini (lavanta) alın.

IMAGE_URL_LAVENDER=$(gcloud run services describe gradual-rollouts-colors --region $REGION --format 'value(IMAGE)')

Ardından bu resmi ilişkili rengi ile etiketleyin.

gcloud run deploy gradual-rollouts-colors --image $IMAGE_URL_LAVENDER --no-traffic --tag $BG_COLOR --region $REGION

Aşağıdakine benzer bir çıkış görürsünüz:

The revision can be reached directly at https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app

Artık söz konusu düzeltme URL'sini ziyaret ettiğinizde lavanta rengini görürsünüz.

Trafiği kademeli olarak artırma

Artık lavanta düzeltmesine trafik göndermeye başlayabilirsiniz. Aşağıdaki örnekte, trafiğin% 1'inin lavender adresine nasıl gönderileceği gösterilmektedir.

gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=1

Trafiğin% 50'sini lavantaya göndermek için aynı komutu kullanabilirsiniz ancak bunun yerine% 50'yi belirtebilirsiniz.

gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=50

Her düzeltmenin ne kadar trafik aldığını gösteren bir liste görürsünüz.

Traffic:
  50% gradual-rollouts-colors-00001-hos
  50% gradual-rollouts-colors-00004-mum
        lavender: https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app

Lavanta rengini tam olarak kullanıma sunmaya hazır olduğunuzda, bejin yerini almak için lavanta rengini% 100 olarak ayarlayabilirsiniz.

gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=100

Artık web sitesini ziyaret ettiğinizde yalnızca lavanta göreceksiniz.

5. Geri alma sayısı

Müşterilerin lavanta yerine bej rengi tercih ettiğini belirten erken kullanıcı deneyimi geri bildirimleri geldiğini ve beje geri dönmeniz gerektiğini varsayalım.

Aşağıdaki komutu çalıştırarak önceki düzeltmeye (bej) geri dönebilirsiniz:

gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-revisions $BEIGE_REVISION=100

Artık web sitesini ziyaret ettiğinizde arka plan rengi olarak bej rengini görürsünüz.

Geri alma işlemleri hakkında daha fazla bilgiyi dokümanlarda bulabilirsiniz.

6. Tebrikler!

Codelab'i tamamladığınız için tebrikler.

Yayınlama, geri alma ve trafik taşıma ile ilgili dokümanları incelemenizi öneririz.

Ele aldığımız konular

  • Cloud Run hizmeti için trafiği iki veya daha fazla revizyon arasında bölme
  • Yeni bir düzeltmeyi kademeli olarak kullanıma sunma
  • Önceki bir düzeltmeye geri dönme

7. Temizleme

İstenmeyen ödemelerden kaçınmak için (örneğin, bu Cloud Run işlevi yanlışlıkla ücretsiz kademede aylık Cloud Run çağrısı kotanızdan daha fazla çağrılırsa) Cloud Run hizmetini veya 2. adımda oluşturduğunuz projeyi silebilirsiniz.

Bir Cloud Run hizmetini silmek için https://console.cloud.google.com/run/ adresindeki Cloud Console'da Cloud Run'a gidin ve bu kod laboratuvarında oluşturduğunuz işlevleri silin.

Projenin tamamını silmeyi seçerseniz https://console.cloud.google.com/cloud-resource-manager adresine gidip 2. adımda oluşturduğunuz projeyi seçin ve Sil'i tıklayın. Projeyi silerseniz Cloud SDK'nızdaki projeleri değiştirmeniz gerekir. gcloud projects list komutunu çalıştırarak mevcut tüm projelerin listesini görüntüleyebilirsiniz.