פריסת שירותים באמצעות Compose

בדף הזה מוסבר איך לפרוס שירותים ב-Cloud Run באמצעות קובץ שמבוסס על מפרט Compose.

אפשר לפרוס ל-Cloud Run באמצעות קובץ Compose בדרכים הבאות:

שימוש ב-Compose לפריסה ב-Cloud Run הוא אידיאלי לפיתוח, ומפשט את המעבר מהסביבה המקומית לסביבת ענן. כך תוכלו לשמור על פורמט תצורה עקבי גם באפליקציות המקומיות וגם באפליקציות שפרסתם.

לניהול סביבות ייצור בסביבת תשתית כקוד (IaC), מומלץ להשתמש ב-Terraform.

מגבלות

  • פריסת Compose פורסת שירות יחיד של Cloud Run עם כמה קונטיינרים.
  • הפריסה של Compose מתרגמת רק קבוצת משנה של תכונות נתמכות של Cloud Run.
  • שירותים שנוצרו באמצעות Compose מוגדרים כברירת מחדל למופע מקסימלי אחד.
  • הכלי Cloud Run Compose deploy מפשט את הפריסה, אבל הוא לא מחליף אסטרטגיה מקיפה של תשתית כקוד לסביבות ייצור.

פריסת שירותים מתמונות של קונטיינרים באמצעות Compose

מגדירים את השירותים בקובץ compose.yaml ופורסים אותם מקובצי אימג' קיימים של קונטיינרים. מידע נוסף זמין במאמר בנושא פריסת תמונות של קונטיינרים.

דוגמה: אפליקציה עם שירות יחיד

בדוגמה הבאה מוצג קובץ compose.yaml לשירות אינטרנט שמשתמש בקובץ אימג' של קונטיינר מוכן מראש.

services:
  web:
    image: us-docker.pkg.dev/cloudrun/container/hello
    ports:
      - "8080:8080"

פריסת השירותים

  1. כדי לפרוס את השירותים, מריצים את הפקודה gcloud beta run compose up:

    gcloud beta run compose up compose.yaml

  2. מגיבים y לכל ההנחיות להתקנת רכיבים נדרשים או להפעלת ממשקי API.

  3. אופציונלי: הפיכת השירות לציבורי אם רוצים לאפשר גישה לשירות ללא אימות.

    אחרי הפריסה, מוצגת כתובת ה-URL של שירות Cloud Run. מעתיקים את כתובת ה-URL הזו ומדביקים אותה בדפדפן כדי לראות את הקונטיינר הפועל. אפשר להשבית את אימות ברירת המחדל במסוף Google Cloud .

פריסה מקוד המקור באמצעות Compose

מגדירים את השירותים בקובץ compose.yaml ומבצעים פריסה על ידי בנייה מקוד המקור. מידע נוסף מופיע במאמר בנושא פריסת שירותים מקוד מקור.

דוגמה: אפליקציה עם שירות יחיד

בדוגמה הבאה מוצג קובץ compose.yaml לשירות אינטרנט שנבנה ממקור בספרייה הנוכחית.

services:
  web:
    build: .
    ports:
      - "8080:8080"

פריסת השירותים

  • בספריית הפרויקט, יוצרים קובץ compose.yaml עם הגדרות השירות.

    1. כדי לפרוס את השירותים, מריצים את הפקודה gcloud beta run compose up:

      gcloud beta run compose up compose.yaml
    2. מגיבים y לכל ההנחיות להתקנת הרכיבים הנדרשים או להפעלת ממשקי API.

    3. אופציונלי: הפיכת השירות לציבורי אם רוצים לאפשר גישה לשירות ללא אימות.

    אחרי הפריסה, מוצגת כתובת ה-URL של שירות Cloud Run. מעתיקים את כתובת ה-URL הזו ומדביקים אותה בדפדפן כדי לראות את הקונטיינר הפועל. אפשר להשבית את אימות ברירת המחדל במסוף Google Cloud .

תכונות נתמכות

כשפורסים באמצעות קובץ compose.yaml, ‏ Cloud Run יכול להקצות באופן אוטומטי משאבים אחרים של Google Cloud כפי שמוגדר בקובץ ה-Compose. אם נדרשים משאבים, Cloud Run יבקש מכם אישור לפני יצירתם.

‫Cloud Run תומך בקבוצת המשנה הבאה של תכונות Compose:

שדה הכתיבה מיפוי ותיאור של Cloud Run
services

השירותים ממופים לקונטיינרים נפרדים בשירות Cloud Run שנפרס.

volumes

יש תמיכה חלקית. מתרגם את ההרכבות של bind, volume ו-tmpfs למקבילות ב-Cloud Run.

secrets

יש תמיכה. שימוש ב-Secret Manager.

configs

יש תמיכה. שימוש ב-Cloud Storage.

build

‫Cloud Build יוצר את הקונטיינר באמצעות הקשר של ה-build, מתייג אותו ומעביר אותו בדחיפה למאגר cloud-run-source-deploy ב-Artifact Registry.

image

פורס קובץ אימג' מוכן מראש של קונטיינר ממאגר נתמך. משתמשים באפשרות הזו אם יש תמונה מוכנה מראש. תמיכה רק בתמונות של Docker Hub ו-Artifact Registry. אם אתם משתמשים בתמונות בהתאמה אישית, אתם יכולים להעביר אותן בדחיפה ל-Artifact Registry ולהשתמש בהן.

ports

רשימה של מיפויי יציאות, כמו 8080:8080, שקובעים את מאגר הכניסה.

expose

רשימת יציאות לחשיפה אבל לא לפרסום, כמו 3000, כדי לוודא שלשירותים תלויים יש יציאה זמינה לתקשורת.

depends_on

הגדרה של סדר ההפעלה של הקונטיינר. כך מוודאים שלכל שירות שמופיע ברשימה run-compose יש יציאה שמוגדרת על ידי ports או expose, כדי שמכולות אחרות יוכלו לתקשר איתו.

cpu_count / cpus

רמז שמשמש להגדרת מגבלות המעבד והזיכרון ב-Cloud Run, והקצאת משאבים באופן אוטומטי לפי הלוגיקה הבאה:

  • <= 2 CPU: 1Gi Memory
  • <= 4 CPU: 2Gi Memory
  • > 4 CPU: 4Gi Memory
container_name

מגדיר את שם המאגר לפתרון תלות, ומוגדר כברירת מחדל לשם השירות אם לא צוין.

environment

מעביר משתני סביבה לקונטיינר המתאים ב-Cloud Run.

command

הפקודה הזו מבטלת את ברירת המחדל של הפקודה בקונטיינר, שהוגדרה על ידי הקונטיינר, על ידי מיפוי למאפיין args ב-Cloud Run. לדוגמה, ההוראה CMD ב-Dockerfile.

entrypoint

יש תמיכה.

env_file

יש תמיכה.

x-google-cloudrun:ingress-container

‫(Extension) מוסיפים את התוסף הספציפי הזה של Google לשירות ומגדירים אותו לערך true כדי לסמן אותו כמאגר הכניסה שמקבל את כל התנועה החיצונית.

x-google-cloudrun:volume-type: in-memory

(הרחבה) מוסיפים את ההרחבה הספציפית הזו של Google לנפח אחסון ומגדירים אותה ל-in-memory במקום נפח ברירת המחדל שמגובה על ידי Cloud Storage.

סודות שממופים ל-Secret Manager

אם קובץ compose.yaml מגדיר את secrets, ה-CLI של gcloud מקצה סודות של Secret Manager לאחסון הנתונים האלה.

כרכים והגדרות שממופים ל-Cloud Storage

אם בקובץ compose.yaml מוגדרים volumes או configs ברמה העליונה, ה-CLI של gcloud מקצה קטגוריה של Cloud Storage לניהול הנתונים האלה. נוצרת קטגוריה אחת לכל פריסה, והתיקיות משמשות להפרדה בין נפחים והגדרות.

  • כרכים עם שם: תיקייה ריקה שמתאימה לשם הכרך נוצרת בקטגוריה.
  • טעינת תיקיות מקושרות: כשמטעינים תיקיות מקושרות, Cloud Run מעלה את התוכן של ספריית קובצי המקור המקומית לתיקייה בקטגוריה לפני הפריסה.
  • Configs: לכל הגדרה שמוגדרת עם מקור file:, ‏ Cloud Run מעלה את התוכן של הקובץ המקומי לתיקייה בדלי.

התפקידים הנדרשים

במהלך הפריסה, Cloud Run מקצה אוטומטית את התפקידים הנדרשים לזהות השירות של השירות שנפרס, כדי לגשת למשאבים שהוקצו:

  • Cloud Storage Bucket: roles/storage.objectUser
  • Secret Manager Secrets: roles/secretmanager.secretAccessor

תקשורת בין מאגרי תגים באותו מופע

‫Cloud Run מוסיף רשומה לקובץ /etc/hosts בכל קונטיינר. הערך הזה ממפה את שמות השירותים מקובץ compose.yaml לכתובות ה-IP הפנימיות שלהם, וכך השירותים יכולים לתקשר ביניהם באמצעות שמות השירותים.

המאמרים הבאים