Cloud Run サンドボックスは、第 2 世代環境の既存のサービス内で、信頼できないコードの実行や AI エージェントなどのツールの実行を行うための高速で安全な分離環境を提供します。サンドボックスはレイテンシに対して高度に最適化されており、コンテナと同じインスタンス内で実行され、割り当てられた CPU とメモリを共有します。
このページでは、コンテナでサンドボックスを構成する方法について説明します。CLI を使用してサンドボックスとやり取りするコードの作成の詳細については、Cloud Run でのコード実行をご覧ください。
始める前に
- Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $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.
- gcloud CLI をインストールして初期化します。
- 第 2 世代の実行環境に Cloud Run サービスをデプロイします。
必要なロール
Cloud Run サービスの構成とデプロイに必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
- Cloud Run サービスに対する Cloud Run デベロッパー(
roles/run.developer)ロール - サービス ID に対するサービス アカウント ユーザー(
roles/iam.serviceAccountUser)ロール
ソースコードからサービスまたは関数をデプロイする場合は、プロジェクトと Cloud Build サービス アカウントで追加のロールが付与されている必要があります。
Cloud Run に関連付けられている IAM ロールと権限のリストについては、Cloud Run IAM ロールと Cloud Run IAM 権限をご覧ください。Cloud Run サービスがGoogle Cloud APIs(Cloud クライアント ライブラリなど)と連携している場合は、サービス ID の構成ガイドをご覧ください。ロールの付与の詳細については、デプロイ権限とアクセスの管理をご覧ください。
サンドボックスを有効にする
構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に設定されます。
サンドボックスを有効にすると、Cloud Run サービスは第 2 世代の実行環境にデプロイされます。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
gcloud run services replaceコマンドは、service.yamlファイルが存在する場合はデフォルトでそのファイルを使用します。
サンドボックスは、ホスト コンテナに割り当てられた 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
gcloud run services replaceコマンドは、service.yamlファイルが存在する場合はデフォルトでそのファイルを使用します。
サンドボックスを起動する
サンドボックスを有効にすると、コンテナ実行環境内からサンドボックスを起動できます。サンドボックス バイナリは /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
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"
このガイドの例では、絶対パス /usr/local/gcp/bin/sandbox ではなく sandbox コマンドを使用します。
使用可能なコマンドの完全なリストを表示するには、/usr/local/gcp/bin/sandbox -h コマンドを実行します。
サービスからサンドボックスで信頼できないコードを実行するには、Cloud Run でのコード実行をご覧ください。