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

1. Giriş

Genel Bakış

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

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

Neler öğreneceksiniz?

  • Cloud Run hizmetinde trafiği iki veya daha fazla düzeltme arasında bölme
  • Yeni bir düzeltmeyi kademeli olarak kullanıma sunma
  • Önceki 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ğıtmış olmanız gerekir. Ö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ıyla yanıt veren bir Cloud Run hizmetinin nasıl oluşturulacağı gösterilmektedir.

Bu codelab'de Python kullanılsa da herhangi bir ç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 kodu için bir dizin oluşturun ve bu dizine gidin.

mkdir traffic-revisions-codelab && cd $_

Ardından, aşağıdaki içeriğe sahip 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ğe sahip bir requirements.txt dosyası oluşturun:

Flask>=2.0.0
gunicorn>=20.0.0

Son olarak Dockerfile oluşturun.

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 Buildpack'ler ile Artifact Registry'de görüntüyü oluşturun:

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

Ardından, ilk revizyonu koyu deniz yeşili rengiyle 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 renginin koyu deniz yeşili olduğunu görebilirsiniz.

Şimdi de açık kahverengi arka plan rengiyle ikinci bir düzeltme dağıtı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 açık kahverengi arka plan rengini görürsünüz.

Trafiği 50/50 bölme

Trafiği koyu deniz yeşili ve açık kahverengi revizyonlar arasında bölmek için temel alınan Cloud Run hizmetlerinin revizyon kimliklerini bulmanız gerekir. Şu komutu çalıştırarak düzeltme kimliklerini görebilirsiniz:

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

Aşağıdaki komutu revizyonlarınızla birlikte çalıştırarak trafiği iki revizyon arasında 50/50 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ızda sayfayı yenileyerek hizmeti test edebilirsiniz.

Yenilemelerin yarısında koyu deniz yeşili, diğer yarısında ise açık kahverengi rengi görürsünüz. Ayrıca, çıktıda düzeltme adının listelendiğini de görürsünüz. Örneğin:

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

4. Aşamalı Sunumlar

Bu bölümde, değişiklikleri yeni bir Cloud Service revizyonuna kademeli olarak dağıtmayı öğreneceksiniz. Aşamalı kullanıma sunma hakkında daha fazla bilgiyi dokümanlarda bulabilirsiniz.

Önceki bölümdeki kodun aynısını kullanacak ancak bunu 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.

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 de arka plan rengi lavanta olan yeni bir revizyonu kademeli olarak kullanıma sunmak istediğimizi varsayalım.

Öncelikle, mevcut bej rengi revizyonun trafiğin% 100'ünü almasını sağlayalım. Bu sayede gelecekteki düzeltmelerinizin trafik almaması sağlanır. Cloud Run, varsayılan olarak trafiğin% 100'ünü latest işaretli düzeltmeye yönlendirir. Mevcut bej rengi düzeltmesinin tüm trafiği alacağını manuel olarak belirtirseniz 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 benzeri bir çıkış görürsünüz.

Artık trafik almayacak yeni bir revizyon dağıtabilirsiniz. Kodda herhangi bir değişiklik yapmak yerine bu düzeltme için BG_COLOR ortam değişkenini güncelleyebilirsiniz.

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

Şimdi tarayıcınızda web sitesini ziyaret ettiğinizde, en son dağıtılan düzeltme lavanta rengi olmasına rağmen bej rengini görürsünüz.

%0 trafik sunan bir düzeltmeyi test etme

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

Lavanta rengi düzeltmeyi test etmek için bu düzeltmeye bir 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 (lavanta rengi) resim URL'sini alın.

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

Şimdi bu resmi, ilişkili rengiyle 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öreceksiniz.

Trafiği kademeli olarak artırma

Artık lavanta revizyonuna trafik göndermeye başlayabilirsiniz. Aşağıdaki örnekte, trafiğin% 1'inin lavantaya 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 kullanabilir ancak% 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 tamamen kullanıma sunmaya hazır olduğunuzda bej rengini lavanta rengiyle değiştirmek için lavanta rengini% 100 olarak ayarlayabilirsiniz.

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

ve artık web sitesini ziyaret ettiğinizde yalnızca lavanta rengini göreceksiniz.

5. Geri alma sayısı

Erken kullanıcı deneyimi geri bildirimlerinin müşterilerin lavanta yerine beji tercih ettiğini gösterdiğini ve beje geri dönmeniz gerektiğini varsayalım.

Şu 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

Web sitesini ziyaret ettiğinizde arka plan rengi olarak beji görürsünüz.

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

6. Tebrikler!

Tebrikler, codelab'i tamamladınız.

Yeni sürüme geçiş, geri alma ve trafik taşıma ile ilgili dokümanları incelemenizi öneririz.

İşlediğimiz konular

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

7. Temizleme

Yanlışlıkla ücretlendirilmemek için (örneğin, bu Cloud Run işlevi ücretsiz katmandaki aylık Cloud Run çağırma tahsisinizden daha fazla sayıda çağrılırsa) Cloud Run hizmetini veya 2. adımda oluşturduğunuz projeyi silebilirsiniz.

Cloud Run hizmetini silmek için Cloud Console'da https://console.cloud.google.com/run/ adresine gidip bu codelab'de oluşturduğunuz işlevleri silin.

Projenin tamamını silmeyi tercih ederseniz https://console.cloud.google.com/cloud-resource-manager adresine gidebilir, 2. adımda oluşturduğunuz projeyi seçip Sil'i tıklayabilirsiniz. Projeyi silerseniz Cloud SDK'nızda projeleri değiştirmeniz gerekir. gcloud projects list komutunu çalıştırarak kullanılabilir tüm projelerin listesini görüntüleyebilirsiniz.