Trafik Bölme, Kademeli Kullanıma Sunma ve Geri Alma İşlemleri için Cloud Run işlevlerindeki revizyonları kullanma

1. Giriş

Genel Bakış

Cloud Run işlevleri, hangi düzeltmelerin trafik alması gerektiğini ve bir düzeltme tarafından alınan trafik yüzdelerini 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 işlevlerinize 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 belgeleri'nde bulabilirsiniz.

Neler öğreneceksiniz?

  • Cloud Run işlevi için trafiği iki veya daha fazla düzeltme 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 Cloud Run işlevi dağıttıysanız Örneğin, başlamak için Cloud Run işlevi dağıtma adımlarını uygulayabilirsiniz.

Cloud Shell'i etkinleştirme

  1. Cloud Console'da Cloud Shell'i etkinleştir'i d1264ca30785e435.png tıklayın.

cb81e7c8e34bc8d.png

Cloud Shell'i ilk kez başlatıyorsanız Cloud Shell'in ne olduğunu açıklayan bir ara ekran gösterilir. Ara ekran gösterildiyse Devam'ı tıklayın.

d95252b003979716.png

Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.

7833d5e1c5d18f54.png

Bu sanal makinede, ihtiyaç duyulan tüm geliştirme araçları yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışır. Bu sayede ağ performansını ve kimlik doğrulamayı büyük ölçüde iyileştirir. Bu kod laboratuvarındaki çalışmanızın tamamı olmasa da büyük bir kısmı tarayıcıda yapılabilir.

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını görürsünüz.

  1. Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list

Komut çıkışı

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud komutunun projenizi bildiğini onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Değişiklik yapılmadıysa aşağıdaki komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

3. Trafiği Bölme

Bu örnekte, bir renk ortam değişkenini okuyan ve bu arka plan rengini kullanarak düzeltme adını içeren bir yanıt veren bir işlevin nasıl oluşturulacağı gösterilmektedir.

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

Ortam Değişkenlerini Ayarlama

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

REGION=<YOUR_REGION>
PROJECT_ID=<YOUR-PROJECT-ID>
BG_COLOR=darkseagreen

İşlevi oluşturma

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

mkdir revisions-gcf-codelab && cd $_

Ardından, aşağıdaki içeriğe sahip bir package.json dosyası oluşturun:

{
    "dependencies": {
        "@google-cloud/functions-framework": "^3.0.0"
    }
}

Sonra, aşağıdaki içeriğe sahip bir index.js kaynak dosyası oluşturun:

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>');
});

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

gcloud beta run deploy traffic-splitting-gcf \
      --source . \
      --function helloWorld \
      --region $REGION \
      --no-allow-unauthenticated \
      --set-env-vars BG_COLOR=$BG_COLOR

2. nesil Cloud Functions işlevi olarak dağıtım yapmayı tercih ederseniz şu komutu kullanın:

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

İşlevi test etmek için mevcut uç noktayı html'de darkseagreen rengini görmek üzere curl'leyebilir veya tarayıcınıza giderek uç noktayı doğrudan ziyaret ederek arka plan rengini görebilirsiniz.

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

Şimdi, koyu arka plan rengine sahip ikinci bir düzeltme 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=tan

gcloud beta run deploy traffic-splitting-gcf \
      --source . \
      --function helloWorld \
      --region $REGION \
      --no-allow-unauthenticated \
      --update-env-vars BG_COLOR=$BG_COLOR

2. nesil Cloud Functions olarak dağıtmayı tercih ediyorsanız aşağıdaki komutu kullanın:

# 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

Artık uç noktasını kıvırdığınızda soluk kahverengi arka plan rengini görürsünüz.

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL

Trafiği 50-50'ye 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. Şu komutu çalıştırarak düzeltme kimliklerini görebilirsiniz:

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

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

traffic-splitting-gcf-00003-qoq
traffic-splitting-gcf-00002-zag

Aşağıdaki komutu çalıştırarak iki düzeltme arasında trafiği 50/50 oranında bölebilirsiniz:

gcloud run services update-traffic traffic-splitting-gcf \
  --region $REGION \
  --to-revisions <REVISION1>=50,<REVISION2>=50

Trafiğin bölünmesini test edin

İşlevi, herkese açık URL'sini ziyaret ederek (curl ile veya doğrudan tarayıcıda) test edebilirsiniz.

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" $SERVICE_URL

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-splitting-gcf-00006-qoq</p></div></body></html>

4. Kademeli Kullanıma Sunma

Bu bölümde, değişiklikleri yeni bir Cloud Functions revizyonuna kademeli olarak nasıl 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ümde kullanılanla aynı kodu kullanacaksınız ancak bu kodu yeni bir Cloud Functions işlevi olarak dağıtacaksınız.

Öncelikle, arka plan rengini beige olarak ayarlayın ve gradual-rollouts-gcf adlı işlevi 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-gcf \
      --source . \
      --function helloWorld \
      --region $REGION \
      --no-allow-unauthenticated \
      --update-env-vars BG_COLOR=$BG_COLOR

2. nesil Cloud Functions işlevi olarak dağıtım yapmayı tercih ederseniz şu komutu kullanın:

# 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

Şimdi mor arka plan rengiyle yeni bir düzeltmeyi kademeli olarak kullanıma sunmak istediğinizi düşünelim.

Öncelikle, mevcut düzeltmeyi %100 trafik alacak şekilde bej olarak ayarlayalım. Bu işlem, gelecekteki Cloud Functions dağıtımlarınızın trafik almasını önler. Cloud Functions 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-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

Şuna benzer bir çıkış görürsünüz: Traffic: 100% gradual-rollouts-gcf2-00001-yox

Artık trafik almayan yeni bir düzeltme yayınlayabilirsiniz. Kod değişiklikleri 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-gcf \
      --source . \
      --function helloWorld \
      --region $REGION \
      --no-allow-unauthenticated \
      --update-env-vars BG_COLOR=$BG_COLOR

2. nesil Cloud Functions olarak dağıtmayı tercih ediyorsanız aşağıdaki komutu kullanın:

# 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

Şimdi SERVICE_URL ortam değişkenini gradual-rollouts-gcf işlevini kullanacak şekilde güncelleyin.

SERVICE_URL=$(gcloud run services describe gradual-rollouts-gcf --platform managed --region $REGION --format 'value(status.url)')

Şimdi de hizmeti curl'ye

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL

en son kullanılan düzeltme lavanta olsa da bej rengi görürsünüz.

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

%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, yeni düzeltmeyi trafik sunmadan belirli bir URL'de doğrudan test etmenize olanak tanır.

Öncelikle, söz konusu düzeltmenin resim URL'sini alın.

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

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

gcloud run deploy gradual-rollouts-gcf --image $IMAGE_URL --no-traffic --tag $BG_COLOR --region $REGION --no-allow-unauthenticated

Şuna benzer bir çıkış alırsınız:

The revision can be reached directly at https://lavender---gradual-rollouts-gcf-k6msmyp47q-lz.a.run.app

Artık bu düzeltmeyi doğrudan örebilirsiniz

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET <DIRECT_REVISION_URL>

ve sonuçlardaki eflatun rengini görebiliriz:

<html><body style="background-color:lavender;"><div><p>Hello from gradual-rollouts-gcf-24jan16-00003-xik using color lavender</p></div></body></html>

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-gcf --region $REGION --to-tags lavender=1

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

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

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

Traffic:
  50% gradual-rollouts-gcf-00001-hos
  50% gradual-rollouts-gcf-00004-mum
        lavender: https://lavender---gradual-rollouts-gcf-k6msmyp47q-uc.a.run.app

Lavantayı tamamen kullanıma sunmaya hazır olduğunuzda bej yerine lavantayı% 100 olarak ayarlayabilirsiniz.

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

ve şimdi gradual-rollouts-gcf işlev hizmet URL'sini ziyaret ettiğinizde veya curl işlemini yaptığınızda

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL

yalnızca lavanta görürsünüz.

<html><body style="background-color:lavender;"><div><p>Hello gradual-rollouts-gcf-00004-mum</p></div></body></html>

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.

Bu komutu çalıştırarak önceki düzeltmeye (bej) geri dönebilirsiniz.

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

ve artık curl'ünüz olduğunda veya işlev URL'sinin uç noktasını ziyaret ettiğinizde

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL

renk bej olacaktır.

<html><body style="background-color:beige;"><div><p>Hello gradual-rollouts-gcf-00001-hos</p></div></body></html>

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.

İşlediklerimiz

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

7. Temizleme

Yanlışlıkla yapılan ücretleri önlemek için (örneğin, bu Cloud Run işlevi yanlışlıkla ücretsiz katmandaki aylık Cloud Functions işlevi çağırma alanınızdan daha fazla kez çağrıldıysa) Cloud Run işlevini silebilir veya 2. adımda oluşturduğunuz projeyi silebilirsiniz.

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

2. nesil işlev olarak dağıtılan Cloud Run işlevlerini silmek için https://console.cloud.google.com/functions/ adresindeki Cloud Console'da Cloud Functions'e gidin ve bu kod laboratuvarında oluşturduğunuz işlevleri silin.

Projenin tamamını silmeyi tercih ederseniz https://console.cloud.google.com/cloud-resource-manager adresine gidip 2. adımda oluşturduğunuz projeyi, ardından Sil'i seçebilirsiniz. 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.