בדף הזה מוסבר איך פורסים שירות חדש או גרסה של שירות ב-Cloud Run ישירות מקוד המקור באמצעות פקודה אחת של ה-CLI של gcloud, gcloud run deploy, עם הדגל --source. דוגמה להדרכה מפורטת על פריסת שירות Hello World מופיעה במאמר הפעלות מהירות של פריסה ממקור.
- פריסה ממקור עם בנייה (ברירת מחדל):
האפשרות הזו משתמשת ב-Buildpacks של Google Cloud וב-Cloud Build כדי ליצור באופן אוטומטי קובצי אימג' של קונטיינרים מקוד המקור, בלי שתצטרכו להתקין את Docker במחשב או להגדיר buildpacks או Cloud Build. כברירת מחדל, Cloud Run משתמש בסוג המכונה שמוגדר כברירת מחדל על ידי Cloud Build.
הרצת הפקודה
gcloud run deploy --sourceמבטלת גם את הצורך בהרצת הפקודהgcloud builds submit. - פריסה מקוד המקור ללא בנייה (גרסת Preview): האפשרות הזו מאפשרת לפרוס ארטיפקטים ישירות ל-Cloud Run, בלי לעבור את שלב Cloud Build. כך אפשר לקצר את משך הפריסה.
הערה: פריסות של מקורות משתמשות ב-Artifact Registry כדי לאחסן קונטיינרים בנויים. אם בפרויקט שלכם עדיין אין מאגר Artifact Registry בשם cloud-run-source-deploy באזור שבו אתם מבצעים פריסה, התכונה הזו יוצרת באופן אוטומטי מאגר Artifact Registry בשם cloud-run-source-deploy.
אם יש קובץ Dockerfile בספריית קוד המקור, קוד המקור שהועלה נבנה באמצעות קובץ Dockerfile הזה. אם אין קובץ Docker בספריית קוד המקור, Buildpacks של Google Cloud מזהה באופן אוטומטי את השפה שבה אתם משתמשים ומביא את התלות של הקוד כדי ליצור קובץ אימג' של קונטיינר שמוכן לייצור, באמצעות קובץ אימג' בסיסי מאובטח שמנוהל על ידי Google.
כברירת מחדל, תיקוני אבטחה מוחלים רק כשפורסים את שירות Cloud Run. כשמפעילים עדכוני אבטחה אוטומטיים לשירות, השירות מקבל תיקוני אבטחה באופן אוטומטי ללא השבתה. מידע נוסף על הגדרת עדכוני אבטחהלפני שמתחילים
- מוודאים שהגדרתם פרויקט חדש ל-Cloud Run כמו שמתואר בדף ההגדרה.
אם אתם כפופים למדיניות ארגונית של הגבלת דומיין שמגבילה הפעלות לא מאומתות של הפרויקט, תצטרכו לגשת לשירות הפרוס שלכם כמו שמתואר בקטע בדיקת שירותים פרטיים.
-
Enable the Cloud Run Admin API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.אחרי שמפעילים את Cloud Run Admin API, נוצר באופן אוטומטי חשבון השירות שמוגדר כברירת מחדל ב-Compute Engine.
התפקידים הנדרשים
כדי לבצע פריסה ממקור, אתם או האדמין שלכם צריכים להקצות לחשבון הפריסה את תפקידי ה-IAM הבאים.
לוחצים כדי לראות את התפקידים הנדרשים לחשבון הפריסה
כדי לקבל את ההרשאות שנדרשות לבנייה ולפריסה ממקור, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
- Cloud Run Source Developer (
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 שלכם מתקשר עםGoogle Cloud ממשקי API, כמו ספריות לקוח ב-Cloud, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.
שפות נתמכות
בנוסף למקורות עם קובץ Dockerfile, אפשר לפרוס ממקור בשפות הבאות באמצעות buildpacks של Google Cloud:
| זמן ריצה | פריסת המקור | הגדרות אישיות |
|---|---|---|
| Go | פריסת שירות Go | הגדרת Go buildpacks |
| Node.js | פריסת שירות Node.js | הגדרת buildpacks של Node.js |
| Python | פריסת שירות Python | הגדרת Python buildpacks |
| Java (כולל Kotlin, Groovy, Scala) |
פריסת שירות Java | הגדרת Java buildpacks |
| .NET | פריסת שירות .NET | הגדרת buildpacks של .NET |
| Ruby | פריסת שירות Ruby | הגדרת Ruby buildpacks |
| PHP | פריסת שירות PHP | הגדרת buildpacks של PHP |
| OS בלבד | פריסת שירות Go | הגדרת זמן ריצה למערכת ההפעלה בלבד |
מידע נוסף על גרסאות שפה נתמכות
פריסה מקוד המקור באמצעות build
בקטע הזה מוסבר איך להשתמש ב-Buildpacks של Google Cloud וב-Cloud Build כדי ליצור באופן אוטומטי קובצי אימג' של קונטיינרים מקוד המקור שלכם, בלי שתצטרכו להתקין את Docker במחשב או להגדיר Buildpacks או Cloud Build.
מגבלות
- הפריסה ממקור משתמשת ב-Artifact Registry וב-Cloud Build, ולכן התכונה הזו זמינה רק באזורים שנתמכים על ידי Artifact Registry ו-Cloud Build.
- פריסה מהמקור היא תכונה נוחה, אבל היא לא מאפשרת התאמה אישית מלאה של הבנייה. כדי לקבל יותר שליטה, אפשר ליצור את קובץ האימג' של הקונטיינר באמצעות Cloud Build, למשל באמצעות
gcloud builds submit, ואז לפרוס את קובץ האימג' של הקונטיינר באמצעות, למשל,gcloud run deploy --image. - כשפורסים מקוד המקור באמצעות חבילות ה-buildpack של Google Cloud, תאריך העדכון האחרון של קובצי קוד המקור מוגדר ל-1 בינואר 1980. זו התנהגות ברירת המחדל של buildpacks, והיא נועדה לתמוך בבנייה שניתן לשחזר. בהתאם למסגרת השפה שלכם, זה יכול להשפיע על שמירת קבצים סטטיים במטמון בצד הדפדפן. אם הבקשה שלך מושפעת מהבעיה הזו, Google ממליצה להשבית את כותרות ה-HTTP
etagו-Last-Modifiedבאפליקציה. - כשפורסים ממקור באמצעות buildpacks של Google Cloud, תמיד נעשה שימוש ב-
gcr.io/buildpacks/builder:latest. אם השפה המועדפת או הגדרות מערכת ההפעלה לא זמינות ב-latest, משתמשים ב-builder ספציפי כדי ליצור קובץ אימג' של אפליקציה באמצעות ה-builder המועדף. אפשר לפרוס את השירות ממקור באמצעות Kotlin ושפות אחרות של JVM, כמו Java. השפה שבה אתם משתמשים חייבת לעמוד בכללים הבאים:
- אפשר ליצור את האפליקציה באמצעות Maven או Gradle.
- קובץ ה-build מכיל את כל הפלאגינים שנדרשים כדי ליצור מחלקות מוצרים.
לפני שמבצעים פריסה באמצעות build
לפני שמבצעים פריסה מהמקור באמצעות build:
פועלים לפי השלבים בקטע לפני שמתחילים.
-
Enable the Cloud Build API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
התפקידים הנדרשים
כדי לבצע פריסה ממקור באמצעות build, אתם או האדמין שלכם צריכים להעניק לחשבון השירות של Cloud Build את תפקידי ה-IAM הבאים.
לחצו כדי לראות את התפקידים הנדרשים לחשבון השירות של Cloud Build
Cloud Build משתמש אוטומטית בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine כחשבון השירות שמוגדר כברירת מחדל ב-Cloud Build כדי לבנות את קוד המקור ואת משאב Cloud Run, אלא אם משנים את ההתנהגות הזו. כדי ש-Cloud Build יוכל לבצע 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 במספר הפרויקט ואת PROJECT_ID במזהה הפרויקט. Google CloudGoogle Cloudהוראות מפורטות לאיתור מזהה הפרויקט ומספר הפרויקט מופיעות במאמר יצירה וניהול של פרויקטים.
הענקת תפקיד ה-builder ב-Cloud Run לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine לוקחת כמה דקות עד שהיא מופצת.
רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run שלכם מתקשר עםGoogle Cloud ממשקי API, כמו ספריות לקוח ב-Cloud, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.
פריסה עם build
כדי לבצע פריסה מקוד מקור, לוחצים על הכרטיסייה עם ההוראות לשימוש בכלי הרצוי.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
עוברים לספריית קובצי המקור. ספריית קובצי המקור משתמשת ב-Dockerfile אם הוא קיים, אבל הוא לא נדרש.
יוצרים ופורסים את השירות:
gcloud run deploy SERVICE --source .
מחליפים את
SERVICEבשם שרוצים לתת לשירות.משיבים
yכשמופיעה בקשה להתקנת ממשקי API נדרשים. צריך לעשות את זה רק פעם אחת לכל פרויקט. אם לא הגדרתם ערכי ברירת מחדל לפלטפורמה ולאזור כמו שמתואר בדף ההגדרה, תצטרכו להזין אותם בתשובה להנחיות אחרות.מחכים לסיום ה-build והפריסה. בסיום, תוצג הודעה על הצלחה ב-Cloud Run.
מתקינים את הגרסה העדכנית של Gemini CLI באחת מסביבות הפיתוח הבאות:
- טרמינל
- Cloud Shell
- VS Code באמצעות מצב הסוכן של Gemini Code Assist (ראו את הכרטיסייה VS Code)
מתקינים את התוסף Cloud Run:
gemini extensions install https://github.com/GoogleCloudPlatform/cloud-run-mcp
מתחברים ל-Google Cloud CLI:
gcloud auth login
מגדירים Application Default Credentials:
gcloud auth application-default login
עוברים לספריית קוד המקור.
מפעילים את Gemini CLI:
gemini
יוצרים ופורסים את השירות:
/deploy
- אם תתבקשו לציין את Google Cloud הפרויקט, הזינו את שם הפרויקט.
- אם מוצגת בקשה לבחור כלי, בוחרים באפשרות
deploy_local_folder.
מחכים לסיום ה-build והפריסה. בסיום, תוצג הודעה על הצלחה ב-Cloud Run.
עוברים לספריית קובצי המקור. ספריית קובצי המקור משתמשת ב-Dockerfile אם הוא קיים, אבל זה לא חובה.
בספריית הפרויקט, יוצרים קובץ
compose.yamlעם הגדרות השירות.services: web: build: . ports: - "8080:8080"
אפשר גם לציין אפשרויות הגדרה נוספות, כמו משתני סביבה, סודות והצמדות של נפחים.
כדי לפרוס את השירותים, מריצים את הפקודה
gcloud beta run compose up:gcloud beta run compose up compose.yamlמגיבים
yלכל ההנחיות להתקנת הרכיבים הנדרשים או להפעלת ממשקי API.אופציונלי: הפיכת השירות לציבורי אם רוצים לאפשר גישה לשירות ללא אימות.
אחרי הפריסה, הגרסה הזו של השירות משרתת 100% מהתנועה.
Cloud Code
כדי לבצע פריסה ממקור באמצעות Cloud Code, אפשר לקרוא את המדריכים ל-IntelliJ ול-Visual Studio Code.
Gemini CLI
משתמשים בפקודה /deploy בכלי Gemini CLI כדי לפרוס שירות Cloud Run מקוד מקור.
כדי להשתמש ב-Gemini CLI עם התוסף Cloud Run, צריך לבצע את השלבים הבאים:
MCP
כדי לפרוס שירות Cloud Run מקוד מקור מלקוח Model Context Protocol (MCP), צריך להתקין את שרת Model Context Protocol (MCP) של Cloud Run.
הוראות ההתקנה משתנות בהתאם ללקוח ה-MCP. לרוב, צריך להוסיף את השורות הבאות לקובץ JSON של ההגדרות:
"mcpServers":{ "cloud-run": { "command": "npx", "args": ["-y", "@google-cloud/cloud-run-mcp"] } }
פיתוח נייטיב
אתם יכולים לאחסן את מפרט ה-Compose בקובץ YAML ואז לפרוס אותו מקוד המקור כשירות Cloud Run באמצעות פקודה אחת של gcloud.
אחרי הפריסה, מוצגת כתובת ה-URL של שירות Cloud Run. מעתיקים את כתובת ה-URL הזו ומדביקים אותה בדפדפן כדי לראות את הקונטיינר הפועל. אפשר להשבית את אימות ברירת המחדל במסוף Google Cloud .
פריסה מקוד המקור ללא בנייה
אפשר לפרוס ישירות ל-Cloud Run ארטיפקטים של קוד מקור, בלי לעבור דרך שלב Cloud Build. במקום ליצור תמונת קונטיינר ממקור, אפשר להעלות ארכיון ארוז מראש של האפליקציה ישירות לקטגוריה של Cloud Storage. Cloud Run לוקח את הארכיון הזה ומריץ אותו ישירות על תמונת בסיס. הגישה הזו מאפשרת קיצור משמעותי של זמני הפריסה.
מגבלות
אפשר לפרוס למקור בלי לבצע build רק את הפריטים הבאים:
- שירותי Cloud Run.
- זמני ריצה נתמכים (אין תמיכה ב-Dockerfile).
- ארכיון המקור (.tar.gz) <= 250 MiB.
- קובץ בינארי (לדוגמה, קובץ בינארי של Go) או סקריפט (לדוגמה, סקריפט Python) חייבים להיות תואמים לארכיטקטורת x86.
- המקור צריך להיות עצמאי, עם כל התלות שכלולה בחבילה. תמונת הבסיס של זמן הריצה מכילה רק את מערכת ההפעלה המינימלית וכמה ספריות שפה.
לפני שמבצעים פריסה ללא בנייה
כדי להשתמש בתכונה 'פריסה ללא בנייה':
- חשוב לוודא שפעלתם לפי השלבים בקטע לפני שמתחילים.
מפעילים את Cloud Run API ואת Cloud Storage API:
gcloud services enable run.googleapis.com \ storage.googleapis.com
לפני הפריסה, צריך להתקין את התלויות של האפליקציה באופן מקומי, כי הן לא יותקנו (לא תתבצע בנייה).
פריסה ללא build
בקטע הזה מוסבר איך לפרוס את הארטיפקט ישירות ל-Cloud Run בלי להשתמש ב-build.
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-full/runtimes/nodejs24.אפשר גם לפרוס קובץ בינארי שעבר קומפילציה מראש בלי להגדיר רכיבי זמן ריצה נוספים שספציפיים לשפה, באמצעות תמונת הבסיס של מערכת ההפעלה בלבד, כמו
osonly24. מידע נוסף זמין במאמר בנושא זמן ריצה של מערכת הפעלה בלבד במסמכי התיעוד של חבילות buildpack.
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-full/runtimes/nodejs24.אפשר גם לפרוס קובץ בינארי שעבר קומפילציה מראש בלי להגדיר רכיבי זמן ריצה נוספים שספציפיים לשפה, באמצעות תמונת הבסיס של מערכת ההפעלה בלבד, כמו
osonly24. מידע נוסף זמין במאמר בנושא זמן ריצה של מערכת הפעלה בלבד במסמכי התיעוד של חבילות buildpack.
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-full/runtimes/nodejs24.אפשר גם לפרוס קובץ בינארי שעבר קומפילציה מראש בלי להגדיר רכיבי זמן ריצה נוספים שספציפיים לשפה, באמצעות תמונת הבסיס של מערכת ההפעלה בלבד, כמו
osonly24. מידע נוסף זמין במאמר בנושא זמן ריצה של מערכת הפעלה בלבד במסמכי התיעוד של חבילות buildpack.BUCKET_NAME: השם של הקטגוריה שיצרתם קודם. לדוגמה,
my-bucket.ARCHIVE_NAME: הנתיב המקומי לארכיון שיצרתם קודם. לדוגמה,
app.tar.gz.PROJECT-ID: מזהה הפרויקט ב- Google Cloud .
REGION: Google Cloud האזור של השירות.
SERVICE_NAME: השם של שירות Cloud Run. שמות של שירותים צריכים להיות באורך של עד 49 תווים, והם צריכים להיות ייחודיים לכל אזור ופרויקט.
דוגמאות לפריסה ממקור ללא בנייה
בקטע הזה מוצגות דוגמאות לפריסה ממקור בלי להשתמש ב-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 \ --command=node \ --args=index.js
מחליפים את מה שכתוב בשדות הבאים:
-
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 \ --command=python \ --args=main.py \ --set-env-vars PYTHONPATH=./vendor
מחליפים את REGION באזור שבו השירות שלכם נפרס.
Go
יצירה ופריסה של שירות Go באמצעות זמן ריצה של מערכת ההפעלה בלבד:
יוצרים ספרייה חדשה בשם
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 עם המקור המצורף. אפשר גם לכלול את
-p 8080:8080אם צריך להשתמש ב-curl ממחשב מארח.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.
אוטומציה של בנייה מהמקור
כדי להימנע משינויים לא מתועדים במקור המקומי, Google ממליצה לבצע פריסה אוטומטית כששינויים נדחפים למאגר Git. כדי להקל על התהליך, אפשר לחבר ולהגדיר פריסה רציפה לשירות Cloud Run. אם מקשרים את מאגרי GitHub ל-Cloud Run, אפשר להגדיר בנייה ולפרוס את המאגרים בלי לכתוב Dockerfiles או קובצי בנייה.
כדי להגדיר בנייה אוטומטית, צריך להגדיר אוטומציה כמו שמתואר בדף בנושא בנייה רציפה, ולוודא שבוחרים באפשרות לבניית מקור באמצעות חבילות buildpack.השבתת בדיקת התקינות של הפריסה
כברירת מחדל, 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 והפריסה של שירותי Cloud Run לאוטומטיים באמצעות טריגרים של Cloud Build: