ארגזי חול של Cloud Run מספקים סביבה מהירה, מאובטחת ומבודדת להרצת קוד לא מהימן או להפעלת כלים, כמו סוכני AI, בשירות הקיים בסביבה מהדור השני. ארגזי חול עוברים אופטימיזציה גבוהה לזמן אחזור, והם פועלים באותו מופע כמו הקונטיינר, ומשתפים את הזיכרון וה-CPU שהוקצו לו.
בדף הזה מוסבר איך להגדיר ארגזי חול במאגר התגים. פרטים על כתיבת קוד לאינטראקציה עם ארגז החול באמצעות CLI מופיעים במאמר הרצת קוד ב-Cloud Run.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- מתקינים ומפעילים את ה-CLI של gcloud.
- פריסה של שירות ב-Cloud Run בסביבת הביצוע מהדור השני.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להגדרה ולפריסה של שירותי 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, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.
הפעלת ארגזי חול
כל שינוי בהגדרות מוביל ליצירה של גרסה חדשה. גם גרסאות מתוקנות עתידיות יקבלו את הגדרת התצורה הזו באופן אוטומטי, אלא אם תבצעו עדכונים מפורשים כדי לשנות אותה.
כשמפעילים ארגזי חול, השירות של Cloud Run נפרס בסביבת ההפעלה מהדור השני. כדי להפעיל ארגזי חול בשירותי Cloud Run, משתמשים ב-Google Cloud CLI או בהגדרת YAML:
gcloud
כדי לפרוס או לעדכן את השירות, מציינים את הדגל --sandbox-launcher:
כדי לפרוס שירות חדש, מריצים את הפקודה הבאה:
gcloud beta run deploy SERVICE --image IMAGE_URL --sandbox-launcher
מחליפים את מה שכתוב בשדות הבאים:
- 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
כדי לעדכן שירות קיים, מריצים את הפקודה הבאה:
gcloud beta run services update SERVICE --sandbox-launcher
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. כדי לעדכן שירות קיים, מורידים את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
מעדכנים את קובץ ה-YAML של השירות כך שיכלול את מאפיין
sandboxLauncherעם הערךtrueבתוך הגדרת הקונטיינר:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/launch-stage: BETA spec: template: spec: containers: - name: CONTAINER image: IMAGE_URL sandboxLauncher: true port: 8080מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של שירות Cloud Run.
- CONTAINER: השם של הקונטיינר.
- 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
יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
אם קיים קובץ
service.yaml, הפקודהgcloud run services replaceמשתמשת בו כברירת מחדל.
ארגזי חול חולקים את המעבד (CPU) והזיכרון שהוקצו למאגר המארח. חשוב לוודא שהמגבלות של הקונטיינר הראשי לגבי CPU וזיכרון מספיקות כדי להכיל את האפליקציה ואת כל ארגזי החול הפעילים שמופעלים בו-זמנית.
השבתת ארגזי חול
כדי להשבית את האפשרות להפעיל ארגז חול בשירות, משתמשים ב-Google Cloud CLI או בהגדרת YAML:
gcloud
כדי לעדכן את השירות באמצעות הדגל --no-sandbox-launcher, מריצים את הפקודה הבאה:
gcloud beta run services update SERVICE --no-sandbox-launcher
מחליפים את SERVICE בשם השירות.
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. כדי לעדכן שירות קיים, מורידים את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
מעדכנים את קובץ ה-YAML של השירות כדי להסיר את המאפיין
sandboxLauncherבהגדרת מאגר התגים:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: containers: - name: CONTAINER image: IMAGE_URL port: 8080מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: השם של שירות Cloud Run.
- CONTAINER: השם של הקונטיינר.
- 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
יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
אם קיים קובץ
service.yaml, הפקודהgcloud run services replaceמשתמשת בו כברירת מחדל.
הפעלת ארגזי חול
אחרי שמפעילים את ארגזי החול, אפשר להפעיל אותם מתוך סביבת ההפעלה של מאגר התגים. קובץ ה-sandbox הבינארי נמצא ב-/usr/local/gcp/bin/sandbox.
אפשר להריץ את הקובץ הבינארי על ידי הפניה לנתיב המוחלט שלו בקוד המקור. לדוגמה, כדי להדפיס את Hello בתוך ארגז החול המבודד, בוחרים באחת מהאפשרויות הבאות:
Node.js
כדי להריץ את פקודת הסביבה המבודדת מאפליקציית Node.js, צריך לכלול את הקוד הבא:
exec(`/usr/local/gcp/bin/sandbox do -- /bin/echo "Hello"`, (e, stdout, stderr) => {
res.send({ stdout, stderr });
});
Python
כדי להריץ את פקודת הסביבה החולית מאפליקציית Python, צריך לכלול את הקוד הבא:
import subprocess
result = subprocess.run(
["/usr/local/gcp/bin/sandbox", "do", "--", "/bin/echo", "Hello"],
capture_output=True,
text=True,
)
return {"stdout": result.stdout, "stderr": result.stderr}
המשך
כדי להריץ את פקודת ארגז החול מאפליקציית Go, מוסיפים את הקוד הבא:
cmd := exec.Command("/usr/local/gcp/bin/sandbox", "do", "--", "/bin/echo", "Hello")
out, err := cmd.CombinedOutput()
Sandbox CLI
כדי להריץ את פקודת ארגז החול ישירות משורת הפקודה, מריצים את הפקודה הבאה:
/usr/local/gcp/bin/sandbox do -- /bin/echo "Hello"
בדוגמאות במדריך הזה נעשה שימוש בפקודה sandbox במקום בנתיב המוחלט שלה /usr/local/gcp/bin/sandbox.
כדי לראות את הרשימה המלאה של הפקודות הזמינות, מריצים את הפקודה /usr/local/gcp/bin/sandbox -h.
כדי להריץ קוד לא מהימן בארגז חול מהשירות שלכם, אפשר לעיין במאמר בנושא הרצת קוד ב-Cloud Run.