カスタム コンテナ サンドボックスの概要

標準サンドボックスには、コード実行やコンピュータの使用など、特定のタスクに対応するターンキー ソリューションを提供する事前定義済みのライブラリのセットが用意されています。 特定の依存関係、ライブラリ、カスタムツール、特殊なデータプレーン インターフェースを必要とするエージェント ワークロードの場合は、独自のコンテナ イメージ(Bring Your Own Container、BYOC とも呼ばれます)を指定できます。この機能を使用すると、サンドボックス環境の安全な範囲内でカスタム ワークロードを実行できます。

始める前に

プロジェクト、イメージ リポジトリ、権限を設定します。

コンテナ イメージを設定する

  1. コンテナ イメージをビルドする: カスタム 環境を含む Docker イメージを作成します。Gemini Enterprise Agent Platform サンドボックスとの互換性を確保するには、カスタム イメージが次の要件を満たしている必要があります。

    • OS: Linux ベース(Debian、Ubuntu など)。
    • ランナー: Gemini Enterprise Agent Platform がコマンドを実行するために使用できる互換性のあるランナーまたはエントリ ポイントを含める必要があります。
    • セキュリティ: イメージは安全な分離されたサンドボックス内で実行されるため、ルート権限や制限された システム リソースへのアクセスは必要ありません。
  2. Artifact Registry にイメージを追加する: Agent Platform がアクセスできる Google Cloud Artifact Registry にイメージを追加します。サンドボックスをプロビジョニングするときに、Artifact Registry イメージ URI を指定します。

権限を構成する

Agent Sandbox が Artifact Registry からカスタム コンテナ イメージを pull できるようにするには、 イメージを含むリポジトリに対する **Artifact Registry 読み取り** ロール(roles/artifactregistry.reader)を Agent Sandbox サービス エージェントに付与します。

  • Agent Sandbox サービス エージェント: service-<var>PROJECT_NUMBER</var>@gcp-sa-vertex-sandbox.iam.gserviceaccount.com

<var>PROJECT_NUMBER</var> は、プロジェクトのプロジェクト番号に置き換えます。

ロールの付与の詳細については、サービス エージェントに権限を付与する をご覧ください

Agent Platform インスタンスを作成する

Agent Platform インスタンスがない場合は、作成します。

import vertexai
client = vertexai.Client(
    project='PROJECT_ID',
    location='LOCATION',
    http_options={
        "api_version": "v1beta1",
    }
)
agent_instance = client.agent_engines.create()
agent_instance_name = agent_instance.api_resource.name

次のように置き換えます。

カスタム コンテナ サンドボックスを作成する

カスタム コンテナ サンドボックスを作成するには、まずサンドボックス テンプレート(SandboxEnvironmentTemplate)を作成します。テンプレートを作成すると、Agent Platform はテンプレートに関連付けられた事前ウォーミング プールを作成し、起動時間を短縮して信頼性を高めます。

テンプレートを作成するには、カスタム コンテナの構成を指定する SandboxEnvironmentTemplate リソースを定義します。

  • コンテナ イメージ: Artifact Registry でホストされている事前構築済みのカスタム イメージの URI。
  • ポート: コンテナから公開するネットワーク ポート。

テンプレートを作成する

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

operation = templates_client.create(
    name=agent_instance_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.agent_engines.sandboxes.create(
    name=agent_instance_name,
    config={
        "sandbox_environment_template": template_name,
        "display_name": "DISPLAY_NAME"
    }
)
sandbox = create_operation.response
print(f"Sandbox environment provisioned: {sandbox.name}")

次のステップ