Cloud Run ist bereits in einer Sandbox ausgeführt und isoliert, was es zum idealen Ort für das Hosting von KI-Agents macht. Wenn Sie Cloud Run-Sandboxes aktivieren, ist das sandbox-Befehlszeilentool in Ihrem Container verfügbar. Mit diesem Befehlszeilentool können Sie nicht vertrauenswürdigen Code, der in einer beliebigen Sprache geschrieben wurde, in einer hochoptimierten Sandbox-Umgebung ausführen, die vom Rest Ihres Containers isoliert ist.
KI-Agents können Sandboxes nutzen, um Unter-Agents sicher auszuführen, Rechenaufgaben zu erledigen oder Browser in einer schnellen, isolierten Umgebung zu öffnen, ohne das Hostsystem zu gefährden.
Cloud Run-Sandboxes bieten die folgenden wichtigen Vorteile:
Schnelle Erstellung: Sandboxes sind interaktiv und können Befehle fast sofort ausführen. Wenn Sie Sandboxes in einer vorhandenen Cloud Run-Ressource erstellen, in der Ihr Agent ausgeführt wird, verkürzt sich die Erstellungszeit im Vergleich zum Erstellen einer neuen Cloud Run-Ressource für jede Aufgabe. So bleibt Ihr Agent reaktionsfähig.
Sicherheit: Sandboxes isolieren die Ausführung von Prozessen. Standardmäßig haben Sandboxes keinen Zugriff auf die übergeordnete Arbeitslast, Umgebungsvariablen, Secrets oder den Metadatenserver Google Cloud . Alle Sandboxes sind vollständig voneinander isoliert.
Zugriffssteuerung und Umgebung: Prozesse werden mit
sudo-Berechtigungen als Nicht-Root-Nutzer ausgeführt. So können Sie während der Ausführung Tools mit Paketmanagern wieapt,pipodernpminstallieren. Die Sandbox-Umgebung ist zwar kurzlebig und wird nach Abschluss gelöscht, Sie können aber persistente Verzeichnisse oder Snapshots verwenden, um bestimmte Arbeitsbereiche zu speichern oder Kartendaten einem Cloud Storage-Bucket zuzuordnen.
Hinweis
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
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.
- Installieren und initialisieren Sie die gcloud CLI.
- Stellen Sie einen Cloud Run-Dienst in der Ausführungsumgebung der zweiten Generation bereit.
Sandboxes aktivieren
Wenn Sie Sandboxes aktivieren, wird Ihr Cloud Run-Dienst in der Ausführungsumgebung der zweiten Generation bereitgestellt. Verwenden Sie die Google Cloud CLI oder eine YAML-Konfiguration, um Sandboxes in Cloud Run-Diensten zu aktivieren:
gcloud
Geben Sie zum Bereitstellen oder Aktualisieren des Dienstes das Flag --sandbox-launcher an:
Führen Sie den folgenden Befehl aus, um einen neuen Dienst bereitzustellen:
gcloud beta run deploy SERVICE --image IMAGE_URL --sandbox-launcher
Ersetzen Sie Folgendes:
- SERVICE: Der Name Ihres Cloud Run-Dienstes.
- IMAGE_URL: ein Verweis auf das Container-Image, z. B.
us-docker.pkg.dev/cloudrun/container/hello:latestWenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat das FormatLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
Führen Sie den folgenden Befehl aus, um einen vorhandenen Dienst zu aktualisieren:
gcloud beta run services update SERVICE --sandbox-launcher
YAML
Wenn Sie einen neuen Dienst erstellen, überspringen Sie diesen Schritt. Wenn Sie einen vorhandenen Dienst aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:
gcloud run services describe SERVICE --format export > service.yaml
Aktualisieren Sie die YAML-Datei Ihres Dienstes, sodass die Containerkonfiguration das Attribut
sandboxLaunchermit dem Werttrueenthält: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: 8080Ersetzen Sie Folgendes:
- SERVICE: Der Name Ihres Cloud Run-Dienstes.
- CONTAINER: Der Name des Containers.
- IMAGE_URL: ein Verweis auf das Container-Image, z. B.
us-docker.pkg.dev/cloudrun/container/hello:latestWenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat das FormatLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
Erstellen oder aktualisieren Sie den Dienst mit dem folgenden Befehl:
gcloud run services replace service.yaml
Der Befehl
gcloud run services replaceverwendet standardmäßig die Dateiservice.yaml, sofern sie vorhanden ist.
Sandboxes nutzen die CPU und den Arbeitsspeicher, die dem Hostcontainer zugewiesen sind. Achten Sie darauf, dass die Limits für CPU und Arbeitsspeicher Ihres Hauptcontainers ausreichen, um sowohl Ihre Anwendung als auch alle aktiven Sandboxes, die Sie gleichzeitig ausführen, zu unterstützen.
Sandboxes deaktivieren
Wenn Sie die Möglichkeit zum Starten einer Sandbox in Ihrem Dienst deaktivieren möchten, verwenden Sie die Google Cloud CLI oder eine YAML-Konfiguration:
gcloud
Aktualisieren Sie den Dienst mit dem Flag --no-sandbox-launcher, indem Sie den folgenden Befehl ausführen:
gcloud beta run services update SERVICE --no-sandbox-launcher
Ersetzen Sie SERVICE durch den Namen Ihres Dienstes.
YAML
Wenn Sie einen neuen Dienst erstellen, überspringen Sie diesen Schritt. Wenn Sie einen vorhandenen Dienst aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:
gcloud run services describe SERVICE --format export > service.yaml
Aktualisieren Sie die YAML-Datei Ihres Dienstes, um das Attribut
sandboxLauncheraus der Containerkonfiguration zu entfernen:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: containers: - name: CONTAINER image: IMAGE_URL port: 8080Ersetzen Sie Folgendes:
- SERVICE: Der Name Ihres Cloud Run-Dienstes.
- CONTAINER: Der Name des Containers.
- IMAGE_URL: ein Verweis auf das Container-Image, z. B.
us-docker.pkg.dev/cloudrun/container/hello:latestWenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat das FormatLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
Erstellen oder aktualisieren Sie den Dienst mit dem folgenden Befehl:
gcloud run services replace service.yaml
Der Befehl
gcloud run services replaceverwendet standardmäßig die Dateiservice.yaml, sofern sie vorhanden ist.
Sandboxes starten
Nachdem Sie Sandboxes aktiviert haben, können Sie sie in Ihrer Containerausführungsumgebung starten. Die Sandbox-Binärdatei befindet sich unter /usr/local/gcp/bin/sandbox.
Sie können das Binärprogramm ausführen, indem Sie in Ihrem Quellcode auf den absoluten Pfad verweisen. Wenn Sie beispielsweise Hello in Ihrer isolierten Sandbox drucken möchten, wählen Sie eine der folgenden Optionen aus:
Node.js
Fügen Sie den folgenden Code ein, um den Sandbox-Befehl über eine Node.js-Anwendung auszuführen:
exec(`/usr/local/gcp/bin/sandbox do -- /bin/echo "Hello"`, (e, stdout, stderr) => {
res.send({ stdout, stderr });
});
Python
Wenn Sie den Sandbox-Befehl über eine Python-Anwendung ausführen möchten, fügen Sie den folgenden Code ein:
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
Fügen Sie den folgenden Code ein, um den Sandbox-Befehl über eine Go-Anwendung auszuführen:
cmd := exec.Command("/usr/local/gcp/bin/sandbox", "do", "--", "/bin/echo", "Hello")
out, err := cmd.CombinedOutput()
Sandbox-Befehlszeile
Führen Sie den folgenden Befehl aus, um den Sandbox-Befehl direkt über die Befehlszeile auszuführen:
/usr/local/gcp/bin/sandbox do -- /bin/echo "Hello"
In den Beispielen in diesem Leitfaden wird der Befehl sandbox anstelle des absoluten Pfads /usr/local/gcp/bin/sandbox verwendet.
Wenn Sie die vollständige Liste der verfügbaren Befehle aufrufen möchten, führen Sie den Befehl /usr/local/gcp/bin/sandbox -h aus.
Sandbox-Befehlszeilenfunktionen verwenden
Das sandbox-Befehlszeilentool enthält Befehle zum Ausführen, Konfigurieren und Verwalten von Sandboxes.
Befehl in der Sandbox ausführen
Mit dem Befehl sandbox do können Sie eine Anleitung in einer neuen, kurzlebigen Sandbox ausführen. Mit dem Befehl sandbox do werden folgende Aufgaben ausgeführt:
- Startet eine Sandbox-Umgebung (
sandbox run). - Führt den von Ihnen angegebenen Befehl (
sandbox exec) aus. - Löscht die Sandbox nach erfolgreicher Ausführung (
sandbox delete).
Wenn Sie beispielsweise eine mathematische Berechnung in der Sandbox durchführen möchten, führen Sie die folgenden Code-Snippets für Ihre bevorzugte Sprache aus. Achten Sie darauf, dass alle Befehle oder Tools, die Sie ausführen, z. B. python3, in Ihrem Container-Image installiert sind:
Node.js
So führen Sie den Sandbox-Befehl über eine Node.js-Anwendung aus:
exec(`sandbox do -- /usr/bin/python3 -c "print(1+2)"`, (e, stdout, stderr) => {
res.send({ stdout, stderr });
});
Python
So führen Sie den Sandbox-Befehl über eine Python-Anwendung aus:
import subprocess
result = subprocess.run(
["sandbox", "do", "--", "/usr/bin/python3", "-c", "print(1+2)"],
capture_output=True,
text=True,
)
return {"stdout": result.stdout, "stderr": result.stderr}
Go
So führen Sie den Sandbox-Befehl über eine Go-Anwendung aus:
cmd := exec.Command("sandbox", "do", "--", "/usr/bin/python3", "-c", "print(1+2)")
out, err := cmd.CombinedOutput()
Sandbox-Befehlszeile
So führen Sie den Sandbox-Befehl direkt über die Befehlszeile aus:
sandbox do -- /usr/bin/python3 -c "print(1+2)"
Wenn Sie einen Befehl über den Namen ohne den absoluten Pfad ausführen, z. B. python3 anstelle von /usr/bin/python3, konfigurieren Sie die Umgebungsvariable PATH in der Sandbox explizit mit dem Flag --env.
Daten über verschiedene Ausführungen hinweg beibehalten
Sandboxes sind standardmäßig sitzungsspezifisch. Wenn Sie Daten über verschiedene Sandbox-Ausführungen hinweg in derselben Cloud Run-Instanz beibehalten möchten, können Sie den Status des Arbeitsbereich-Dateisystems mithilfe von Standard-tar-Archivdateien importieren und exportieren. Alternativ können Sie Bind-Mounts konfigurieren, um Verzeichnisse direkt zwischen dem Host-Container und den Sandbox-Umgebungen freizugeben.
Verwenden Sie die folgenden Flags, wenn Sie den Befehl sandbox do ausführen:
--export-tar: Erfasst geänderte Overlay-Dateien nach Abschluss in einertar-Archivdatei.--import-tar: Dateien werden vor der Ausführung aus einertar-Archivdatei in die Sandbox extrahiert.--sync-tar: Führt eine bidirektionale Synchronisierung durch, indem vor der Ausführung importiert und nach Abschluss exportiert wird.
Wenn Sie beispielsweise Daten zwischen zwei Sandbox-Aufrufen mithilfe von Archivdateien übergeben möchten, führen Sie die folgenden Befehle aus:
Daten in eine Sandbox schreiben und den Status in eine Archivdatei exportieren:
sandbox do --write --export-tar=/tmp/work.tar \ -- /usr/bin/bash -c "mkdir -p /tmp/work && echo 'task-complete' > /tmp/work/status.txt"Importieren Sie die Archivdatei in einem nachfolgenden Aufruf, um die Daten abzurufen:
sandbox do --write --import-tar=/tmp/work.tar \ -- /usr/bin/bash -c "cat /tmp/work/status.txt"
Alternativ können Sie mit --sync-tar=/tmp/work.tar den vorhandenen Archivstatus automatisch importieren und neue Änderungen in einem einzigen Befehl exportieren.
Wenn ein Sandbox-Prozess beendet wird, löscht Cloud Run temporäre Overlay-Dateien, die nicht in eine Archivdatei exportiert wurden, dauerhaft.
Befehl im Hintergrund ausführen
Verwenden Sie das Flag --detach, um Prozesse mit langer Laufzeit, monitorlose Browser oder Hintergrundserver auszuführen, z. B. eine Hintergrund-Agent-Schleife, die kontinuierlich auf eingehende Anfragen wartet.
Führen Sie beispielsweise den folgenden Befehl aus, um eine getrennte Sandbox mit einem inaktiven oder Hintergrundprogramm zu starten:
sandbox run my-web-server --detach -- /usr/bin/long_running_or_idle_program
Mit dem Flag detach können Sie dieselbe Sandbox für mehrere Tests wiederverwenden. Wenn Sie mit einer ausgeführten, getrennten Sandbox interagieren oder zusätzliche Befehle darin ausführen möchten, verwenden Sie den Befehl sandbox exec und geben Sie die Sandbox anhand ihres Namens an.
Wenn Sie beispielsweise einen Testbefehl in Ihrer vorhandenen my-web-server-Hintergrund-Sandbox ausführen möchten, verwenden Sie den folgenden Befehl:
sandbox exec my-web-server -- /usr/bin/python3 -c "print('test-complete')"
Umgebungsvariablen konfigurieren
Umgebungsvariablen lassen sich in Sandboxes genauso konfigurieren wie in anderen Containern. Sandboxen übernehmen keine Umgebungsvariablen vom Hostcontainer. Sie müssen sie explizit mit dem Flag --env angeben, wenn Sie den Befehl sandbox ausführen.
Wenn Sie beispielsweise eine Konfigurationsvariable in eine Sandbox übergeben möchten, führen Sie den folgenden Befehl aus:
sandbox do --env AGENT_MODE="test" -- /usr/bin/bash -c "echo \$AGENT_MODE"
Übergeben Sie keine Secrets mit dem Flag env, da sie für die Sandbox-Prozesse sichtbar sein könnten.
Dateisystem-Snapshots erstellen
Stellen Sie eine benannte Sandbox im Hintergrund bereit, um kontinuierliche Aufgaben wie Webserver oder lang andauernde Agent-Workflows zu verarbeiten, führen Sie Befehle dynamisch für die Sandbox aus und erfassen Sie den geänderten Dateisystemstatus in einer tar-Archivdatei.
Wenn Sie beispielsweise eine Hintergrund-Sandbox bereitstellen, eine Datei in ihr Overlay schreiben und ihren Status erfassen möchten, um zu prüfen, ob die Daten erfasst wurden, führen Sie die folgenden Befehle aus:
Stellen Sie eine benannte Sandbox im Hintergrund mit aktiviertem Schreibzugriff bereit und erstellen Sie eine Datei im zugehörigen Arbeitsbereich:
sandbox run --write my-sandbox --detach -- /usr/bin/bash -c "echo 'hi' > /tmp/hello.txt && sleep 1h"Erstellen Sie mit dem Befehl
sandbox tareinen Snapshot des geänderten Dateisystems der laufenden Sandbox:sandbox tar my-sandbox --file=/tmp/foo.tar