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.