標準サンドボックスには、コード実行やコンピュータの使用などの特定のタスクに対応するターンキー ソリューションを提供する、事前定義されたライブラリのセットが用意されています。特定の依存関係、ライブラリ、カスタムツール、または専用のデータプレーン インターフェースを必要とするエージェント ワークロードの場合は、独自のコンテナ イメージ(独自のコンテナ(BYOC)とも呼ばれます)を指定できます。この機能を使用すると、サンドボックス環境の安全な境界内でカスタム ワークロードを実行できます。
始める前に
プロジェクト、イメージ リポジトリ、権限を設定します。
コンテナ イメージを設定する
コンテナ イメージをビルドする: カスタム環境を含む Docker イメージを作成します。Gemini Enterprise Agent Platform サンドボックスとの互換性を確保するには、カスタム イメージが次の要件を満たしている必要があります。
- OS: Linux ベース(Debian や Ubuntu など)。
- ランナー: Gemini Enterprise Agent Platform がコマンドの実行に使用できる互換性のあるランナーまたはエントリ ポイントを含める必要があります。
- セキュリティ: イメージは安全な分離されたサンドボックス内で実行されるため、ルート権限や制限されたシステム リソースへのアクセスを必要としないようにする必要があります。
Artifact Registry にイメージを追加する: Agent Platform がアクセスできる Google CloudArtifact Registry にイメージを追加します。サンドボックスをプロビジョニングするときに、Artifact Registry イメージ URI を指定します。
権限を構成する
Agent Sandbox が Artifact Registry からカスタム コンテナ イメージを pull できるようにするには、イメージを含むリポジトリに対する Artifact Registry 読み取り(roles/artifactregistry.reader)ロールを Agent Sandbox サービス エージェントに付与します。
- Agent Sandbox サービス エージェント:
service-PROJECT_NUMBER@gcp-sa-vertex-sandbox.iam.gserviceaccount.com
PROJECT_NUMBER は、プロジェクトのプロジェクト番号に置き換えます。
ロールの付与の詳細については、サービス エージェントに権限を付与するをご覧ください。
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
次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。LOCATION: Agent Platform インスタンスの Google Cloud リージョン。サポートされているリージョンをご覧ください。
カスタム コンテナ サンドボックスを作成する
カスタム コンテナ サンドボックスを作成するには、まずサンドボックス テンプレート(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}")
次のステップ
- サンドボックスを管理する方法を学習する。
- サンドボックス テンプレートを管理する方法を学習する。