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

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

इस कोडलैब (कोड बनाना सीखने के लिए ट्यूटोरियल) के बारे में जानकारी

subjectपिछली बार अप्रैल 5, 2025 को अपडेट किया गया
account_circleकिसी Googler ने लिखा है

1. परिचय

खास जानकारी

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

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

आपको क्या सीखने को मिलेगा

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

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

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

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

एनवायरमेंट वैरिएबल सेट करना

एनवायरमेंट वैरिएबल सेट किए जा सकते हैं. इनका इस्तेमाल इस कोडलैब में किया जाएगा.

PROJECT_ID=YOUR-PROJECT-ID
REGION
=YOUR_REGION

BG_COLOR
=darkseagreen
SERVICE_NAME
=traffic-revisions-color
AR_REPO
=traffic-revisions-color-repo

सेवा के लिए आर्टफ़ैक्ट रजिस्ट्री का डेटा स्टोर करने की जगह बनाना

gcloud artifacts repositories create $AR_REPO \
   
--repository-format=docker \
   
--location=$REGION \
   
--description="codelab for finetuning using CR jobs" \
   
--project=$PROJECT_ID

3. ट्रैफ़िक का बंटवारा

इस सैंपल में, ऐसी Cloud Run सेवा बनाने का तरीका बताया गया है जो कलर एनवायरमेंट वैरिएबल को पढ़ती है और उस बैकग्राउंड कलर का इस्तेमाल करके, रिविज़न के नाम के साथ जवाब देती है.

इस कोडलैब में Python का इस्तेमाल किया गया है. हालांकि, किसी भी रनटाइम का इस्तेमाल किया जा सकता है.

एनवायरमेंट वैरिएबल सेट करना

एनवायरमेंट वैरिएबल सेट किए जा सकते हैं. इनका इस्तेमाल इस कोडलैब में किया जाएगा.

REGION=<YOUR_REGION>
PROJECT_ID=<YOUR-PROJECT-ID>
BG_COLOR=darkseagreen
SERVICE_NAME=traffic-revisions-color
AR_REPO=traffic-revisions-color-repo

सेवा बनाना

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

mkdir traffic-revisions-codelab && cd $_

इसके बाद, यहां दिए गए कॉन्टेंट के साथ main.py फ़ाइल बनाएं:

import os
from flask import Flask, render_template_string

app = Flask(__name__)

TEMPLATE = """
<!doctype html>
<html lang="en">
<head>
    <title>Cloud Run Traffic Revisions</title>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 50vh;
            background-color: {{ bg_color }}; /* Set by environment variable */
            font-family: sans-serif;
        }
        .content {
            background-color: rgba(255, 255, 255, 0.8); /* Semi-transparent white background */
            padding: 2em;
            border-radius: 8px;
            text-align: center;
            box-shadow: 0 4px 8px rgba(0,0,0,0.1);
        }
    </style>
</head>
<body>
    <div class="content">
        <p>background color: <strong>{{ color_name }}</strong></p>
    </div>
</body>
</html>
"""

@app.route('/')
def main():
    """Serves the main page with a background color from the ENV."""
    # Get the color from the 'BG_COLOR' environment variable.
    # Default to 'white' if the variable is not set.
    color = os.environ.get('BG_COLOR', 'white').lower()

    return render_template_string(TEMPLATE, bg_color=color, color_name=color)

if __name__ == '__main__':
    port = int(os.environ.get('PORT', 8080))
    app.run(debug=True, host='0.0.0.0', port=port)

इसके बाद, यहां दिए गए कॉन्टेंट के साथ requirements.txt फ़ाइल बनाएं:

Flask>=2.0.0
gunicorn>=20.0.0

आखिर में, Dockerfile बनाएं

FROM python:3.12-slim

WORKDIR
/app

COPY requirements
.txt .

RUN pip install
--no-cache-dir -r requirements.txt

COPY
. .

EXPOSE
8080

ENV PYTHONPATH
/app

CMD
["gunicorn", "--bind", "0.0.0.0:8080", "main:app"]

Cloud Build का इस्तेमाल करके, Buildpack की मदद से Artifact Registry में इमेज बनाएं:

gcloud builds submit \
   
--tag $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME

इसके बाद, Cloud Run में पहला रिविज़न, डार्कसीग्रीन रंग में डिप्लॉय करें:

gcloud run deploy $SERVICE_NAME \
    --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
    --region $REGION \
    --allow-unauthenticated \
    --set-env-vars BG_COLOR=darkseagreen

सेवा की जांच करने के लिए, अपने वेब ब्राउज़र में सीधे एंडपॉइंट खोलें. इससे, आपको बैकग्राउंड का रंग डार्क सी ग्रीन दिखेगा.

अब टैन रंग के बैकग्राउंड के साथ दूसरा रिविज़न डिप्लॉय करें.

# update the env var
BG_COLOR=tan

gcloud run deploy $SERVICE_NAME \
    --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
    --region $REGION \
    --set-env-vars BG_COLOR=tan

अब वेबसाइट को रीफ़्रेश करने पर, आपको बैकग्राउंड का रंग टैन दिखेगा.

ट्रैफ़िक को 50-50 बांटना

डीप सी ग्रीन और टैन रिविज़न के बीच ट्रैफ़िक को बांटने के लिए, आपको Cloud Run की सेवाओं के रिविज़न आईडी ढूंढने होंगे. इस निर्देश को चलाकर, बदलाव के आईडी देखे जा सकते हैं:

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

आपको नीचे दिए गए नतीजों जैसे नतीजे दिखेंगे

traffic-revisions-color-00003-qoq
traffic-revisions-color-00002-zag

अपने बदलावों के साथ यह कमांड चलाकर, ट्रैफ़िक को दो बदलावों के बीच 50/50 बांटा जा सकता है:

gcloud run services update-traffic $SERVICE_NAME \
  --region $REGION \
  --to-revisions YOUR_REVISION_1=50,YOUR_REVISION_2=50

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

अपने ब्राउज़र में पेज को रीफ़्रेश करके, इस सेवा की जांच की जा सकती है.

आधे समय आपको डार्क सी ग्रीन रंग में बदलाव दिखेगा और आधे समय आपको टैन रंग में बदलाव दिखेगा. आपको आउटपुट में बदलाव का नाम भी दिखेगा, जैसे कि

<html><body style="background-color:tan;"><div><p>Hello traffic-revisions-color-00003-qoq</p></div></body></html>

4. धीरे-धीरे रोल आउट करना

इस सेक्शन में, आपको Cloud सेवा के नए वर्शन में बदलावों को धीरे-धीरे रोल आउट करने का तरीका पता चलेगा. धीरे-धीरे रोल आउट करने के बारे में ज़्यादा जानने के लिए, दस्तावेज़ पढ़ें.

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

सबसे पहले, बैकग्राउंड का रंग beige पर सेट करें और फ़ंक्शन को gradual-rollouts-colors नाम से डिप्लॉय करें.

Cloud Run फ़ंक्शन को सीधे Cloud Run पर डिप्लॉय करने के लिए, यह कमांड चलाएं:

# update the env var
BG_COLOR=beige

gcloud beta run deploy gradual-rollouts-colors \
      --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
      --region $REGION \
      --allow-unauthenticated \
      --update-env-vars BG_COLOR=$BG_COLOR

मान लें कि हमें बैकग्राउंड के रंग को लैवेंडर में बदलकर, धीरे-धीरे नया वर्शन रोल आउट करना है.

सबसे पहले, 100% ट्रैफ़िक पाने के लिए, मौजूदा रिविज़न को बेज पर सेट करें. इससे यह पक्का होगा कि आने वाले समय में किए गए बदलावों को कोई ट्रैफ़िक न मिले. डिफ़ॉल्ट रूप से, Cloud Run latest फ़्लैग वाले रिविज़न पर 100% ट्रैफ़िक सेट करता है. मैन्युअल रूप से यह बताने पर कि इस मौजूदा रिविज़न को पूरा ट्रैफ़िक मिलना चाहिए, latest फ़्लैग वाले रिविज़न को अब 100% ट्रैफ़िक नहीं मिलेगा. दस्तावेज़ देखें.

# get the revision name

BEIGE_REVISION=$(gcloud run revisions list --service gradual-rollouts-colors \
  --region $REGION --format 'value(REVISION)')

# now set 100% traffic to that revision

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

आपको Traffic: 100% radual-rollouts-colors-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-colors \
      --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
      --region $REGION \
      --allow-unauthenticated \
      --update-env-vars BG_COLOR=$BG_COLOR

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

ऐसे बदलाव की जांच करना जो 0% ट्रैफ़िक दिखा रहा है

मान लें कि आपने पुष्टि कर ली है कि आपका बदलाव डिप्लॉय हो गया है और वह 0% ट्रैफ़िक दिखा रहा है. हालांकि, यह जांच में पास हो गया है, लेकिन आपको इस बात की पुष्टि करनी है कि इस बदलाव में बैकग्राउंड के लिए लैवेंडर रंग का इस्तेमाल किया गया है.

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

सबसे पहले, उस नए वर्शन (जो लैवेंडर है) की इमेज का यूआरएल पाएं.

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

अब उस इमेज को उसके रंग से टैग करें.

gcloud run deploy gradual-rollouts-colors --image $IMAGE_URL_LAVENDER --no-traffic --tag $BG_COLOR --region $REGION

आपको इससे मिलता-जुलता आउटपुट दिखेगा:

The revision can be reached directly at https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app

अब उस बदलाव वाले यूआरएल पर जाने पर, आपको लैवेंडर रंग दिखेगा.

धीरे-धीरे बढ़ता ट्रैफ़िक

अब, लैवेंडर वर्शन पर ट्रैफ़िक भेजा जा सकता है. यहां दिए गए उदाहरण में, 1% ट्रैफ़िक को lavender पर भेजने का तरीका बताया गया है.

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

50% ट्रैफ़िक को lavender पर भेजने के लिए, उसी कमांड का इस्तेमाल किया जा सकता है. हालांकि, इसके लिए 50% की वैल्यू दें.

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

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

Traffic:
  50% gradual-rollouts-colors-00001-hos
  50% gradual-rollouts-colors-00004-mum
        lavender: https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app

जब आप लैवेंडर को पूरी तरह से रोल आउट करने के लिए तैयार हों, तो बेज को बदलने के लिए लैवेंडर को 100% पर सेट किया जा सकता है.

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

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

5. रोलबैक

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

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

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

अब जब वेबसाइट पर जाएं, तो आपको बैकग्राउंड के तौर पर बेज रंग दिखेगा.

दस्तावेज़ों में, रोलबैक के बारे में ज़्यादा जानें.

6. बधाई हो!

कोडलैब पूरा करने के लिए बधाई!

हमारा सुझाव है कि आप रोल आउट, रोलबैक, और ट्रैफ़िक माइग्रेशन से जुड़े दस्तावेज़ देखें

हमने क्या-क्या शामिल किया है

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

7. व्यवस्थित करें

अनजाने में होने वाले शुल्कों से बचने के लिए, Cloud Run सेवा को मिटाएं या दूसरे चरण में बनाया गया प्रोजेक्ट मिटाएं. ऐसा तब करना होगा, जब Cloud Run के इस फ़ंक्शन को बिना शुल्क के इस्तेमाल की सुविधा वाले टीयर में, हर महीने तय किए गए इस्तेमाल की सीमा से ज़्यादा बार इस्तेमाल किया गया हो.

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

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