בדף הזה מוסבר איך לפרוס שירות חדש או גרסת שירות חדשה ב-Cloud Run ישירות מקוד המקור, באמצעות פקודה אחת של ה-CLI של gcloud, gcloud run deploy עם הדגל --source. במאמר מדריכים למתחילים בנושא פריסה מקוד מקור תוכלו למצוא דוגמה לפריסה של שירות Hello World.
- פריסה מהמקור באמצעות build (ברירת המחדל): האפשרות הזו משתמשת ב-buildpacks של Google Cloud וב-Cloud Build כדי ליצור באופן אוטומטי קובצי אימג' של קונטיינרים מקוד המקור, בלי להתקין את Docker במכונה או להגדיר את buildpacks או את Cloud Build. כברירת מחדל, Cloud Run משתמש בסוג המכונה שמוגדר כברירת מחדל ב-Cloud Build.
הפעלת
gcloud run deploy --sourceגם מבטלת את הצורך להפעיל את הפקודהgcloud builds submit. - Deploy prebuilt source (גרסת טרום-השקה): האפשרות הזו פורסת פריטי מידע שנוצרו ישירות ב-Cloud Run, בלי לעבור את השלב של Cloud Build. כך אפשר לפרוס את האפליקציה במהירות.
שימו לב שפריסות מקור משתמשות ב-Artifact Registry כדי לאחסן קונטיינרים שנוצרו. אם בפרויקט שלכם עדיין אין מאגר Artifact Registry בשם cloud-run-source-deploy באזור שבו אתם פורסים, התכונה הזו יוצרת באופן אוטומטי מאגר Artifact Registry בשם cloud-run-source-deploy.
אם יש קובץ Docker בספריית קוד המקור, קוד המקור שהועלה נבנה באמצעות קובץ ה-Docker הזה. אם אין קובץ Docker בספריית קוד המקור, חבילות ה-buildpack של Google Cloud מזהות באופן אוטומטי את השפה שבה אתם משתמשים ומאחזרות את יחסי התלות של הקוד כדי ליצור קובץ אימג' של קונטיינר שמוכן לייצור, באמצעות קובץ אימג' בסיסי מאובטח שמנוהל על ידי Google.
כברירת מחדל, תיקוני אבטחה מיושמים רק כשפורסים את שירות Cloud Run. כשמפעילים עדכוני אבטחה אוטומטיים לשירות, השירות מקבל תיקונים באופן אוטומטי בלי זמן השבתה. מידע נוסף על הגדרת עדכוני אבטחהלפני שמתחילים
- מוודאים שהגדרתם פרויקט חדש ל-Cloud Run, כמו שמתואר בדף ההגדרה.
אם אתם כפופים לכלל מדיניות של הארגון של הגבלה לפי דומיין שמגבילה הפעלות לא מאומתות לפרויקט, תצטרכו לגשת לשירות שנפרס כמו שמתואר בקטע בדיקת שירותים פרטיים.
-
מפעילים את Cloud Run Admin API, אם הוא עדיין לא מופעל.
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםאחרי שמפעילים את Cloud Run Admin API, חשבון השירות שמוגדר כברירת מחדל ב-Compute Engine נוצר באופן אוטומטי.
התפקידים הנדרשים
כדי לפרוס מקוד מקור, אתם או האדמין שלכם צריכים להקצות לחשבון הפריסה את תפקידי ה-IAM הבאים.
כדי לראות את התפקידים שנדרשים לחשבון הפריסה, לחצו כאן
כדי לקבל את ההרשאות שנדרשות לבנייה ולפריסה מקוד המקור, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
- מפתח מקור ב-Cloud Run (
roles/run.sourceDeveloper) בפרויקט - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) בפרויקט - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בזהות של שירות Cloud Run
רשימה של תפקידים והרשאות ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run שלכם מתממשק עם ממשקי API שלGoogle Cloud , כמו ספריות הלקוח ב-Cloud, עיינו במדריך להגדרת זהות השירות. מידע נוסף על הקצאת תפקידים זמין במאמרים הרשאות פריסה וניהול הגישה.
שפות נתמכות
בנוסף למקורות עם קובץ Docker, פריסה מקוד מקור תומכת בשפות הבאות באמצעות buildpacks של Google Cloud:
| זמן ריצה | פריסת המקור | הגדרות אישיות |
|---|---|---|
| המשך | פריסת שירות Go | הגדרת buildpacks של Go |
| Node.js | פריסת שירות Node.js | הגדרת buildpacks של Node.js |
| Python | פריסת שירות Python | הגדרת buildpacks של Python |
| Java (כולל Kotlin, Groovy, Scala) |
פריסת שירות Java | הגדרת buildpacks של Java |
| .NET | פריסת שירות .NET | הגדרת buildpacks של .NET |
| Ruby | פריסת שירות Ruby | הגדרת buildpacks של Ruby |
| PHP | פריסת שירות PHP | הגדרת buildpacks של PHP |
| רק במערכת ההפעלה | פריסת שירות Go | הגדרת סביבת זמן ריצה של מערכת ההפעלה בלבד |
מידע נוסף על גרסאות השפה הנתמכות
פריסה מקוד המקור עם build
בקטע הזה נסביר איך משתמשים ב-Buildpacks של Google Cloud וב-Cloud Build כדי ליצור באופן אוטומטי קובצי אימג' של קונטיינרים מקוד המקור, בלי להתקין את Docker במכונה או להגדיר את Buildpacks או את Cloud Build.
מגבלות
- הפריסה מהמקור משתמשת ב-Artifact Registry וב-Cloud Build, ולכן התכונה הזו זמינה רק באזורים שנתמכים על ידי Artifact Registry ו-Cloud Build.
- פריסה מהמקור היא תכונה נוחה, אבל היא לא מאפשרת התאמה אישית מלאה של ה-build. כדי לקבל יותר שליטה, אתם יכולים ליצור את קובץ האימג' של הקונטיינר באמצעות Cloud Build, למשל באמצעות
gcloud builds submit, ואז לפרוס את קובץ האימג' של הקונטיינר באמצעותgcloud run deploy --image, למשל. - כשפורסים מהמקור באמצעות חבילות ה-buildpack של Google Cloud, התאריך האחרון לשינוי של קובצי המקור מוגדר ל-1 בינואר 1980. זוהי התנהגות ברירת המחדל של buildpacks, והיא נועדה לתמוך בגרסאות build שניתן לשחזר. בהתאם למסגרת השפה, יכול להיות שהפעולה הזו תשפיע על השמירה במטמון של קבצים סטטיים בצד הדפדפן. אם האפליקציה שלכם מושפעת מכך, Google ממליצה להשבית את כותרות ה-HTTP
etagו-Last-Modifiedבאפליקציה. - כשפורסים מקוד מקור באמצעות buildpacks של Google Cloud, תמיד משתמשים ב-
gcr.io/buildpacks/builder:latest. אם השפה או הגדרות מערכת ההפעלה שאתם מעדיפים לא זמינות ב-latest, אתם יכולים להשתמש ב-builder ספציפי כדי ליצור קובץ אימג' של האפליקציה באמצעות ה-builder שאתם מעדיפים. אפשר לפרוס את השירות מהמקור באמצעות Kotlin ושפות JVM אחרות, כמו Java. השפה שבה אתם משתמשים חייבת לעמוד בכללים הבאים:
- אפשר ליצור את האפליקציה באמצעות Maven או Gradle.
- קובץ ה-build מכיל את כל הפלאגינים שנדרשים כדי ליצור מחלקות.
לפני הפריסה באמצעות build
לפני שפורסים מקוד המקור באמצעות build:
מבצעים את השלבים שמפורטים בקטע לפני שמתחילים.
-
מפעילים את Cloud Build API, אם הוא עדיין לא מופעל.
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים
התפקידים הנדרשים
כדי לפרוס מקוד מקור עם build, אתם או האדמין שלכם צריכים להקצות לחשבון השירות של Cloud Build את תפקידי ה-IAM הבאים.
כדי לראות את התפקידים הנדרשים לחשבון השירות ב-Cloud Build, לחצו כאן
כברירת מחדל, Cloud Build משתמש באופן אוטומטי בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine כדי לבנות את קוד המקור ואת המשאב של Cloud Run, אלא אם משנים את ההתנהגות הזו. כדי ש-Cloud Build יוכל ליצור את המקורות, צריך לבקש מהאדמין להקצות את התפקיד Cloud Run Builder (roles/run.builder) לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine בפרויקט:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/run.builder
מחליפים את PROJECT_NUMBER במספר הפרויקט ב- Google Cloud, ואת PROJECT_ID במזהה הפרויקט ב- Google Cloud. במאמר יצירה וניהול של פרויקטים מוסבר איך למצוא את מזהה הפרויקט ואת מספר הפרויקט.
הקצאת התפקיד "מפתח ב-Cloud Run" לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine מתעדכנת תוך כמה דקות.
רשימה של תפקידים והרשאות ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run שלכם מתממשק עם ממשקי API שלGoogle Cloud , כמו ספריות הלקוח ב-Cloud, עיינו במדריך להגדרת זהות השירות. מידע נוסף על הקצאת תפקידים זמין במאמרים הרשאות פריסה וניהול הגישה.
פריסה באמצעות build
כדי לפרוס מקוד המקור, לוחצים על הכרטיסייה של הוראות השימוש בכלי שבחרתם.
gcloud
-
מפעילים את Cloud Shell במסוף Google Cloud .
בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
עוברים לספריית קובצי המקור. אם יש קובץ Docker בספריית קובצי המקור, הוא משמש את הספרייה, אבל זה לא חובה.
יוצרים ומעלים את השירות:
gcloud run deploy SERVICE --source .
מחליפים את
SERVICEבשם שרוצים לתת לשירות.אם מופיעה בקשה להתקין את ממשקי ה-API הנדרשים, מזינים
y. צריך לעשות את זה רק פעם אחת בכל פרויקט. משיבים להנחיות אחרות על ידי ציון הפלטפורמה והאזור, אם לא הגדרתם להם ברירות מחדל כפי שמתואר בדף ההגדרה.מחכים שה-build והפריסה יסתיימו. בסיום, תופיע הודעת הצלחה ב-Cloud Run.
אחרי הפריסה, גרסת השירות הזו מטפלת ב-100% מהתנועה.
פיתוח נייטיב
אתם יכולים לאחסן את מפרט ה-Compose בקובץ YAML, ואז לפרוס אותו מקוד המקור כשירות Cloud Run באמצעות פקודת gcloud אחת.
עוברים לספריית קובצי המקור. אם יש קובץ Docker בספריית קובצי המקור, הוא משמש את הספרייה, אבל זה לא חובה.
בספריית הפרויקט, יוצרים קובץ
compose.yamlעם הגדרות השירות.services: web: build: . ports: - "8080:8080"
אפשר גם לציין אפשרויות הגדרה נוספות, כמו משתני סביבה, סודות וחיבורי אמצעי אחסון.
פריסת השירותים
כדי לפרוס את השירותים, מריצים את הפקודה
gcloud run compose up:gcloud run compose up compose.yamlמגיבים
yלכל בקשה להתקנת רכיבים נדרשים או להפעלת ממשקי API.אופציונלי: אם רוצים לאפשר גישה לשירות בלי אימות, הופכים את השירות לגלוי לכולם.
אחרי הפריסה, כתובת ה-URL של שירות Cloud Run מוצגת. מעתיקים את כתובת ה-URL הזו ומדביקים אותה בדפדפן כדי לראות את הקונטיינר שפועל. אפשר להשבית את אימות ברירת המחדל במסוף Google Cloud .
פריסת מקור מוכן מראש
אתם יכולים לפרוס ארטיפקטים מוכנים מראש של קוד מקור ישירות ל-Cloud Run, בלי לעבור את השלב של Cloud Build. במקום ליצור קובץ אימג' של קונטיינר מהמקור, אתם יכולים להעלות ארכיון מכווץ של האפליקציה ישירות לקטגוריה של Cloud Storage. לאחר מכן, Cloud Run לוקח את הארכיון הזה ומריץ אותו ישירות על קובץ אימג' בסיסי. הגישה הזו מאפשרת לכם לפתח ולחזור על הפעולות במהירות באופן מקומי, וכך לקצר באופן משמעותי את זמני הפריסה.מגבלות
פריסת מקור מוכן מראש נתמכת רק במקרים הבאים:
- שירותי Cloud Run.
- סביבות זמן ריצה נתמכות (אין תמיכה בקובצי Docker).
- ארכיון מקור (.tar.gz) <= 250MiB.
- הקובץ הבינארי (לדוגמה, קובץ בינארי של Go) או הסקריפט (לדוגמה, סקריפט של Python) חייבים להיות תואמים לארכיטקטורת x86.
- המקור צריך להיות עצמאי, וכל יחסי התלות צריכים להיות ארוזים. תמונת הבסיס של סביבת זמן הריצה מכילה רק את מערכת ההפעלה המינימלית וכמה ספריות שפה.
לפני פריסת קוד מקור מוכן מראש
כדי להשתמש בתכונה "פריסה ללא גרסה":
- חשוב לוודא שביצעתם את השלבים שמפורטים בקטע לפני שמתחילים.
מפעילים את Cloud Run API ואת Cloud Storage API:
gcloud services enable run.googleapis.com \ storage.googleapis.com
לפני הפריסה, צריך להתקין את יחסי התלות של האפליקציה באופן מקומי, כי הם לא יותקנו (אין build).
פריסה בלי build
בקטע הזה מוסבר איך לפרוס את המקור שנוצר מראש ישירות ב-Cloud Run.
gcloud
כדי לפרוס קוד מקור מוכן מראש מספרייה מקומית, משתמשים בדגל --no-build כדי להורות לפקודה deploy לדלג על השלב של Cloud Build:
gcloud beta run deploy SERVICE_NAME \ --source APPLICATION_PATH \ --no-build \ --base-image=BASE_IMAGE \ --command=COMMAND \ --args=ARG
מחליפים את מה שכתוב בשדות הבאים:
-
SERVICE_NAME: השם של שירות Cloud Run. -
APPLICATION_PATH: המיקום של האפליקציה במערכת הקבצים המקומית.
BASE_IMAGE: תמונת הבסיס של סביבת זמן הריצה שבה רוצים להשתמש באפליקציה. לדוגמה:us-central1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/nodejs24. אפשר גם להשתמש בכינוי הקצרnodejs24.אפשר גם לפרוס קובץ בינארי שעבר הידור מראש בלי להגדיר רכיבי זמן ריצה נוספים שספציפיים לשפה, באמצעות קובץ אימג' בסיסי של מערכת ההפעלה בלבד, כמו
osonly24. למידע נוסף, קראו את המאמר סביבת זמן ריצה של מערכת ההפעלה בלבד במסמכי התיעוד של buildpacks.
COMMAND: הפקודה שהקונטיינר מופעל איתה. זה שינוי אופציונלי. אם לא תציינו פקודה, קובץ האימג' הבסיסי יסיק את פקודת ההתחלה של הקונטיינר בזמן הריצה.
ARG: ארגומנט ששולחים לפקודת הקונטיינר. אם משתמשים בכמה ארגומנטים, צריך לציין כל אחד מהם בשורה נפרדת. זה שינוי אופציונלי. אם לא תציינו ארגומנטים, תמונת הבסיס תסיק את הארגומנטים בזמן הריצה.
YAML
אפשר לאחסן את מפרט השירות בקובץ YAML ואז לפרוס אותו באמצעות ה-CLI של gcloud או עורך Google Cloud המסוף service.yaml.
יוצרים קטגוריית אחסון שתכיל את האפליקציה:
gcloud storage buckets create gs://BUCKET_NAME --location=BUCKET_LOCATION
מחליפים את מה שכתוב בשדות הבאים:
-
BUCKET_NAME: השם שרוצים לתת לקטגוריה, בכפוף לדרישות למתן שמות. לדוגמה,my-bucket. -
BUCKET_LOCATION: המיקום של הקטגוריה. לדוגמה,US.
-
יוצרים ארכיון עם מקור האפליקציה באמצעות zip או tar, לדוגמה:
tar -cvzf ARCHIVE_NAME APPLICATION_PATH
מחליפים את מה שכתוב בשדות הבאים:
-
ARCHIVE_NAME: שם הארכיון שרוצים ליצור. לדוגמה,app.tar.gz. -
APPLICATION_PATH: המיקום של האפליקציה במערכת הקבצים המקומית. לדוגמה,~/my-application. כדי להעביר לארכיון את ספריית העבודה הנוכחית, מגדירים את הערך הזה בתור*.
-
מעלים את ארכיון האפליקציה ל-Cloud Storage:
gcloud storage cp ARCHIVE_NAME gs://BUCKET_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
ARCHIVE_NAME: הנתיב המקומי לארכיון שיצרתם קודם. לדוגמה,app.tar.gz. -
BUCKET_NAME: שם הקטגוריה שיצרתם קודם. לדוגמה,my-bucket.
-
יוצרים קובץ
service.yamlחדש עם התוכן הבא:apiVersion: serving.knative.dev/v2 kind: Service metadata: name: SERVICE_NAME spec: template: metadata: annotations: run.googleapis.com/sources: '{"": "gs://BUCKET_NAME/ARCHIVE_NAME"}' run.googleapis.com/base-images: '{"": "BASE_IMAGE"}' spec: containers: - image: scratch command: - COMMAND args: - ARG1 - ARG-N runtimeClassName: run.googleapis.com/linux-base-image-updateמחליפים את מה שכתוב בשדות הבאים:
-
SERVICE_NAME: השם של שירות Cloud Run. שמות השירותים צריכים להיות באורך של עד 49 תווים, וייחודיים לכל אזור ופרויקט. -
BUCKET_NAME: שם הקטגוריה שיצרתם קודם. לדוגמה,my-bucket. -
ARCHIVE_NAME: הנתיב המקומי לארכיון שיצרתם קודם. לדוגמה,app.tar.gz.
BASE_IMAGE: קובץ האימג' הבסיסי של סביבת זמן הריצה שבו רוצים להשתמש באפליקציה. לדוגמה,us-central1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/nodejs24.אפשר גם לפרוס קובץ בינארי שעבר הידור מראש בלי להגדיר רכיבי זמן ריצה נוספים שספציפיים לשפה, באמצעות קובץ אימג' בסיסי של מערכת ההפעלה בלבד, כמו
osonly24. למידע נוסף, קראו את המאמר סביבת זמן ריצה של מערכת ההפעלה בלבד במסמכי התיעוד של buildpacks.
COMMAND: הפקודה שבאמצעותה המאגר מופעל. זה שינוי אופציונלי. אם לא תציינו פקודה, תמונת הבסיס תסיק את פקודת ההתחלה של הקונטיינר בזמן הריצה.
ARG1: הארגומנט שאתם שולחים לפקודת הקונטיינר. אם משתמשים בכמה ארגומנטים, צריך לציין כל אחד מהם בשורה נפרדת, כמו בדוגמהARG-N. זה שינוי אופציונלי. אם לא תציינו ארגומנטים, תמונת הבסיס תסיק את הארגומנטים בזמן הריצה.
-
פורסים את השירות החדש:
gcloud run services replace service.yaml
API בארכיטקטורת REST
כדי לפרוס באמצעות ה-API בארכיטקטורת REST:
curl -H "Content-Type: application/json" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-X POST \
-d '{"template": {"containers": [{"command": ["COMMAND"], "args": ["ARG1"], "image": "scratch", "baseImageUri": "BASE_IMAGE", "sourceCode": {"cloudStorageSource": {"bucket": "'GCS_BUCKET_NAME", "object":"ARCHIVE_NAME"}}}]}}' \
https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services?serviceId=SERVICE_NAME
מחליפים את מה שכתוב בשדות הבאים:
- ACCESS_TOKEN: טוקן גישה תקין לחשבון עם הרשאות IAM לפריסת שירותים.
לדוגמה, אם אתם מחוברים ל-gcloud, אתם יכולים לאחזר אסימון גישה באמצעות
gcloud auth print-access-token. מתוך מכונה של קונטיינר ב-Cloud Run, אתם יכולים לאחזר טוקן גישה באמצעות שרת המטא-נתונים של המכונה של הקונטיינר. - COMMAND: הפקודה שבאמצעותה המאגר יופעל. זה שינוי אופציונלי. אם לא תציינו פקודה, קובץ האימג' הבסיסי יסיק את פקודת ההתחלה של הקונטיינר בזמן הריצה.
- ARG1: הארגומנט שאתם שולחים לפקודת הקונטיינר. אם משתמשים בכמה ארגומנטים, צריך לציין כל אחד מהם בשורה נפרדת, כמו בדוגמה
ARG-N. זה שינוי אופציונלי. אם לא תציינו ארגומנטים, תמונת הבסיס תסיק את הארגומנטים בזמן הריצה. BASE_IMAGE: קובץ האימג' הבסיסי של סביבת זמן הריצה שבו רוצים להשתמש באפליקציה. לדוגמה,
us-central1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/nodejs24.אפשר גם לפרוס קובץ בינארי שעבר הידור מראש בלי להגדיר רכיבי זמן ריצה נוספים שספציפיים לשפה, באמצעות קובץ אימג' בסיסי של מערכת ההפעלה בלבד, כמו
osonly24. למידע נוסף, קראו את המאמר סביבת זמן ריצה של מערכת ההפעלה בלבד במסמכי התיעוד של buildpacks.BUCKET_NAME: שם הקטגוריה שיצרתם קודם. לדוגמה,
my-bucket.ARCHIVE_NAME: הנתיב המקומי לארכיון שיצרתם קודם. לדוגמה,
app.tar.gz.PROJECT-ID: מזהה הפרויקט ב- Google Cloud .
REGION: האזור של השירות Google Cloud .
SERVICE_NAME: השם של שירות Cloud Run. שמות השירותים צריכים להיות באורך של עד 49 תווים, וייחודיים לכל אזור ופרויקט.
Terraform
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
מוסיפים את הקוד הבא למשאבgoogle_cloud_run_v2_service בתצורה של Terraform:resource "google_storage_bucket_object" "source_tar" {
provider = google-beta
name = "ARCHIVE_NAME"
bucket = "BUCKET_NAME"
source = "ARCHIVE_PATH"
}
resource "google_cloud_run_v2_service" "default" {
provider = google-beta
name = "SERVICE_NAME"
location = "REGION"
deletion_protection = false
template {
containers {
image = "scratch"
base_image_uri = "BASE_IMAGE"
command = ["COMMAND"]
args = ["ARG1"]
source_code {
cloud_storage_source {
bucket = "BUCKET_NAME"
object = google_storage_bucket_object.source_tar.name
generation = google_storage_bucket_object.source_tar.generation
}
}
}
}
}
מחליפים את מה שכתוב בשדות הבאים:
-
ARCHIVE_NAME: שם הקובץ כמו שהוא יופיע בקטגוריה של Cloud Storage. לדוגמה,source-code.tar.gz. -
BUCKET_NAME: שם הקטגוריה שאליה רוצים להעלות את ארכיון המקור. לדוגמה,my-source-bucket. -
ARCHIVE_PATH: הנתיב המקומי לארכיון שיצרתם קודם. לדוגמה,./app.tar.gz. הארכיון הזה חייב להיות בפורמט GZIP (.tar.gz). -
SERVICE_NAME: השם של שירות Cloud Run -
REGION: האזור Google Cloud של הקטגוריה ושל השירות. לדוגמה, europe-west1. שני המשאבים צריכים להיות באותו אזור כדי למנוע זמן קצוב לתפוגה של החילוץ. -
BASE_IMAGE: קובץ האימג' הבסיסי של סביבת זמן הריצה שבו רוצים להשתמש באפליקציה. לדוגמה,us-central1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/nodejs24. -
COMMAND: הפקודה שבאמצעותה המאגר יופעל. זה שינוי אופציונלי. אם לא תציינו פקודה, קובץ האימג' הבסיסי יסיק את פקודת ההתחלה של הקונטיינר בזמן הריצה. -
ARG1: הארגומנט שאתם שולחים לפקודת הקונטיינר. זה שינוי אופציונלי. אם לא תציינו ארגומנטים, תמונת הבסיס תסיק את הארגומנטים בזמן הריצה.
MCP
אתם יכולים להשתמש בסוכן AI כדי לפרוס את השירות עם או בלי קטגוריית אחסון באמצעות שרת ה-MCP הרשמי של Cloud Run.
כדי לקבל את התוצאות הכי טובות, לפני שמתחילים להשתמש בשרת ה-MCP הזה, כדאי להנחות את הסוכן להעדיף את כלי ה-MCP על פני ה-CLI של gcloud.
כדי להגדיר את שרת ה-MCP המרוחק של Cloud Run, פועלים לפי ההוראות במדריך שימוש בשרת ה-MCP המרוחק של Cloud Run.
באמצעות קטגוריית אחסון
כדי ליצור קטגוריית אחסון ולפרוס שירות, נותנים לסוכן את ההנחיה הבאה:
Create storage bucket "my-bucket" for my source code and deploy service "my-app" to Cloud Run from source in this current directory.הנציג משתמש בכלי
deploy_service_from_archiveכדי להעביר את קוד המקור ישירות ל-Cloud Run מארכיון קוד מקור עצמאי, וכך לפרוס אותו מהר יותר.אתם יכולים גם להורות לסוכן להשתמש מחדש בקטגוריה קיימת של Cloud Storage בשביל קוד המקור.
בלי קטגוריית אחסון
אם קטעי הקוד הם בגודל של עד 50MiB ואין להם תלויות חיצוניות, אתם יכולים להנחות את הנציג לפרוס בלי קטגוריית אחסון באמצעות ההנחיה הבאה:
Deploy service "my-app" to Cloud Run from source in this current directory.הסוכן משתמש בכלי
deploy_service_from_file_contentsכדי להעביר את קוד המקור ישירות מקובצי המקור המקומיים ל-Cloud Run.
שימוש בהנחיה /deploy
אתם יכולים להשתמש בהנחיה /deploy כדי לפרוס במהירות שירות באמצעות שרת ה-MCP של Cloud Run. יכול להיות שתצטרכו לנווט בתפריט של הצ'אט בוט כדי למצוא את הכלי או ההנחיה שאתם צריכים.
כדי לפרוס את ספריית העבודה הנוכחית ב-Cloud Run, מריצים את ההנחיה הבאה ב-/deploy:
/deploySERVICE_NAME\ --projectPROJECT_ID\ --regionREGION\
מחליפים את מה שכתוב בשדות הבאים:
-
SERVICE_NAME: השם של שירות Cloud Run -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud -
REGION: שם האזור
דוגמאות לפריסה של קוד מקור מוכן מראש
בקטע הזה מוצגות דוגמאות לפריסה מקוד המקור בלי להשתמש ב-build.
Node.js
יוצרים שירות Node.js:
יוצרים ספרייה חדשה בשם
helloworldועוברים אליה:mkdir helloworld cd helloworld
יוצרים קובץ
package.jsonעם התוכן הבא:באותה ספרייה, יוצרים קובץ
index.jsומעתיקים אליו את השורות הבאות:הקוד הזה יוצר שרת אינטרנט בסיסי שמאזין ליציאה שמוגדרת על ידי משתנה הסביבה
PORT.בספרייה
helloworld, מריצים את הפקודה הבאה כדי להתקין את יחסי התלות של השירות באופן מקומי:npm install
בספרייה
helloworld, פורסים את השירות באמצעות הדגל--no-build, שמורה לפקודהdeployלדלג על השלב של Cloud Build:gcloud beta run deploy helloworld \ --source . \ --region=REGION \ --no-build \ --base-image=nodejs24 \
מחליפים את מה שכתוב בשדות הבאים:
-
REGION: האזור שבו השירות פרוס.
-
Python
יוצרים שירות ב-Python:
יוצרים ספרייה חדשה בשם
helloworldועוברים אליה:mkdir helloworld cd helloworldיוצרים קובץ בשם
main.pyומדביקים בו את הקוד הבא:הקוד הזה מגיב לבקשות עם הברכה "Hello World". הטיפול ב-HTTP מתבצע על ידי שרת אינטרנט של Gunicorn בקונטיינר. כשמפעילים את הקוד ישירות לשימוש מקומי, הוא יוצר שרת אינטרנט בסיסי שמאזין ליציאה שמוגדרת על ידי משתנה הסביבה
PORT.יוצרים קובץ בשם
requirements.txtומדביקים בו את הקוד הבא:הקוד הזה מוסיף חבילות שנדרשות לדוגמה.
יוצרים עותק מקוד של צד שלישי (vendoring) של יחסי התלות:
pip3 install -r requirements.txt --target=./vendor
פורסים את השירות באמצעות ה-CLI של gcloud. הדגל
--no-buildמורה לפקודהdeployלעקוף את השלב של Cloud Build:gcloud beta run deploy helloworld \ --source . \ --region=REGION \ --no-build \ --base-image=python314 \
מחליפים את REGION באזור שבו השירות פרוס.
המשך
יוצרים ופורסים שירות Go באמצעות סביבת זמן הריצה OS only:
יוצרים ספרייה חדשה בשם
helloworldועוברים אליה:mkdir helloworld cd helloworldמאתחלים קובץ
go.modמספריית הפרויקט כדי להצהיר על מודול go:go mod init github.com/GoogleCloudPlatform/golang-samples/run/helloworldיוצרים קובץ חדש בשם
main.goומדביקים בו את הקוד הבא:כדי ליצור את הקובץ הבינארי שמטרגט מערכת הפעלה של Linux, כמו
linux/amd64, מריצים את הפקודה הבאה:GOOS="linux" GOARCH=amd64 go build main.goפורסים את השירות באמצעות ה-CLI של gcloud. הדגל
--no-buildמורה לפקודהdeployלדלג על השלב של Cloud Build:gcloud beta run deploy helloworld \ --source . \ --region=REGION \ --no-build \ --base-image=osonly24 \ --command=./main
מחליפים את REGION באזור שבו השירות פרוס.
פתרון בעיות
בקטע הזה מפורטים כמה טיפים לפתרון בעיות בפריסה מהמקור בלי להשתמש ב-build.
פיתוח מקומי
פריסה מהמקור בלי להשתמש ב-build פועלת באופן דומה לטעינת הקוד או קובץ ההפעלה לתמונת הבסיס.
לדוגמה:
יוצרים עותק של כל התוכן:
cp -R python/hello-world/ workspace
מריצים את קובץ האימג' הבסיסי כמשתמש Root כשהמקור מותקן. אם אתם צריכים לבצע curl ממכונה מארחת, אתם יכולים לכלול את
-p 8080:8080.docker run -it -v "LOCAL_PATH" -u 0 us-central1-docker.pkg.dev/serverless-runtimes/google-22-full/runtimes/python314 /bin/bash`
מחליפים את LOCAL_PATH במיקום של קובצי המקור המקומיים.
מפעילים את השרת:
python main.py
יומן ביצוע
יומן ההרצה שימושי לניפוי באגים של כשלים בפריסה. במסוףGoogle Cloud , נכנסים לדף Observability > Logs.
ההרשאה נדחתה בגישה ל-Cloud Storage
אם בשירות Cloud Run מופיעות שגיאות מסוג "אין הרשאה" כשמנסים לגשת לאובייקטים ב-Cloud Storage, צריך לתת את התפקיד roles/storage.objectViewer לחשבון השירות של Cloud Run:
gcloud projects add-iam-policy-binding PROJECT \ --member="SERVICE_ACCOUNT" \ --role="roles/storage.objectViewer"
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT: מזהה הפרויקט ב- Google Cloud .
- SERVICE_ACCOUNT: חשבון השירות שלכם ב-Cloud Run.
לדוגמה,
service-123@serverless-robot-staging.iam.gserviceaccount.com.
אוטומציה של בנייה מהמקור
כדי להימנע משינויים ללא גרסה במקור המקומי, מומלץ לפרוס באופן אוטומטי כששינויים נדחפים למאגר Git. כדי להקל על התהליך, אתם יכולים לחבר ולהגדיר פריסה רציפה לשירות Cloud Run. כשמקשרים את המאגרים ב-GitHub ל-Cloud Run, אפשר להגדיר גרסאות build ולפרוס את המאגרים בלי לכתוב קובצי Docker או קובצי build.
כדי להגדיר גרסאות build אוטומטיות, מגדירים אוטומציה כמו שמתואר בדף גרסאות build רציפות, ומוודאים שבוחרים באפשרות של בניית מקור באמצעות buildpacks.השבתת בדיקת התקינות של הפריסה
כברירת מחדל, Cloud Run בודק שהפריסה תקינה על ידי הפעלת מכונה והמתנה עד שהבדיקה הראשונית תעבור. אם בדיקת התקינות נכשלת, הגרסה תסומן כלא תקינה והתנועה לא תנותב אליה.
אם אין צורך בבדיקת התקינות של הפריסה, או כדי להגביר את מהירות הפריסה, אפשר להשבית אותה:
gcloud
כדי להשבית את בדיקת התקינות של הפריסה, משתמשים בדגל --no-deploy-health-check:
gcloud run deploy --image IMAGE_URL --no-deploy-health-check
מחליפים את מה שכתוב בשדות הבאים:
-
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.
אם בדיקת התקינות של הפריסה הושבתה בעבר, אפשר להשתמש ב---deploy-health-check כדי להפעיל אותה מחדש.
YAML
כדי להשבית את בדיקת התקינות של הפריסה, מוסיפים את ההערה run.googleapis.com/health-check-disabled עם הערך 'true' ל-spec.template.metadata.annotations.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: SERVICE
spec:
template:
metadata:
annotations:
run.googleapis.com/health-check-disabled: 'true'
Terraform
כדי להשבית את בדיקת התקינות של הפריסה, מגדירים את הארגומנט health_check_disabled לערך true בבלוק template.
resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
...
template {
health_check_disabled = true
...
}
}
המאמרים הבאים
אחרי שפורסים שירות Cloud Run, אפשר:
- השקות הדרגתיות, החזרת גרסאות למצב קודם, העברת תנועה
- צפייה ביומני השירות
- מעקב אחרי ביצועי השירות
- הגדרת מגבלות זיכרון
- הגדרה של משתני סביבה
- שינוי מספר הבקשות בו-זמנית לשירות
- ניהול השירות
- ניהול גרסאות של שירותים מנוהלים
מידע ולמידה על הגדרות הפריסה של המקור:
- עדכונים אוטומטיים של קובצי אימג' בסיסיים
- משתני סביבה של גרסאות build
- חשבון שירות של Build
- יצירת מאגרי Worker
אתם יכולים להפוך את ה-builds והפריסות של שירותי Cloud Run לאוטומטיים באמצעות טריגרים לפיתוח גרסת Build של Cloud Build: