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