1. מבוא
סקירה כללית
גרסאות Cloud Run מאפשרות לכם לציין אילו גרסאות צריכות לקבל תנועה ואיזה אחוז מהתנועה צריך להישלח לכל גרסה. התכונה 'גרסאות' מאפשרת לחזור לגרסה קודמת, להשיק גרסה בהדרגה ולפצל את התנועה בין כמה גרסאות.
בשיעור הזה תלמדו איך להשתמש בגרסאות כדי לנהל את התנועה לשירות Cloud Run. מידע נוסף על עדכונים זמין במאמרי העזרה של Cloud Run.
מה תלמדו
- איך לפצל את התנועה בין שתי גרסאות או יותר של שירות Cloud Run
- איך משיקים גרסה חדשה בהדרגה
- איך חוזרים לגרסה קודמת
2. הגדרה ודרישות
דרישות מוקדמות
- אתם מחוברים ל-Cloud Console.
- כבר פרסתם שירות Cloud Run. לדוגמה, אפשר לפעול לפי השלבים במאמר בנושא פריסת שירות Cloud Run כדי להתחיל.
הגדרה של משתני סביבה
אתם יכולים להגדיר משתני סביבה שישמשו אתכם לאורך כל ה-codelab הזה.
PROJECT_ID=YOUR-PROJECT-ID
REGION=YOUR_REGION
BG_COLOR=darkseagreen
SERVICE_NAME=traffic-revisions-color
AR_REPO=traffic-revisions-color-repo
יצירת מאגר Artifact Registry לשירות
gcloud artifacts repositories create $AR_REPO \
--repository-format=docker \
--location=$REGION \
--description="codelab for finetuning using CR jobs" \
--project=$PROJECT_ID
3. חלוקת התנועה
בדוגמה הזו מוסבר איך ליצור שירות Cloud Run שקורא משתנה סביבה של צבע ומגיב עם שם הגרסה באמצעות צבע הרקע הזה.
למרות שב-Codelab הזה נעשה שימוש ב-Python, אפשר להשתמש בכל זמן ריצה.
הגדרה של משתני סביבה
אתם יכולים להגדיר משתני סביבה שישמשו אתכם לאורך כל ה-codelab הזה.
REGION=<YOUR_REGION> PROJECT_ID=<YOUR-PROJECT-ID> BG_COLOR=darkseagreen SERVICE_NAME=traffic-revisions-color AR_REPO=traffic-revisions-color-repo
יצירת השירות
קודם יוצרים ספרייה לקוד המקור ועוברים לספרייה הזו.
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"]
יוצרים את קובץ האימג' ב-Artifact Registry באמצעות Buildpacks דרך Cloud Build:
gcloud builds submit \
--tag $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME
ופורסים את הגרסה הראשונה ב-Cloud Run עם הצבע darkseagreen:
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
כדי לפצל את התנועה בין הגרסאות deep sea green ו-tan, צריך למצוא את מזהי הגרסאות של שירותי 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 Service. במאמרי העזרה מפורט מידע נוסף על השקות הדרגתיות.
תשתמשו באותו קוד כמו בקטע הקודם, אבל תפרסו אותו כשירות חדש של 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 מגדיר 100% מהתנועה לגרסה עם הדגל latest. אם מציינים באופן ידני שהגרסה הנוכחית בצבע בז' צריכה לקבל את כל התנועה, הגרסה עם הדגל 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% מהתנועה. למרות שהיא עברה את בדיקות התקינות, עדיין כדאי לוודא שהגרסה הזו משתמשת בצבע הרקע לבנדר.
כדי לבדוק את הגרסה הסגולה, אפשר להוסיף תג לגרסה הזו. תיוג מאפשר לכם לבדוק ישירות את הגרסה החדשה בכתובת URL ספציפית, בלי להציג תנועה.
קודם כל, צריך להשיג את כתובת ה-URL של התמונה של הגרסה האחרונה (שהיא בצבע לבנדר).
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
עכשיו, כשתיכנסו לכתובת ה-URL הספציפית של הגרסה הזו, תראו את הצבע לבנדר.
הגדלה הדרגתית של נפח התנועה
עכשיו אפשר להתחיל לשלוח תנועה לגרסה של lavender. בדוגמה הבאה אפשר לראות איך שולחים 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. מעולה!
כל הכבוד, סיימתם את ה-Codelab!
מומלץ לעיין במסמכי התיעוד בנושא השקות, חזרה לגרסה קודמת והעברת תנועה
מה נכלל
- איך לפצל את התנועה בין שתי גרסאות או יותר של שירות Cloud Run
- איך משיקים גרסה חדשה בהדרגה
- איך חוזרים לגרסה קודמת
7. הסרת המשאבים
כדי להימנע מחיובים לא מכוונים (לדוגמה, אם פונקציית Cloud Run הזו מופעלת בטעות יותר פעמים מההקצאה החודשית של הפעלות Cloud Run בחבילה ללא תשלום), אפשר למחוק את שירות Cloud Run או את הפרויקט שיצרתם בשלב 2.
כדי למחוק שירות Cloud Run, נכנסים ל-Cloud Run ב-Cloud Console בכתובת https://console.cloud.google.com/run/ ומוחקים את הפונקציות שיצרתם ב-codelab הזה.
אם אתם רוצים למחוק את הפרויקט כולו, אתם יכולים להיכנס לכתובת https://console.cloud.google.com/cloud-resource-manager, לבחור את הפרויקט שיצרתם בשלב 2 וללחוץ על 'מחיקה'. אם תמחקו את הפרויקט, תצטרכו לשנות את הפרויקטים ב-Cloud SDK. כדי לראות את רשימת כל הפרויקטים הזמינים, מריצים את הפקודה gcloud projects list.