View a markdown version of this page

Verwenden von Lambda MicroVMS als Sandbox für die OpenAI Agents API - AWS Lambda

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden von Lambda MicroVMS als Sandbox für die OpenAI Agents API

Sie können AWS Lambda MicroVMS als selbst gehostete Umgebung für Agenten verwenden, die mit der OpenAI Agents API erstellt wurden. Workspace-Dateien, Tool-Ausführung und Netzwerkzugriff bleiben in der von Ihnen kontrollierten Infrastruktur erhalten. OpenAI führt den Agenten-Harness aus; die Lambda MicroVM führt Ihre Aufgaben aus. In diesem Beispiel wird es ausgeführtcodex exec-server, das die Tool-Aufrufe des Agenten ausführt und die Workspace-Dateien der Sitzung enthält. Sie entscheiden über den Bildinhalt, die Netzwerkpfade, die der Executor verwenden kann, und über die AWS Ressourcen, auf die seine Ausführungsrolle beschränkt ist.

Jede MicroVM wird als Firecracker-isolated Umgebung ausgeführt, die von einem Snapshot Ihres Images aus gestartet wird. Die Gesamtlebensdauer einer MicroVM beträgt bis zu 8 Stunden, einschließlich Betrieb und Ruhezustand. Beenden Sie sie nach der letzten Runde oder setzen Sie sie zwischen den Runden aus. Sie erstellen ein wiederverwendbares Image und starten dann eine MicroVM entweder von Ihrer Anwendung oder einem Webhook-Launcher aus. Beide Ansätze verwenden dasselbe Image und dieselben Anmeldeinformationen. Weitere Informationen finden Sie im Referenzbeispiel für die selbst gehostete OpenAI Agents API-Sandbox auf Lambda MicroVMS.

Funktionsweise

Im vom Webhook verwalteten Pfad startet eine Launcher-Lambda-Funktion eine MicroVM, wenn die Sitzung zum ersten Mal einen Executor benötigt. Sie verwendet die vorhandene MicroVM wieder und nimmt sie zuerst wieder auf, wenn sie unterbrochen wird. Ihre Anwendung beendet es nach dem letzten Spielzug. Abbildung 1 zeigt den Ablauf:

  1. Ihre Anwendung erstellt eine selbst gehostete Sitzung und sendet Eingaben an die Agenten-API.

  2. Wenn die Sitzung einen Executor benötigt, sendet OpenAI einen agent.session.action_required Webhook mit einer environment_connection Aktion an einen Amazon API Gateway-Endpunkt in Ihrem Konto.

  3. Eine Launcher-Lambda-Funktion überprüft die Webhook-Signatur, ruft die aktuelle Sitzung ab und bestätigt, dass sie dem Handler gehört.

  4. Der Launcher ruft RunMicrovm mit dem Image, der Ausführungsrolle, den Netzwerkkonnektoren und einem, der runHookPayload die Verbindungswerte der Sitzung enthält, auf.

  5. Der /run Hook der MicroVM verwendet seine IAM-Ausführungsrolle, um den Executor-Schlüssel aus AWS Secrets Manager abzurufen und Codex zu starten.

  6. Der Executor registriert sich bei OpenAI unter. https://api.openai.com Anschließend öffnet er eine sichere WebSocket Verbindung, um Werkzeugbefehle wss://codex-cloud-environments.chatgpt.com zu empfangen und Ergebnisse zurückzugeben.

  7. Ihre Anwendung kann Eingabedateien hochladen und Ausgabedateien über den authentifizierten HTTPS-Endpunkt der MicroVM herunterladen. Es folgt dem Sitzungsereignisstream und kann die MicroVM zwischen den Runden aussetzen.

  8. Nach der letzten Runde beendet Ihre Anwendung die MicroVM.

Webhook-managed Bereitstellung einer Agenten-API-Sandbox auf Lambda-MicroVMs AWS

Abbildung 1. Webhook-managed Bereitstellung einer Agenten-API-Sandbox auf AWS Lambda MicroVMS.

Halten Sie den Anwendungsschlüssel und die Webhook-Signatur außerhalb der MicroVM geheim. Der Launcher übergibt nur den geheimen ARN des Executor-Schlüssels. Die VM ruft den Schlüssel mithilfe ihrer Ausführungsrolle ab.

Wichtige Eigenschaften

Eigenschaft Vorteil
Isolierung von Feuerwerkskörpern Hardware-virtualized Grenze für die MicroVM jeder Sitzung
Snapshot-based Start Jede MicroVM wird von einem Snapshot Ihres vorbereiteten Images aus gestartet
IAM über die Ausführungsrolle Der /run Hook liest den Executor-Schlüssel mit der Ausführungsrolle der MicroVM; der Schlüssel wird nicht im Image gespeichert
Zustandsbehaftete Dauer Jede MicroVM kann bis zu 8 Stunden laufen, einschließlich der Ruhezeit
Zwischen den Runden anhalten und fortsetzen Arbeitsspeicher und Festplattenstatus bleiben erhalten, sodass nachfolgende Durchgänge in derselben Umgebung fortgesetzt werden
Usage-based berechnen Für das Ausführen von VMs fallen Rechengebühren an. Durch die Sperrung fallen keine Rechenkosten mehr an; Snapshot-Speicher und Snapshot-Speicher reads/writes werden separat in Rechnung gestellt.

Voraussetzungen

  • Ein AWS Konto mit Lambda-MicroVMS-Zugriff, eine AWS CLI-Version, die Folgendes beinhaltetlambda-microvms, und Berechtigungen zum Erstellen von Images und zum Ausführen von MicroVMs. Informationen zum Erstellen des Artefakt-Buckets von Amazon Simple Storage Service (Amazon S3) und der Image-Build-Rolle AWS Identity and Access Management (IAM) finden Sie unter. Erstellen Sie Ihre erste Lambda MicroVM

  • Ein OpenAI-Anwendungsschlüssel (OPENAI_API_KEY) zum Erstellen von Sitzungen und zum Senden von Eingaben.

  • Ein separater OpenAI-Executor-Schlüssel (OPENAI_EXECUTOR_API_KEY) mit derselben Organisation, demselben Projekt und demselben Benutzer- oder Dienstkonto wie die Sitzung. Speichern Sie es im Secrets Manager, zum Beispiel als. codex/agents-api/executor Der /run Hook übergibt es an Codex alsCODEX_API_KEY.

  • Eine MicroVM-Ausführungsrolle, die nur das geheime Executor-Schlüsselwort lesen kann. Wenn das Geheimnis einen vom Kunden verwalteten AWS Key Management Service (AWS AWS KMS) -Schlüssel verwendet, fügen Sie die Entschlüsselungsberechtigung hinzu. Siehe Sicherheit und Berechtigungen.

Das MicroVM-Image wird vorbereitet

Erstellen Sie ein Image, das die Codex-CLI, Ihre Tool-Abhängigkeiten, ein Arbeitsverzeichnis wie /workspace und einen HTTP-Server für die Lifecycle-Hooks enthält.

Haken Behavior
/aws/lambda-microvms/runtime/v1/ready Gibt HTTP 200 zurück, wenn der Server bereit ist, dass Lambda den Snapshot erstellt. Der Executor bleibt getrennt.
/aws/lambda-microvms/runtime/v1/run Liest die Verbindungswerte der Sitzung und den geheimen ARN, ruft den Executor-Schlüssel ab und startet den Executor.
/aws/lambda-microvms/runtime/v1/validate Optional. Überprüft, ob Codex läuft und der Workspace beschreibbar ist.
/aws/lambda-microvms/runtime/v1/suspend Erforderlich für. suspend/resume Stoppt den Executor und leert Schreibvorgänge, bevor AWS Snapshots der VM erstellt werden.
/aws/lambda-microvms/runtime/v1/resume suspend/resumeErforderlich für. Ruft den Schlüssel erneut ab und startet den Executor für dieselbe Umgebung neu.
/aws/lambda-microvms/runtime/v1/terminate Optional. Stoppt den Executor und leert Schreibvorgänge vor dem Beenden.

Verpacken Sie den Dockerfile und Hook-Server in ein Amazon S3-Artefakt und erstellen Sie dann das codex-executor Image mit 8 GB Basisspeicher (Basisspeicher mit 4 vCPUs). Aktivieren Sie die ausgewählten Hooks in der Image-Konfiguration und stellen Sie den Hook-Port so ein, dass er zu Ihrem Server passt. Halten Sie Sitzungs-IDs, Anmeldeinformationen und Live-Executor-Verbindungen vom Image-Snapshot fern. Informationen zur Build- und Hook-Konfiguration finden Sie unter. MicroVM-Bilder

Beim Start serialisiert Ihre Anwendung oder Ihr Launcher die folgenden Werte als JSON in: runHookPayload

Wert Zweck
session.environment.id Identifiziert die Umgebung, mit der der Executor eine Verbindung herstellt
session.environment.remote_url Stellt die OpenAI-Verbindungs-URL des Executors bereit
Executor-key geheimer ARN Lässt den Hook den Schlüssel mithilfe der Ausführungsrolle der MicroVM abrufen

Kehren Sie vom /run Hook zurück, sobald der Executor-Prozess gestartet wurde, ohne auf das Ende der Runde zu warten, um einen Hook-Timeout zu vermeiden.

MicroVMS starten

Sie können MicroVMS von Ihrer Anwendung oder von einem Webhook-Launcher aus starten. Halten Sie in beiden Fällen den Event-Stream der Sitzung geöffnet, bis der Zug beendet ist.

Application-managed Bereitstellung

  1. Erstellen Sie eine selbst gehostete Sitzung, deren Arbeitsverzeichnis dem Image entspricht, und öffnen Sie dann den zugehörigen Event-Stream.

  2. Rufen Sie RunMicrovm den Image-ARN und die Version, die Ausführungsrolle, die Netzwerkkonnektoren und runHookPayload an. Speichern Sie den zurückgegebenen microvmId Wert zusammen mit der Sitzungs-ID.

  3. Warte abagent.session.environment.connected, sende dann die Eingabe und verfolge das Ergebnis des Zuges.

  4. Rufe die Ausgabedateien ab und beende den Spielzug wie unter beschriebenBeenden einer Runde.

Webhook-managed Bereitstellung

Ihre Anwendung erstellt die Sitzung, öffnet ihren Stream und übermittelt Eingaben. Der Launcher erledigt den Rest, wenn der Webhook eintrifft.

  1. Stellen Sie eine POST /webhook Route in Amazon API Gateway bereit, die den Launcher aufruft. Erteilen Sie dem Launcher die Berechtigung, seine Anmeldeinformationen zu lesen, MicroVMs vom ausgewählten Image aus zu überprüfen, zu starten, fortzusetzen und zu beenden, die MicroVM-Ausführungsrolle zu übergeben und die konfigurierten Netzwerkkonnektoren zu verwenden.

  2. Registrieren Sie den Endpunkt für und. agent.session.action_required agent.session.failed Speichern Sie das Signaturgeheimnis des Endpunkts in Secrets Manager zusammen mit dem Anwendungsschlüssel des Launchers.

  3. Vergleicht die Webhook-Signatur mit dem Rohtext der Anfrage, bevor ihr auf Sessions zugreift oder Compute startet. Rufen Sie dann die aktuelle Sitzung ab und bestätigen Sie, dass sie dem Handler gehört, indem Sie beispielsweise einen dedizierten gespeicherten Agenten zuordnen.

  4. Falls immer environment_connection noch ausstehend, überprüfen Sie die aufgezeichnete MicroVM mitGetMicrovm. Setzen Sie den Vorgang fort, ResumeMicrovm wenn er unterbrochen ist. Rufen Sie RunMicrovm nur an, wenn keine VM aufgezeichnet ist, und speichern Sie dann ihre ID. Wenn das Speichern fehlschlägt, beenden Sie die VM, die Sie gestartet haben. Wenn der Executor vor dem Verbindungs-Timeout eine Verbindung herstellt, wird die Warteeingabe ohne erneutes Senden fortgesetzt.

  5. Rufen Sie bei einem agent.session.failed Ereignis die aktuelle Sitzung ab und beenden Sie die aufgezeichnete MicroVM nur, wenn der Status „Fehlgeschlagen“ weiterhin lautet. Ignoriert gelöschte Sitzungen, gelöste Aktionen und Sitzungen, die einem anderen Handler gehören.

Das Referenzbeispiel speichert die MicroVM-ID in den Sitzungsmetadaten. Gleichzeitige Webhook-Lieferungen können zusätzliche VMs starten, bevor diese ID gespeichert wird. Vermeiden Sie vor dem Produktionseinsatz gleichzeitige Starts für dieselbe Sitzung und deduplizieren Sie Webhook-Ereignisse.

Beenden einer Runde

Abbildung 2 zeigt den MicroVM-Lebenszyklus für eine einzelne Runde und den optionalen Suspend- und Resume-Pfad für nachfolgende Turns.

MicroVM-Lebenszyklus für eine Agenten-API-Runde

Abbildung 2. MicroVM-Lebenszyklus für eine Agenten-API-Runde. RunMicrovmstartet die MicroVM, der /run Hook startet den Executor, die Umgebung stellt eine Verbindung her, der Turn läuft und der Turn endet. Im Single-Turn-Pfad rufen Sie Dateien ab und rufen auf. TerminateMicrovm Beim Multiturn-Pfad wird die MicroVM nach dem Turn unterbrochen und bei der nächsten Verbindungsanforderung wieder aufgenommen.

Warten Sie im Sitzungsstream auf oder auf den Hauptagenten agent.session.turn.completedagent.session.turn.failed, agent.session.turn.cancelled wo er sich befindet. event.turn.subagent_id null Unteragenten teilen sich die MicroVM, sodass ihre Terminalereignisse keine Säuberung auslösen. Rufen Sie die Dateien ab, die Sie benötigen. Rufen Sie nach dem letzten Zug an TerminateMicrovm und bestätigen Sie, dass die VM das Ziel erreichtTERMINATED. Lassen Sie die Maschine laufen oder setzen Sie sie aus, wenn Sie weitere Züge ausführen möchten. Führen Sie die Bereinigung durch, wenn in Ihrer Anwendung ein Fehler auftritt.

Turn-Ergebnisse kommen als Stream-Ereignisse an, nicht als Webhook-Abonnements. Der agent.session.failed Webhook deckt Sitzungsfehler ab, aber nicht jede fehlgeschlagene Runde. Aus diesem Grund sollten Sie den Vorgang nicht agent.session.idle alleine beenden, da er eintreffen kann, bevor die Warteeingabe beginnt.

Um die Lebensdauer der MicroVM zu begrenzen, falls die Bereinigung nicht ausgeführt wird, konfigurieren Sie beim Start die folgenden Einstellungen:

Einstellung Empfehlung
maximumDurationInSeconds Legen Sie eine Obergrenze für die Arbeitslast fest, z. B. 900 für einen 15-minütigen Test. Dieses Limit gilt auch während der laufenden Arbeit.
maxIdleDurationSeconds Decken Sie die erwartete Arbeitsbelastung ab. Lambda misst den eingehenden Verkehr, sodass die ausgehende Verbindung des Executors diesen Timer nicht zurücksetzt.
suspendedDurationSeconds / autoResumeEnabled Verwenden Sie 0/false für das Single-Turn-Muster, bei dem angehaltene MicroVMs nicht wieder aufgenommen werden.

Informationen zu Steuerungen über die gesamte Lebensdauer und den Leerlauf finden Sie unter. MicroVMs ausführen und verwenden

Löschen Sie die Sitzung separat. Durch das Löschen einer Sitzung wird die MicroVM nicht gestoppt und es wird kein Löschen-Webhook gesendet. Halten Sie das Image und den Executor-Schlüssel zur Wiederverwendung geheim. Informationen zum Umgang mit nachfolgenden Turns finden Sie unter Sandbox-Lebenszyklus.

Unterbrechen und Wiederaufnehmen zwischen den Zügen

Um den Speicher- und Festplattenstatus zwischen den Durchgängen beizubehalten, setzen Sie die MicroVM aus, nachdem der Haupt-Agent an der Reihe ist und alle Tools und Unteragenten fertig sind. Nehmen Sie dieselbe MicroVM wieder auf, wenn die nächste Sitzung einen Executor benötigt.

  • Stellen Sie einen Wert ungleich Null ein. suspendedDurationSeconds Solange die MicroVM angehalten ist, fallen Snapshot-Speichergebühren an.

  • Aktivieren Sie den /suspend Hook, um Schreibvorgänge zu löschen und Verbindungen zu schließen, und den /resume Hook, um Anmeldeinformationen zu aktualisieren und den Executor erneut zu verbinden.

  • Der von der Anwendung verwaltete Pfad nimmt die virtuelle Maschine wieder auf, bevor die nächste Eingabe gesendet wird. Im vom Webhook verwalteten Pfad löst das Senden von Eingaben die Verbindungsanforderung aus, mit der die VM wieder aufgenommen wird. Die Runde wird fortgesetzt, sobald der Executor die Verbindung wiederherstellt.

Anmerkung

maximumDurationInSecondsbegrenzt die gesamte Laufzeit und die Dauer der Unterbrechung auf 8 Stunden. Um bei Bedarf weiterzumachen, rufen Sie anResumeMicrovm. Für die automatische Wiederaufnahme ist eingehender Datenverkehr zur MicroVM erforderlich; die Agenten-API-Eingabe allein führt nicht zur Wiederaufnahme.

Netzwerk

Erlauben Sie dem Executor die erforderlichen ausgehenden Verbindungen zu OpenAI und den Zugriff auf Secrets Manager. Um private Ressourcen zu erreichen oder Ihre eigenen Netzwerkeinschränkungen anzuwenden, fügen Sie beim Start einen VPC-Anschluss für ausgehenden Datenverkehr hinzu. Siehe Arbeiten mit ausgehenden Netzwerkverbindern.

Das Beispiel unterstützt das Hoch- und Herunterladen von Dateien über den HTTPS-Endpunkt der MicroVM, wobei ein Authentifizierungstoken verwendet wird, das auf den Port des Servers beschränkt ist.

Überwachen

Führen Sie eines der beiden Beispiele aus und bestätigen Sie dann, dass die MicroVM die Datei hello.txt herunterlädt und die gelöschte TERMINATED Sitzung HTTP 404 zurückgibt.

Launcher-Protokolle. Überprüfe die Logs der Launcher-Lambda-Funktion in CloudWatch Logs:

aws logs tail /aws/lambda/codex-agents-api-webhook --since 10m

MicroVMS ausführen. Stellen MICROVM_IMAGE_ARN Sie Ihr Image-ARN ein, verwenden Sie die AWS Region Ihrer Bereitstellung und listen Sie die MicroVMs für das Image auf:

aws lambda-microvms list-microvms \ --image-identifier "$MICROVM_IMAGE_ARN" \ --query 'items[].{id:microvmId,state:state}' --output table

Protokollieren Sie Sitzungs- und MicroVM-IDs zusammen, damit Sie einen Lauf von Ende zu Ende verfolgen können. Halten Sie Anmeldeinformationen und unformatierte Webhook-Texte aus den Protokollen fern.

Fehlerbehebung

Symptom Was muss überprüft werden
Die Webhook-Signatur wird abgelehnt Verwenden Sie das Signaturgeheimnis des Endpunkts und überprüfen Sie den unveränderten Anfragetext.
MicroVM wird nicht gestartet Überprüfen Sie das Webhook-Abonnement, den Sitzungseigentumsfilter, die ausstehende environment_connection Aktion und die IAM-Berechtigungen des Launchers.
Das Erstellen des Images schlägt fehl Überprüfen Sie das Amazon S3-Artefakt, die Image-Build-Rolle und die /ready Hook-Antwort.
/runschlägt fehl oder das Zeitlimit wird überschritten Überprüfen Sie den geheimen Zugriff und den Start des Executors. Kehren Sie nach dem Start des Prozesses zurück, nicht nach dem Zug.
Executor kann keine Verbindung herstellen Überprüfen Sie die Umgebungs-ID, die Remote-URL, den Besitz des Schlüssels und den ausgehenden Netzwerkzugriff.
MicroVM stoppt während einer Runde Prüfen Sie die Richtlinien für maximale Lebensdauer und Leerlauf. Ausgehender Executor-Verkehr zählt nicht als eingehende Aktivität.

Prüfen Sie agent.session.environment.failed Ereignisse und die Executor-Protokolle auf Verbindungsfehler. Den Vertrag über den gemeinsamen Testamentsvollstrecker finden Sie unter Sandboxes. Self-hosted