ट्रैफ़िक विभाजन, धीरे-धीरे रोलआउट, और रोलबैक के लिए, Cloud Run फ़ंक्शन में बदलावों का इस्तेमाल करना

1. परिचय

खास जानकारी

Cloud Run फ़ंक्शन की मदद से, यह तय किया जा सकता है कि किन बदलावों को ट्रैफ़िक मिलना चाहिए. साथ ही, यह भी तय किया जा सकता है कि किसी बदलाव को कितना प्रतिशत ट्रैफ़िक मिलना चाहिए. बदलावों की मदद से, किसी बदलाव को पहले वर्शन पर वापस लाया जा सकता है. साथ ही, किसी बदलाव को धीरे-धीरे रोल आउट किया जा सकता है और ट्रैफ़िक को कई बदलावों के बीच बांटा जा सकता है.

इस कोडलैब में, आपको अपने Cloud Run फ़ंक्शन के ट्रैफ़िक को मैनेज करने के लिए, बदलावों का इस्तेमाल करने का तरीका बताया गया है. बदलावों के बारे में ज़्यादा जानने के लिए, Cloud Run के दस्तावेज़ देखें.

आपको इनके बारे में जानकारी मिलेगी

  • Cloud Run फ़ंक्शन के दो या उससे ज़्यादा रिविज़न के बीच ट्रैफ़िक को बांटने का तरीका
  • धीरे-धीरे नए वर्शन को रोल आउट करने का तरीका
  • किसी दस्तावेज़ के पिछले वर्शन पर वापस जाने का तरीका

2. सेटअप और ज़रूरी शर्तें

ज़रूरी शर्तें

  • आपने Cloud Console में लॉग इन किया हो.
  • आपने पहले भी Cloud Run फ़ंक्शन को डिप्लॉय किया हो. उदाहरण के लिए, शुरू करने के लिए, Cloud Run फ़ंक्शन को डिप्लॉय करने का तरीका अपनाएं.

Cloud Shell चालू करें

  1. Cloud Console में, Cloud Shell चालू करें d1264ca30785e435.png पर क्लिक करें.

cb81e7c8e34bc8d.png

अगर Cloud Shell पहली बार शुरू किया जा रहा है, तो आपको एक इंटरमीडियरी स्क्रीन दिखेगी. इसमें Cloud Shell के बारे में बताया गया होगा. अगर आपको इंटरमीडियरी स्क्रीन दिखती है, तो जारी रखें पर क्लिक करें.

d95252b003979716.png

Cloud Shell को प्रोवाइड करने और उससे कनेक्ट होने में सिर्फ़ कुछ मिनट लगेंगे.

7833d5e1c5d18f54.png

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल लोड होते हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराती है और Google Cloud में चलती है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में, ज़्यादातर काम ब्राउज़र से किया जा सकता है.

Cloud Shell से कनेक्ट होने के बाद, आपको यह दिखेगा कि आपने पुष्टि कर ली है और प्रोजेक्ट आपके प्रोजेक्ट आईडी पर सेट है.

  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. gcloud कमांड को आपके प्रोजेक्ट के बारे में पता है या नहीं, इसकी पुष्टि करने के लिए Cloud Shell में यह कमांड चलाएं:
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

फ़ंक्शन बनाना

सबसे पहले, सोर्स कोड के लिए एक डायरेक्ट्री बनाएं और उस डायरेक्ट्री में cd करें.

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

अगर आपको Cloud Functions के दूसरे जनरेशन के तौर पर डिप्लॉय करना है, तो नीचे दिए गए कमांड का इस्तेमाल करें:

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

फ़ंक्शन की जांच करने के लिए, एचटीएमएल में darkseagreen रंग देखने के लिए, मौजूदा एंडपॉइंट को कर्ल करें या बैकग्राउंड का रंग देखने के लिए, सीधे एंडपॉइंट पर जाने के लिए अपने ब्राउज़र का इस्तेमाल करें.

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

अगर आपको Cloud Functions के दूसरे जनरेशन के तौर पर डिप्लॉय करना है, तो नीचे दिए गए कमांड का इस्तेमाल करें:

# 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

ट्रैफ़िक के बंटवारे की जांच करना

फ़ंक्शन की जांच करने के लिए, उसके सार्वजनिक यूआरएल पर जाएं. इसके लिए, 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 फ़ंक्शन के नए वर्शन में बदलावों को धीरे-धीरे रोल आउट करने का तरीका पता चलेगा. धीरे-धीरे रोल आउट करने के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.

आपको पिछले सेक्शन में इस्तेमाल किए गए कोड का ही इस्तेमाल करना होगा. हालांकि, आपको इसे नए Cloud फ़ंक्शन के तौर पर डिप्लॉय करना होगा.

सबसे पहले, बैकग्राउंड का रंग 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

अगर आपको Cloud Functions के दूसरे जनरेशन के तौर पर डिप्लॉय करना है, तो नीचे दिए गए कमांड का इस्तेमाल करें:

# 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 Functions latest फ़्लैग वाले रिविज़न पर 100% ट्रैफ़िक सेट करता है. मैन्युअल रूप से यह बताने पर कि इस मौजूदा रिविज़न को पूरा ट्रैफ़िक मिलना चाहिए, 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

अगर आपको Cloud Functions के दूसरे जनरेशन के तौर पर डिप्लॉय करना है, तो नीचे दिए गए कमांड का इस्तेमाल करें:

# 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

अब gradual-rollouts-gcf फ़ंक्शन का इस्तेमाल करने के लिए, SERVICE_URL एनवायरमेंट वैरिएबल को अपडेट करें

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% ट्रैफ़िक दिखा रहा है. हालांकि, यह जांच में पास हो गया है, लेकिन आपको अब भी इस बात की पुष्टि करनी है कि इस बदलाव में बैकग्राउंड के लिए लैवेंडर रंग का इस्तेमाल किया गया है.

लैवेंडर वर्शन की जांच करने के लिए, उस वर्शन पर टैग लागू करें. टैगिंग की मदद से, किसी खास यूआरएल पर नए वर्शन की जांच सीधे तौर पर की जा सकती है. इसके लिए, ट्रैफ़िक भेजने की ज़रूरत नहीं होती.

सबसे पहले, उस बदलाव के लिए इमेज का यूआरएल पाएं.

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% ट्रैफ़िक को lavender पर भेजने का तरीका बताया गया है.

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

50% ट्रैफ़िक को lavender पर भेजने के लिए, उसी कमांड का इस्तेमाल किया जा सकता है. हालांकि, इसके लिए 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

अब जब 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. रोलबैक

मान लें कि यूज़र एक्सपीरियंस से जुड़ा शुरुआती सुझाव या राय मिलती है, जिसमें बताया गया है कि ग्राहक बेज रंग को पसंद करते हैं, न कि लैवेंडर रंग को. ऐसे में, आपको बेज रंग पर वापस जाना होगा.

इस निर्देश को चलाकर, पिछले वर्शन (बेज) पर वापस जाया जा सकता है.

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

और अब जब आपका कर्ल या फ़ंक्शन यूआरएल एंडपॉइंट पर जाता है,

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 फ़ंक्शन को इस्तेमाल किया गया हो.

Cloud Run में डिप्लॉय किए गए किसी फ़ंक्शन को मिटाने के लिए, Cloud Console में Cloud Run पर जाएं. इसके लिए, https://console.cloud.google.com/functions/ पर जाएं और इस कोडलैब में बनाए गए फ़ंक्शन मिटाएं.

दूसरे जनरेशन के फ़ंक्शन के तौर पर डिप्लॉय किए गए Cloud Run फ़ंक्शन मिटाने के लिए, https://console.cloud.google.com/functions/ पर Cloud Console में Cloud Functions पर जाएं और इस कोडलैब में बनाए गए फ़ंक्शन मिटाएं.

अगर आपको पूरा प्रोजेक्ट मिटाना है, तो https://console.cloud.google.com/cloud-resource-manager पर जाएं. इसके बाद, दूसरे चरण में बनाया गया प्रोजेक्ट चुनें और 'मिटाएं' को चुनें. प्रोजेक्ट मिटाने पर, आपको अपने Cloud SDK में प्रोजेक्ट बदलने होंगे. gcloud projects list चलाकर, सभी उपलब्ध प्रोजेक्ट की सूची देखी जा सकती है.