1. מבוא
סקירה כללית
פונקציות של Cloud Run מאפשרות לציין אילו גרסאות יקבלו תעבורת נתונים, ולציין את אחוזי תעבורת הנתונים שהגרסה הזו תקבל. תיקונים מאפשרים לך לחזור לגרסה קודמת, להשיק גרסה קודמת בהדרגה ולפצל את התנועה בין מספר גרסאות.
בשיעור הזה תלמדו איך להשתמש בגרסאות כדי לנהל תעבורת נתונים לפונקציות של Cloud Run. מידע נוסף על גרסאות קודמות זמין במסמכי התיעוד של Cloud Run.
מה תלמדו
- איך לפצל את התנועה בין שתי גרסאות או יותר של פונקציה ב-Cloud Run
- איך להשיק גרסה חדשה באופן הדרגתי
- איך חוזרים לגרסה קודמת
2. הגדרה ודרישות
דרישות מוקדמות
- אתם מחוברים למסוף Cloud.
- פרסתם בעבר פונקציה של Cloud Run. לדוגמה, תוכלו לפעול לפי ההוראות לפריסה של פונקציית Cloud Run כדי להתחיל.
הפעלת Cloud Shell
- במסוף Cloud, לוחצים על Activate Cloud Shell
.
אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים שמתוארת בו. אם הוצג לכם מסך ביניים, לוחצים על המשך.
תהליך ההקצאה וההתחברות ל-Cloud Shell אמור להימשך רק כמה רגעים.
במכונה הווירטואלית הזו משולבת כל כלי הפיתוח שדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. אם לא את כולן, ניתן לבצע חלק גדול מהעבודה ב-Codelab הזה באמצעות דפדפן.
אחרי שתתחברו ל-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`
- מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שהפקודה ב-gcloud יודעת על הפרויקט שלכם:
gcloud config list project
פלט הפקודה
[core] project = <PROJECT_ID>
אם לא, אפשר להגדיר אותו באמצעות הפקודה הבאה:
gcloud config set project <PROJECT_ID>
פלט הפקודה
Updated property [core/project].
3. חלוקת התנועה
בדוגמה הזו תלמדו איך ליצור פונקציה שקוראת משתנה סביבה של צבע ומחזירה את שם הגרסה באמצעות צבע הרקע הזה.
אמנם ה-codelab הזה משתמש ב-Node.js, אבל אפשר להשתמש בכל סביבת זמן ריצה.
הגדרת משתני סביבה
אתם יכולים להגדיר משתני סביבה שישמשו ב-Codelab הזה.
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
כדי לבדוק את הפונקציה, אפשר להריץ curl על נקודת הקצה הקיימת כדי לראות את הצבע darkseagreen ב-HTML, או להשתמש בדפדפן כדי להיכנס ישירות לנקודת הקצה כדי לראות את צבע הרקע.
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 של נקודת הקצה, מופיע צבע הרקע החום.
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
בדיקת חלוקת התנועה
אפשר לבדוק את הפונקציה על ידי כניסה לכתובת ה-URL הציבורית שלה (באמצעות 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 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 דור שני, תוכלו להשתמש בפקודה הבאה:
# 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
נניח שאנחנו רוצים להשיק בהדרגה גרסה חדשה עם צבע רקע לבנדר.
קודם כול, נגדיר שהגרסה הנוכחית (beige) תקבל 100% מהתנועה. כך תבטיחו שהפריסות העתידיות של הפונקציה של Cloud Functions לא יקבלו תנועה כלל. כברירת מחדל, Cloud Functions מגדיר 100% מהתנועה לגרסה עם הדגל latest
. כשמציינים ידנית שגרסת beige הנוכחית צריכה לקבל את כל התנועה, גרסת השגיאה עם הדגל 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
עכשיו מעדכנים את משתנה הסביבה 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% מהתנועה. למרות שהיא עברה בדיקות תקינות, עדיין מומלץ לוודא שבגרסה הזו נעשה שימוש בצבע הרקע לבנדר.
כדי לבדוק את הגרסה הקודמת של לבנדר, אפשר להחיל תג על הגרסה הקודמת. התיוג מאפשר לבדוק את הגרסה החדשה ישירות בכתובת URL ספציפית, בלי להציג מודעות לתנועה.
קודם צריך לקבל את כתובת ה-URL של התמונה לגרסה הזו.
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>
הגדלה הדרגתית של התנועה
עכשיו אפשר להתחיל לשלוח תנועה לגרסה lavender. בדוגמה הבאה מוסבר איך לשלוח 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
ועכשיו, כשמבקרים בכתובת ה-URL של שירות הפונקציה GRid-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 או נכנסים לנקודת הקצה של כתובת ה-URL של הפונקציה,
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. מעולה!
כל הכבוד על השלמת ה-Codelab!
מומלץ לעיין במסמכים בנושא השקות, החזרות לאחור והעברת תנועה.
מה עסקנו בו
- איך לפצל את התנועה בין שתי גרסאות או יותר של פונקציה ב-Cloud Run
- איך להשיק גרסה חדשה באופן הדרגתי
- איך חוזרים לגרסה קודמת
7. הסרת המשאבים
כדי להימנע מחיובים לא מכוונים (לדוגמה, אם הפונקציה הזו ב-Cloud Run מופעלת בטעות יותר פעמים מההקצאה החודשית שלכם להפעלות של Cloud Functions ברמה החינמית), אתם יכולים למחוק את הפונקציה ב-Cloud Run או למחוק את הפרויקט שיצרתם בשלב 2.
כדי למחוק פונקציה של Cloud Run שנפרסה ב-Cloud Run, נכנסים אל Cloud Run במסוף Cloud בכתובת https://console.cloud.google.com/functions/ ומוחקים את הפונקציות שיצרתם ב-Codelab הזה.
כדי למחוק את הפונקציות של Cloud Run שנפרסו כפונקציות של דור שני, נכנסים אל Cloud Functions במסוף Cloud בכתובת https://console.cloud.google.com/functions/ ומוחקים את הפונקציות שיצרתם ב-Codelab הזה.
אם בוחרים למחוק את הפרויקט כולו, אפשר לעבור אל https://console.cloud.google.com/cloud-resource-manager, לבחור את הפרויקט שיצרתם בשלב 2 ולבחור באפשרות Delete (מחיקה). אם תמחקו את הפרויקט, יהיה צריך לבצע שינויים בפרויקטים ב-Cloud SDK. כדי להציג את הרשימה של כל הפרויקטים הזמינים, אפשר להריץ את הפקודה gcloud projects list
.