בדף הזה מוסבר איך להגדיר משתני סביבה לשירות Cloud Run באמצעות Google Cloud המסוף או gcloud.
אפשר להשתמש במשתני סביבה להגדרת שירותים, אבל אנחנו לא ממליצים להשתמש בהם לאחסון סודות כמו פרטי כניסה למסד נתונים או מפתחות API. ערכים רגישים צריכים להיות מאוחסנים מחוץ לקוד המקור ומחוץ למשתני הסביבה. כדי לאחסן סודות, מומלץ להשתמש ב-Secret Manager. כדי להגדיר שירותים לגישה לסודות שמאוחסנים ב-Secret Manager, ראו הגדרת סודות.
כל שינוי בהגדרות מוביל ליצירה של גרסה חדשה. גם גרסאות עתידיות יקבלו את הגדרת התצורה הזו באופן אוטומטי, אלא אם תבצעו עדכונים מפורשים כדי לשנות אותה.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להגדרה ולפריסה של שירותי Cloud Run, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
-
Cloud Run Developer (
roles/run.developer) בשירות Cloud Run -
משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בזהות השירות
אם אתם פורסים שירות או פונקציה מקוד מקור, אתם צריכים גם לקבל תפקידים נוספים בפרויקט ובחשבון השירות של Cloud Build.
רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run שלכם מתקשר עםGoogle Cloud ממשקי API, כמו ספריות לקוח ב-Cloud, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.
מספר מקסימלי של משתני סביבה ומגבלות
אפשר להגדיר עד 1,000 משתני סביבה לשירות Cloud Run.
האורך המקסימלי של משתנה הוא 32Kb.
הגדרת משתני סביבה לשירותים
אפשר להגדיר משתני סביבה לשירותים חדשים וקיימים. שימו לב שהדגל --set-env-vars הוא פעולה הרסנית שמוחקת משתני סביבה שהוגדרו בעבר ולא נכללים ברשימה החדשה של משתני הסביבה.
משתני הסביבה קשורים לגרסה ספציפית של שירות, והם לא גלויים לשירותים אחרים בפרויקט Google Cloud שלכם.
אפשר להגדיר משתני סביבה באמצעות מסוף Google Cloud , ה-CLI של gcloud או קובץ YAML כשיוצרים שירות חדש או פורסים עדכון חדש:
המסוף
נכנסים ל-Cloud Run במסוף Google Cloud :
בתפריט הניווט של Cloud Run, בוחרים באפשרות Services (שירותים) ולוחצים על Deploy container (פריסת קונטיינר) כדי להגדיר שירות חדש. אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על עריכה ופריסה של עדכון חדש.
אם אתם מגדירים שירות חדש, ממלאים את דף ההגדרות הראשוניות של השירות ואז לוחצים על Container(s), Volumes, Networking, Security (מאגרים, אמצעי אחסון, רשתות, אבטחה) כדי להרחיב את דף הגדרות השירות.
לוחצים על הכרטיסייה מאגר תגים.
- בכרטיסייה Variables & Secrets (משתנים וסודות), לוחצים על Add Variable (הוספת משתנה) כדי להוסיף משתנה חדש, ומציינים את השם שרוצים לתת למשתנה ואת הערך שלו בשדות Name (שם) ו-Value (ערך). מידע נוסף על הגדרת כמה משתני סביבה או על שימוש בתווי escape לתווים מיוחדים זמין במאמר הגדרת כמה משתני סביבה.
לוחצים על יצירה או על פריסה.
gcloud
כדי לציין משתני סביבה כשפורסים את השירות, משתמשים בדגל --set-env-vars:
gcloud run deploy SERVICE --image IMAGE_URL --set-env-vars KEY1=VALUE1,KEY2=VALUE2
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של השירות.
- KEY1=VALUE1,KEY2=VALUE2: רשימה מופרדת בפסיקים של שמות משתנים וערכים.
- IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
מידע נוסף על הגדרת כמה משתני סביבה או על שימוש בתווי escape לתווים מיוחדים זמין במאמר הגדרת כמה משתני סביבה.
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. כדי לעדכן שירות קיים, מורידים את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
מעדכנים את המאפיינים
nameו-valueבמאפייןenvבקטעcontainers::apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: name: REVISION spec: containers: - image: IMAGE env: - name: KEY-1 value: VALUE-1 - name: KEY-N value: VALUE-N
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של שירות Cloud Run.
- IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - KEY-1, VALUE-1: משתנה הסביבה והערך. אפשר להוסיף עוד משתנים וערכים לפי הצורך.
- REVISION עם שם חדש של גרסה או למחוק אותה (אם היא קיימת). אם מספקים שם חדש לגרסה, חובה שהוא יעמוד בקריטריונים הבאים:
- מתחיל ב-
SERVICE- - הוא מכיל רק אותיות קטנות, מספרים וגם
- - לא מסתיים ב-
- - לא חורג מ-63 תווים
- מתחיל ב-
יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
Terraform
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
מוסיפים את השורות הבאות למשאבgoogle_cloud_run_v2_service בקובץ התצורה של Terraform:המשאב google_cloud_run_v2_service שמופיע למעלה מגדיר את משתנה הסביבה foo לערך bar, ואת משתנה הסביבה baz לערך quux. מעדכנים את משתני הסביבה לפי הצורך.
הגדרת משתני סביבה כברירת מחדל במאגר התגים
אפשר להשתמש בהצהרה ENV בקובץ Dockerfile כדי להגדיר ערכי ברירת מחדל למשתני סביבה:
ENV KEY1=VALUE1,KEY2=VALUE2
סדר העדיפות: משתני מאגר תגים לעומת משתני שירות
אם מגדירים משתנה סביבה שמוגדר כברירת מחדל במאגר התגים וגם מגדירים משתנה סביבה עם אותו שם בשירות Cloud Run, הערך שמוגדר בשירות מקבל עדיפות.
הגדרת כמה משתני סביבה לשירותים
אפשר להגדיר כמה משתני סביבה באמצעות קובץ תצורה או הדגל --set-env-vars.
הגדרת כמה משתני סביבה באמצעות קובץ הגדרה
כדי להגדיר כמה משתני סביבה, משתמשים בקובץ .env או בקובץ YAML. מציינים את משתני הסביבה בתבנית הבאה:
קובץ .env
KEY-1=VALUE-1 KEY-2=VALUE-2 KEY-3=VALUE-3
מחליפים את KEY ואת VALUE בשמות ובערכים של משתנים.
לדוגמה, APP_NAME="My app".
קובץ YAML
KEY-1: VALUE-1 KEY-2: VALUE-2 KEY-3: VALUE-3
מחליפים את KEY ואת VALUE בשמות ובערכים של משתנים.
לדוגמה, APP_NAME: "My app".
כדי להגדיר את המשתנים האלה כשיוצרים שירות חדש או פורסים עדכון חדש, משתמשים במסוף Google Cloud או ב-CLI של gcloud:
המסוף
נכנסים ל-Cloud Run במסוף Google Cloud :
בתפריט הניווט של Cloud Run, בוחרים באפשרות Services (שירותים) ולוחצים על Deploy container (פריסת קונטיינר) כדי להגדיר שירות חדש. אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על עריכה ופריסה של עדכון חדש.
אם אתם מגדירים שירות חדש, ממלאים את דף ההגדרות הראשוניות של השירות ואז לוחצים על Container(s), Volumes, Networking, Security (מאגרים, אמצעי אחסון, רשתות, אבטחה) כדי להרחיב את דף הגדרות השירות.
לוחצים על הכרטיסייה מאגר תגים.
- בכרטיסייה Variables & Secrets (משתנים וסודות), לוחצים על Add Variable (הוספת משתנה) ומדביקים את התוכן של קובץ
.envאו קובץ YAML בשדה Name (שם). Cloud Run מאכלס אוטומטית את השדה Value ויוצר משתנים חדשים לכל צמד מפתח/ערך שמוגדר בקובץ.
- בכרטיסייה Variables & Secrets (משתנים וסודות), לוחצים על Add Variable (הוספת משתנה) ומדביקים את התוכן של קובץ
לוחצים על יצירה או על פריסה.
gcloud
כדי לציין כמה משתני סביבה מקובץ התצורה, מריצים את הפקודה הבאה:
gcloud run deploy SERVICE --image=IMAGE_URL --env-vars-file=ENV_FILE_PATH
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של שירות Cloud Run.
- IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - ENV_FILE_PATH: הנתיב לקובץ
.envאו לקובץ ה-YAML. לדוגמה,production.envאוconfig/production-variables.yaml.
הגדרת כמה משתני סביבה באמצעות הדגל --set-env-vars
אם יש לכם כמה משתני סביבה שלא ניתן לפרט בפורמט KEY1=VALUE1,KEY2=VALUE2, אפשר לחזור על האפשרות --set-env-vars כמה פעמים:
[...] --set-env-vars "KEY1=VALUE1" \ --set-env-vars "KEY2=VALUE2" \ --set-env-vars "KEY3=VALUE3"
תו בריחה (escape) לתווים של פסיקים
התו פסיק, משמש לפיצול משתני סביבה. לכן, אם משתנה הסביבה מכיל תווי פסיק כערכים, צריך להשתמש בתו בריחה כדי להגדיר תו מפריד שונה, למשל @:
--set-env-vars "^@^KEY1=value1,value2,value3@KEY2=..."
עדכון משתני סביבה לשירותים
אפשר לעדכן את משתני הסביבה של שירותים קיימים. זוהי גישה לא הרסנית שמשנה או מוסיפה משתני סביבה, אבל לא מוחקת משתני סביבה שהוגדרו בעבר.
המסוף
כדי לעדכן משתני סביבה באמצעות מסוף Google Cloud :
במסוף Google Cloud , נכנסים לדף Services של Cloud Run:
בוחרים את השירות מהרשימה ולוחצים על עריכה ופריסה של גרסה חדשה.
לוחצים על הכרטיסייה מאגר תגים.
בכרטיסייה משתנים וסודות, עורכים את השדות שם או ערך ולוחצים על סיום.
לוחצים על פריסה.
gcloud
כדי לעדכן משתני סביבה של שירות קיים, משתמשים בדגל --update-env-vars:
gcloud run services update SERVICE --update-env-vars KEY1=VALUE1,KEY2=VALUE2
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של השירות.
- KEY1=VALUE1,KEY2=VALUE2: רשימה מופרדת בפסיקים של שמות משתנים וערכים.
כדי לעדכן משתני סביבה של שירות קיים במספר אזורים, משתמשים בפקודה gcloud run multi-region-services update.
הצגת ההגדרות של משתני הסביבה
כדי לראות את ההגדרות הנוכחיות של משתני הסביבה בשירות Cloud Run:
המסוף
במסוף Google Cloud , נכנסים לדף Services של Cloud Run:
לוחצים על השירות שרוצים לראות את הפרטים שלו כדי לפתוח את הדף פרטי השירות.
לוחצים על הכרטיסייה עדכונים.
בחלונית הפרטים שמשמאל, ההגדרה של משתני הסביבה מופיעה בכרטיסייה מאגר תגים.
gcloud
משתמשים בפקודה הבאה:
gcloud run services describe SERVICE
מאתרים את ההגדרה של משתני הסביבה בתצורה שמוחזרת.
מחיקת משתני סביבה
אפשר למחוק משתני סביבה של שירותים קיימים.
המסוף
כדי למחוק משתני סביבה באמצעות מסוף Google Cloud :
במסוף Google Cloud , נכנסים לדף Services של Cloud Run:
בוחרים את השירות מהרשימה ולוחצים על עריכה ופריסה של גרסה חדשה.
לוחצים על הכרטיסייה מאגר תגים.
בכרטיסייה Variables and secrets (משתנים וסודות), מעבירים את הסמן שמאלה מהשדה Value (ערך) של משתנה הסביבה שרוצים להסיר, כדי להציג את סמל Delete (מחיקה), ולוחצים עליו.
לוחצים על סיום.
לוחצים על פריסה.
gcloud
כדי להסיר באופן סלקטיבי משתני סביבה של שירות קיים,משתמשים בדגל --remove-env-vars:
gcloud run services update SERVICE --remove-env-vars KEY1,KEY2
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של השירות.
- KEY1,KEY2: רשימה מופרדת בפסיקים של שמות משתנים.
אפשרות אחרת היא למחוק את כל משתני הסביבה שהוגדרו קודם באמצעות הדגל --clear-env-vars:
gcloud run services update SERVICE --clear-env-vars
מחליפים את SERVICE בשם השירות.
שיטות מומלצות
בקטע הבא מפורטות כמה מהשיטות המומלצות להגדרת משתני סביבה.
משתני סביבה שמורים לשירותים
משתני הסביבה שמוגדרים בחוזה של זמן הריצה של הקונטיינר הם שמורים ואי אפשר להגדיר אותם. בפרט, משתנה הסביבה PORT מוזרק לקונטיינר על ידי Cloud Run. לא מומלץ להגדיר אותו בעצמכם.
משתני סביבה שמורים נוספים כשפורסים פונקציות
מערכת Cloud Run מגדירה אוטומטית את משתני הסביבה הבאים של זמן הריצה כשפורסים פונקציות:
-
FUNCTION_TARGET: הפונקציה שתופעל. -
FUNCTION_SIGNATURE_TYPE: סוג הפונקציה:httpלפונקציות HTTP ו-eventלפונקציות מבוססות-אירועים.
חלק ממשתני הסביבה הנוספים מוגדרים באופן אוטומטי בהתאם לזמן הריצה שבו הפונקציה משתמשת. הם מבוססים על מערכת ההפעלה של זמן הריצה, לדוגמה, DEBIAN_FRONTEND, SHLVL או PATH, ועל זמן הריצה של השפה, לדוגמה, NODE_ENV, VIRTUAL_ENV או GOPATH.
יכול להיות שמשתני סביבה שמסופקים על ידי הסביבה, מלבד אלה שמוגדרים באופן אוטומטי, ישתנו בגרסאות עתידיות של זמן הריצה. מומלץ לא להסתמך על משתני סביבה שלא הגדרתם במפורש, ולא לשנות אותם.
שינוי משתני סביבה שסופקו על ידי הסביבה עלול להוביל לתוצאות בלתי צפויות. ניסיונות לשנות משתני סביבה כאלה עלולים להיחסם, או גרוע מכך, להוביל לתוצאות לא רצויות כמו פונקציות שלא יכולות להתחיל. מומלץ להוסיף קידומת למשתני הסביבה עם מפתח ייחודי כדי למנוע התנגשויות.
משתני סביבה לא תקינים
אי אפשר להשתמש במשתני הסביבה הבאים:
| מפתח | תיאור |
|---|---|
| ריק ('') | המפתחות לא יכולים להיות מחרוזת ריקה. |
= |
המפתחות לא יכולים להכיל את התו '='. |
X_GOOGLE_ |
המפתחות לא יכולים להכיל את הקידומת X_GOOGLE_. |
קוד לדוגמה
דוגמת קוד שמראה איך לגשת למשתני סביבה בקוד מופיעה במאמר טיפול בהגדרות רגישות באמצעות Secret Manager במדריך בנושא אימות משתמשי קצה.
המאמרים הבאים
אפשר להשתמש במשתני סביבה כדי להגדיר את הגדרות ה-buildpack. לפרטים ספציפיים לשפה, אפשר לעיין במסמכי ה-buildpacks בנושאים הבאים:
אם אתם מבצעים פריסה ממקור וצריכים להתאים אישית משתנים בזמן ה-build, כדאי לעיין במאמר בנושא הגדרת משתני סביבת build.