1. परिचय
खास जानकारी
Cloud Run फ़ंक्शन की मदद से, यह तय किया जा सकता है कि किस वर्शन को ट्रैफ़िक मिलेगा. साथ ही, यह भी तय किया जा सकता है कि किसी वर्शन को कितना ट्रैफ़िक मिलेगा. बदलावों की मदद से, पिछले बदलाव पर वापस जाया जा सकता है, बदलाव को धीरे-धीरे रोल आउट किया जा सकता है, और ट्रैफ़िक को कई बदलावों के बीच बांटा जा सकता है.
इस कोडलैब में, Cloud Run फ़ंक्शन पर ट्रैफ़िक मैनेज करने के लिए, वर्शन का इस्तेमाल करने का तरीका बताया गया है. Cloud Run के दस्तावेज़ में जाकर, वर्शन के बारे में ज़्यादा जानें.
आपको क्या सीखने को मिलेगा
- Cloud Run फ़ंक्शन के लिए, दो या उससे ज़्यादा वर्शन के बीच ट्रैफ़िक को कैसे बांटा जाता है
- नए वर्शन को धीरे-धीरे रोल आउट करने का तरीका
- किसी पिछले वर्शन पर वापस जाने का तरीका
2. सेटअप और ज़रूरी शर्तें
ज़रूरी शर्तें
- आपने Cloud Console में लॉग इन किया हो.
- आपने पहले Cloud Run फ़ंक्शन को डिप्लॉय किया हो. उदाहरण के लिए, शुरू करने के लिए Cloud Run फ़ंक्शन को डिप्लॉय करने का तरीका देखें.
Cloud Shell चालू करें
- Cloud Console में, Cloud Shell चालू करें
पर क्लिक करें.

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

Cloud Shell से कनेक्ट होने में कुछ ही सेकंड लगेंगे.

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है, जो हमेशा बनी रहती है. साथ ही, यह Google Cloud में काम करता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में ज़्यादातर काम ब्राउज़र से किया जा सकता है.
Cloud Shell से कनेक्ट होने के बाद, आपको दिखेगा कि आपकी पुष्टि हो गई है और प्रोजेक्ट को आपके प्रोजेक्ट आईडी पर सेट कर दिया गया है.
- पुष्टि करें कि आपने 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`
- यह पुष्टि करने के लिए कि 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 2nd gen के तौर पर डिप्लॉय करना है, तो इस कमांड का इस्तेमाल करें:
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
फ़ंक्शन की जांच करने के लिए, मौजूदा एंडपॉइंट को कर्ल करके एचटीएमएल में डार्कसीग्रीन रंग देखा जा सकता है. इसके अलावा, बैकग्राउंड का रंग देखने के लिए, अपने ब्राउज़र का इस्तेमाल करके सीधे तौर पर एंडपॉइंट पर जाया जा सकता है.
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 2nd gen के तौर पर डिप्लॉय करना है, तो इस कमांड का इस्तेमाल करें:
# 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 -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 Functions के नए वर्शन में धीरे-धीरे बदलाव लागू करने का तरीका बताया गया है. दस्तावेज़ में जाकर, धीरे-धीरे रोल आउट करने के बारे में ज़्यादा जानें.
आपको पिछले सेक्शन में इस्तेमाल किए गए कोड का ही इस्तेमाल करना होगा. हालांकि, आपको इसे नई 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 2nd gen के तौर पर डिप्लॉय करना है, तो इस कमांड का इस्तेमाल करें:
# 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, 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 2nd gen के तौर पर डिप्लॉय करना है, तो इस कमांड का इस्तेमाल करें:
# 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% ट्रैफ़िक मिल रहा है. हालांकि, इसकी जांच हो चुकी है, लेकिन आपको अब भी यह पुष्टि करनी है कि इस बदलाव में लैवेंडर रंग का बैकग्राउंड इस्तेमाल किया जा रहा है.
लैवेंडर रंग के वर्शन को टेस्ट करने के लिए, उस वर्शन पर टैग लागू करें. टैग करने की सुविधा की मदद से, किसी यूआरएल पर सीधे तौर पर नए वर्शन की जांच की जा सकती है. इसके लिए, ट्रैफ़िक दिखाने की ज़रूरत नहीं होती.
सबसे पहले, उस वर्शन के लिए इमेज का यूआरएल पाएं.
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
अब जब 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 Functions के लिए तय की गई, हर महीने के लिए कॉल करने की संख्या से ज़्यादा बार कॉल किया जाता है), तो Cloud Run फ़ंक्शन को मिटा दें. इसके अलावा, चरण 2 में बनाए गए प्रोजेक्ट को भी मिटाया जा सकता है.
Cloud Run पर डिप्लॉय किए गए Cloud Run फ़ंक्शन को मिटाने के लिए, Cloud Console में Cloud Run पर जाएं. इसके लिए, https://console.cloud.google.com/functions/ पर जाएं. इसके बाद, इस कोडलैब में बनाए गए फ़ंक्शन मिटाएं.
दूसरी जनरेशन के फ़ंक्शन के तौर पर डिप्लॉय किए गए Cloud Run फ़ंक्शन मिटाने के लिए, Cloud Console में Cloud Functions पर जाएं. इसके लिए, https://console.cloud.google.com/functions/ पर जाएं. इसके बाद, इस कोडलैब में बनाए गए फ़ंक्शन मिटाएं.
अगर आपको पूरा प्रोजेक्ट मिटाना है, तो https://console.cloud.google.com/cloud-resource-manager पर जाएं. इसके बाद, दूसरे चरण में बनाया गया प्रोजेक्ट चुनें और मिटाएं को चुनें. प्रोजेक्ट मिटाने पर, आपको Cloud SDK में प्रोजेक्ट बदलने होंगे. gcloud projects list कमांड चलाकर, सभी उपलब्ध प्रोजेक्ट की सूची देखी जा सकती है.