סקירה כללית על ארגז חול של מאגר תגים בהתאמה אישית

ארגזי החול הרגילים מספקים קבוצה מוגדרת מראש של ספריות, שכוללות פתרונות מוכנים לשימוש למשימות ספציפיות כמו הפעלת קוד ושימוש במחשב. עבור עומסי עבודה מבוססי-סוכנים שדורשים תלות ספציפית, ספריות, כלים מותאמים אישית או ממשקי מישור נתונים מיוחדים, אתם יכולים לספק תמונות קונטיינר משלכם (שנקראות גם 'הבאת קונטיינר משלך' או BYOC). התכונה הזו מאפשרת להריץ עומסי עבודה מותאמים אישית בגבולות המאובטחים של סביבת ארגז חול.

לפני שמתחילים

מגדירים את הפרויקט, את מאגר התמונות ואת ההרשאות.

הגדרת קובץ אימג' של קונטיינר

  1. יצירת קובץ אימג' של קונטיינר: יצירת קובץ אימג' של Docker שמכיל את הסביבה המותאמת אישית. כדי להבטיח תאימות לארגזי חול של Gemini Enterprise Agent Platform, התמונה המותאמת אישית צריכה לעמוד בדרישות הבאות:

    • מערכת הפעלה: מבוססת-Linux (לדוגמה, Debian או Ubuntu).
    • ‫Runner: צריך לכלול runner או נקודת כניסה תואמים ש-Gemini Enterprise Agent Platform יכולה להשתמש בהם כדי להריץ פקודות.
    • אבטחה: אסור לדרוש הרשאות רוט או גישה למשאבי מערכת מוגבלים, כי התמונה תפעל בארגז חול מאובטח ומבודד.
  2. הוספת תמונה ל-Artifact Registry: מוסיפים את התמונה ל- Google Cloud Artifact Registry, כדי ש-Agent Platform תוכל לגשת אליה. כשמפעילים את ארגז החול, צריך לספק URI של תמונה ב-Artifact Registry.

הגדרת ההרשאות

כדי לאפשר לארגז החול של הסוכן למשוך את קובץ האימג' של הקונטיינר בהתאמה אישית מ-Artifact Registry, צריך להקצות את התפקיד Artifact Registry Reader (roles/artifactregistry.reader) במאגר שמכיל את קובץ האימג' לסוכן השירות של ארגז החול של הסוכן:

  • סוכן שירות של ארגז חול של סוכנים: service-PROJECT_NUMBER@gcp-sa-vertex-sandbox.iam.gserviceaccount.com

מחליפים את PROJECT_NUMBER במספר הפרויקט.

מידע נוסף על מתן תפקידים זמין במאמר איך מעניקים הרשאות לסוכני שירות.

יצירת מופע של Agent Platform

אם אין לכם מופע של Agent Platform, אתם צריכים ליצור אחד.

import agentplatform
client = agentplatform.Client(
    project='PROJECT_ID',
    location='LOCATION',
    http_options={
        "api_version": "v1beta1",
    }
)
remote_agent = client.runtimes.create()
remote_agent_name = remote_agent.api_resource.name

מחליפים את מה שכתוב בשדות הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • ‫LOCATION: האזור Google Cloud של מופע Agent Platform. אזורים נתמכים

יצירת ארגז חול מותאם אישית של מאגר תגים

כדי ליצור ארגז חול מותאם אישית לקונטיינר, קודם יוצרים תבנית לארגז חול (SandboxEnvironmentTemplate). אחרי שיוצרים תבנית, Agent Platform יוצר מאגרי מידע מחוממים מראש שמשויכים לתבנית כדי לספק זמני הפעלה מהירים ואמינים יותר.

כדי ליצור תבנית, מגדירים משאב SandboxEnvironmentTemplate שמציין את ההגדרות של מאגר התגים המותאם אישית:

  • קובץ אימג' של קונטיינר: ה-URI של תמונה מותאמת אישית שנבנתה מראש ומתארחת ב-Artifact Registry.
  • יציאות: יציאות רשת לחשיפה מהקונטיינר.

יצירת התבנית

# Create a custom sandbox template
templates_client = client.sandboxes.templates

operation = templates_client.create(
    name=remote_agent_name,
    display_name="DISPLAY_NAME",
    config={
        "custom_container_environment": {
            "custom_container_spec": {
                "image_uri": "IMAGE_LOCATION"
            },
            "resources": {
                "requests": {
                    "cpu": "1",
                    "memory": "500Mi"
                },
                "limits": {
                    "cpu": "1",
                    "memory": "500Mi"
                }
            },
            "ports": [
                {
                    "port": PORT_NUMBER,
                    "protocol": "TCP"
                }
            ]
        },
        "egress_control_config": {
            "internet_access": True
        }
    }
)
template_name = operation.response.name
print(f"Template created: {template_name}")

יצירת ארגז החול

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

# Provision a sandbox referencing the template
create_operation = client.sandboxes.create(
    name=remote_agent_name,
    config={
        "sandbox_environment_template": template_name,
        "display_name": "DISPLAY_NAME"
    }
)
sandbox = create_operation.response
print(f"Sandbox environment provisioned: {sandbox.name}")

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