استفاده از ویرایش‌ها در عملکردهای Cloud Run برای تقسیم ترافیک، انتشار تدریجی و بازگشت

1. مقدمه

نمای کلی

توابع Cloud Run به شما این امکان را می دهد که مشخص کنید کدام ویرایش ها باید ترافیک دریافت کنند و درصد ترافیکی را که توسط یک ویرایش دریافت می شود را مشخص کنید. Revisions به شما امکان می‌دهد به یک نسخه قبلی برگردید، به تدریج یک ویرایش را منتشر کنید و ترافیک را بین چندین ویرایش تقسیم کنید.

این کدها به شما نشان می‌دهند که چگونه از ویرایش‌ها برای مدیریت ترافیک عملکردهای Cloud Run خود استفاده کنید. می‌توانید در مستندات Cloud Run درباره ویرایش‌ها بیشتر بیاموزید.

چیزی که یاد خواهید گرفت

  • نحوه تقسیم ترافیک بین دو یا چند نسخه برای یک عملکرد Cloud Run
  • چگونه یک ویرایش جدید را به تدریج ارائه کنیم
  • نحوه بازگشت به نسخه قبلی

2. راه اندازی و الزامات

پیش نیازها

  • شما به کنسول Cloud وارد شده اید.
  • شما قبلاً یک تابع Cloud Run را مستقر کرده اید. برای مثال، می‌توانید برای شروع کار ، تابع اجرای Cloud Run را دنبال کنید.

Cloud Shell را فعال کنید

  1. از Cloud Console، روی Activate Cloud Shell کلیک کنید d1264ca30785e435.png .

cb81e7c8e34bc8d.png

اگر این اولین باری است که Cloud Shell را راه اندازی می کنید، با یک صفحه میانی روبرو می شوید که آن را توصیف می کند. اگر با یک صفحه میانی مواجه شدید، روی Continue کلیک کنید.

d95252b003979716.png

تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.

7833d5e1c5d18f54.png

این ماشین مجازی با تمام ابزارهای توسعه مورد نیاز بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی ارائه می‌کند و در Google Cloud اجرا می‌شود، که عملکرد و احراز هویت شبکه را بسیار افزایش می‌دهد. بسیاری از کارهای شما، اگر نه همه، در این کد لبه با مرورگر قابل انجام است.

پس از اتصال به Cloud Shell، باید ببینید که احراز هویت شده اید و پروژه به ID پروژه شما تنظیم شده است.

  1. برای تایید احراز هویت، دستور زیر را در Cloud Shell اجرا کنید:
gcloud auth list

خروجی فرمان

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. دستور زیر را در Cloud Shell اجرا کنید تا تأیید کنید که دستور gcloud از پروژه شما اطلاع دارد:
gcloud config list project

خروجی فرمان

[core]
project = <PROJECT_ID>

اگر اینطور نیست، می توانید آن را با این دستور تنظیم کنید:

gcloud config set project <PROJECT_ID>

خروجی فرمان

Updated property [core/project].

3. تقسیم ترافیک

این نمونه به شما نشان می‌دهد که چگونه می‌توانید تابعی ایجاد کنید که متغیر محیط رنگی را بخواند و با استفاده از آن رنگ پس‌زمینه با نام ویرایش پاسخ دهد.

اگرچه این کد لبه از node.js استفاده می کند، اما می توانید از هر زمان اجرا استفاده کنید.

تنظیم متغیرهای محیطی

می توانید متغیرهای محیطی را تنظیم کنید که در سراسر این کد لبه مورد استفاده قرار می گیرند.

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

تابع را ایجاد کنید

ابتدا یک دایرکتوری برای کد منبع و سی دی در آن دایرکتوری ایجاد کنید.

mkdir revisions-gcf-codelab && cd $_

سپس یک فایل package.json با محتوای زیر ایجاد کنید:

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

سپس یک فایل منبع index.js با محتوای زیر ایجاد کنید:

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

برای استقرار یک تابع Cloud Run به طور مستقیم بر روی Cloud Run، دستور زیر را اجرا کنید:

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

اگر ترجیح می دهید به عنوان نسل دوم توابع ابری مستقر شوید، از دستور زیر استفاده کنید:

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

برای آزمایش عملکرد، می‌توانید نقطه پایانی موجود را بچرخانید تا رنگ سبز تیره را در html ببینید یا از مرورگر خود برای ضربه زدن مستقیم به نقطه پایانی برای دیدن رنگ پس‌زمینه استفاده کنید.

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

اکنون نسخه دوم را با رنگ پس‌زمینه قهوهای مایل به زرد اجرا کنید.

برای استقرار یک تابع Cloud Run به طور مستقیم بر روی Cloud Run، دستور زیر را اجرا کنید:

# 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

اگر ترجیح می دهید به عنوان نسل دوم توابع ابری مستقر شوید، از دستور زیر استفاده کنید:

# 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

حالا وقتی نقطه پایانی را فر می کنید، رنگ پس زمینه قهوه ای مایل به زرد را می بینید.

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

ترافیک را 50-50 تقسیم کنید

برای تقسیم ترافیک بین بازبینی‌های سبز و خرمایی دریای عمیق، باید شناسه‌های بازبینی سرویس‌های Cloud Run زیربنایی را پیدا کنید. با اجرای این دستور می توانید شناسه های ویرایش را مشاهده کنید:

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

شما باید نتایج مشابه موارد زیر را ببینید

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

با اجرای دستور زیر می توانید ترافیک را بین دو نسخه 50/50 تقسیم کنید:

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

تقسیم ترافیک را آزمایش کنید

می‌توانید عملکرد را با مراجعه به URL عمومی آن (چه به صورت curl یا مستقیماً در مرورگر) آزمایش کنید.

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

نیمی از مواقع، باید نسخه سبز تیره دریا و نیمی دیگر، بازبینی برنزه را ببینید. همچنین نام ویرایش را در خروجی مشاهده خواهید کرد، به عنوان مثال

<html><body style="background-color:tan;"><div><p>Hello traffic-splitting-gcf-00006-qoq</p></div></body></html>

4. عرضه تدریجی

در این بخش، نحوه اجرای تدریجی تغییرات را در یک ویرایش جدید Cloud Function خواهید آموخت. شما می توانید در مورد عرضه تدریجی در مستندات بیشتر بیاموزید.

شما از همان کد قسمت قبل استفاده خواهید کرد، اما آن را به عنوان یک Cloud Function جدید اجرا خواهید کرد.

ابتدا رنگ پس زمینه را روی beige تنظیم کنید و تابع را با نام gradual-rollouts-gcf اجرا کنید.

برای استقرار یک تابع Cloud Run به طور مستقیم بر روی Cloud Run، دستور زیر را اجرا کنید:

# 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

اگر ترجیح می دهید به عنوان نسل دوم توابع ابری مستقر شوید، از دستور زیر استفاده کنید:

# 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

حال فرض کنید می خواهیم به تدریج یک ویرایش جدید با رنگ پس زمینه اسطوخودوس ارائه کنیم.

ابتدا، اجازه دهید نسخه فعلی بژ را برای دریافت ترافیک 100٪ تنظیم کنیم. این اطمینان حاصل می کند که استقرارهای آینده Cloud Function شما هیچ ترافیکی دریافت نمی کند. به‌طور پیش‌فرض، Cloud Functions ترافیک 100% را روی نسخه با latest پرچم تنظیم می‌کند. با تعیین دستی اینکه این نسخه بژ نسخه فعلی باید تمام ترافیک را دریافت کند، نسخه با latest پرچم دیگر ترافیک 100٪ را دریافت نخواهد کرد. مستندات را ببینید.

# 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

خروجی مشابه Traffic: 100% gradual-rollouts-gcf2-00001-yox

اکنون می توانید یک ویرایش جدید را اجرا کنید که هیچ ترافیکی دریافت نخواهد کرد. به جای هر گونه تغییر کد، می توانید متغیر محیطی BG_COLOR را برای این ویرایش به روز کنید.

برای استقرار یک تابع Cloud Run به طور مستقیم بر روی Cloud Run، دستور زیر را اجرا کنید:

# 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

اگر ترجیح می دهید به عنوان نسل دوم توابع ابری مستقر شوید، از دستور زیر استفاده کنید:

# 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

اکنون متغیر محیطی SERVICE_URL را برای استفاده از تابع gradual-rollouts-gcf به روز کنید.

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

و حالا وقتی سرویس را حلقه می کنید

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

شما رنگ بژ را مشاهده خواهید کرد، حتی اگر اسطوخودوس اخیراً به کار گرفته شده باشد.

<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٪ ترافیک را ارائه می دهد

فرض کنید تأیید کرده اید که نسخه شما با موفقیت اجرا شده است و ترافیک 0٪ را ارائه می دهد. حتی اگر بررسی‌های سلامتی را پشت سر گذاشته باشد، همچنان می‌خواهید تأیید کنید که این نسخه از رنگ پس‌زمینه اسطوخودوس استفاده می‌کند.

برای آزمایش بازبینی اسطوخودوس، می‌توانید یک برچسب روی آن نسخه اعمال کنید . برچسب‌گذاری به شما امکان می‌دهد تا نسخه جدید را مستقیماً در یک URL خاص، بدون ارائه ترافیک، آزمایش کنید.

ابتدا URL تصویر را برای آن ویرایش دریافت کنید.

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

و حالا آن تصویر را با رنگ مرتبط آن تگ کنید.

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

خروجی مشابه زیر را خواهید دید:

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

اکنون می توانید این ویرایش را مستقیماً بچرخانید

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

و رنگ اسطوخودوس را در نتایج مشاهده کنید:

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

به تدریج افزایش ترافیک

اکنون، می توانید شروع به ارسال ترافیک به نسخه اسطوخودوس کنید. مثال زیر نحوه ارسال 1% ترافیک را به اسطوخودوس نشان می دهد.

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

برای ارسال 50 درصد ترافیک به اسطوخودوس، می توانید از همین دستور استفاده کنید، اما به جای آن 50 درصد را مشخص کنید.

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

شما باید فهرستی از میزان ترافیک دریافتی هر نسخه را مشاهده کنید.

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

هنگامی که آماده پخش کامل اسطوخودوس هستید، می توانید اسطوخودوس را روی 100% تنظیم کنید تا جایگزین رنگ بژ شود.

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

و اکنون وقتی URL سرویس تابع gradual-rollouts-gcf را ​​بازدید می‌کنید یا آن را پیچ می‌دهید،

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

شما فقط اسطوخودوس را خواهید دید.

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

5. بازگشت به عقب

فرض کنید بازخورد اولیه UX وارد شده است که نشان می دهد مشتریان رنگ بژ را به اسطوخودوس ترجیح می دهند و شما باید به رنگ بژ برگردید.

با اجرای این دستور می توانید به نسخه قبلی (بژ) برگردید.

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

و اکنون هنگامی که شما از تابع URL نقطه پایانی بازدید می کنید،

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

رنگ بژ برگشتی را خواهید دید.

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

می‌توانید در اسناد اطلاعات بیشتری درباره بازگشت به عقب بیاموزید.

6. تبریک!

برای تکمیل کد لبه تبریک می گویم!

توصیه می‌کنیم اسناد مربوط به عرضه‌ها، بازگشت‌ها و انتقال ترافیک را مرور کنید

آنچه را پوشش داده ایم

  • نحوه تقسیم ترافیک بین دو یا چند نسخه برای یک عملکرد Cloud Run
  • چگونه یک ویرایش جدید را به تدریج ارائه کنیم
  • نحوه بازگشت به نسخه قبلی

7. پاکسازی کنید

برای جلوگیری از هزینه‌های غیرعمدی، (مثلاً اگر این تابع Cloud Run سهواً بیشتر از تخصیص فراخوانی ماهانه Cloud Function در ردیف رایگان فراخوانی شود)، می‌توانید تابع Cloud Run را حذف کنید یا پروژه‌ای را که در مرحله 2 ایجاد کرده‌اید حذف کنید.

برای حذف یک تابع Cloud Run مستقر در Cloud Run، به Cloud Run در کنسول Cloud در آدرس https://console.cloud.google.com/functions/ بروید و توابعی را که در این Codelab ایجاد کرده اید حذف کنید.

برای حذف توابع Cloud Run که به‌عنوان توابع نسل دوم مستقر شده‌اند، به Cloud Functions در کنسول Cloud در https://console.cloud.google.com/functions/ بروید و توابعی را که در این لبه کد ایجاد کرده‌اید حذف کنید.

اگر تصمیم به حذف کل پروژه دارید، می‌توانید به https://console.cloud.google.com/cloud-resource-manager بروید، پروژه‌ای را که در مرحله ۲ ایجاد کرده‌اید انتخاب کنید و حذف را انتخاب کنید. اگر پروژه را حذف کنید، باید پروژه ها را در Cloud SDK خود تغییر دهید. با اجرای gcloud projects list می توانید لیست تمام پروژه های موجود را مشاهده کنید.