View a markdown version of this page

MicroVMS ausführen und verwenden - 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.

MicroVMS ausführen und verwenden

In diesem Abschnitt wird beschrieben, wie Sie MicroVMs starten, eine Verbindung zu Ihren laufenden Anwendungen herstellen, den MicroVM-Lebenszyklus verwalten und die Skalierung handhaben.

Eine MicroVM starten

Verwenden Sie den run-microvm Befehl, um eine neue MicroVM von einem angegebenen Image aus zu starten. Lambda stellt die erforderlichen Ressourcen bereit, erstellt einen dedizierten HTTPS-Endpunkt und startet Ihre Anwendung vom Image-Snapshot aus.

aws lambda-microvms run-microvm \ --image-identifier arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image \ --ingress-network-connectors "arn:aws:lambda:us-east-1:aws:network-connector:aws-network-connector:ALL_INGRESS" \ --egress-network-connectors "arn:aws:lambda:us-east-1:aws:network-connector:aws-network-connector:INTERNET_EGRESS" \ --idle-policy '{"autoResumeEnabled":true,"maxIdleDurationSeconds":900,"suspendedDurationSeconds":1800}' \ --maximum-duration-in-seconds 14400

Eine MicroVM wird erstellt, wenn Sie anrufen. run-microvm Jede MicroVM hat ihren eigenen dedizierten Endpunkt. Es gibt keinen Lastenausgleich zwischen MicroVMs von einem einzigen Endpunkt aus — jeder Endpunkt ist mit einer einzigen MicroVM verknüpft.

Der einzige erforderliche Parameter ist --image-identifier (das muss der ARN des MicroVM-Images sein). Alle anderen Parameter sind optional.

Hauptparameter

Parameter Description
--image-identifier (Erforderlich) Der ARN des MicroVM-Images, das ausgeführt werden soll.
--image-version Die Version des MicroVM-Images, das ausgeführt werden soll. Standardmäßig wird die neueste aktive Version verwendet.
--execution-role-arn Die IAM-Rolle, die der MicroVM Laufzeitberechtigungen für die Interaktion mit anderen Diensten bereitstellt. AWS
--idle-policy Steuert das automatische Verhalten beim Anhalten und Wiederaufnehmen. Weitere Informationen zur Konfiguration der Richtlinien im Leerlauf finden Sie im folgenden Abschnitt.
--maximum-duration-in-seconds Die maximale Dauer, für die die MicroVM in einem laufenden oder angehaltenen Zustand verbleiben kann, bevor Lambda sie beendet. Bereich: 1—28.800 Sekunden (8 Stunden).
--run-hook-payload Eine Zeichenketten-Payload (max. 16 KB), die beim Start der microVM an den /run Lifecycle-Hook gesendet wird.
--logging Konfiguration protokollieren. Passen Sie die CloudWatch Protokollgruppe und den Stream an oder deaktivieren Sie die Protokollierung vollständig.
--ingress-network-connectors Die ARN (s) von Ingress-Connectors, die eingehende HTTPS-Konnektivität ermöglichen.
--egress-network-connectors Die ARN (s) der Ausgangsconnectors für ausgehende Konnektivität (Internet oder VPC).
Anmerkung

Verwenden Sie den Connector, um die eingehende Konnektivität zu deaktivieren. Lambda-provided NO_INGRESS Weitere Informationen zu Netzwerkanschlüssen finden Sie unterNetzwerk.

Richtlinienkonfiguration im Leerlauf

Wenn diese Option aktiviert ist, steuert die Richtlinie für den Leerlauf die automatische Unterbrechung und Wiederaufnahme. Das Vorhandensein von Datenverkehr über den Endpunkt der microVM signalisiert Aktivität. Wenn für die konfigurierte Dauer des Leerlaufs kein Datenverkehr eingeht, wird die microVM als inaktiv behandelt und ausgesetzt.

Feld Description
autoResumeEnabled Wann wird die microVM automatisch wieder aufgenommentrue, wenn der Datenverkehr ihren Endpunkt erreicht, während der Vorgang unterbrochen ist.
maxIdleDurationSeconds Die Anzahl der Sekunden ohne Verkehr, nach denen die microVM angehalten wird. Maximum: 28.800 (8 Stunden).
suspendedDurationSeconds Die Anzahl der Sekunden, für die eine MicroVM im angehaltenen Zustand verbleibt, bevor Lambda sie beendet.
Anmerkung

Deaktivieren Sie für asynchrone Anwendungen, die keinen aktiven Datenverkehr über den Endpunkt senden oder empfangen, die automatische Unterbrechung oder konfigurieren Sie eine geeignete Leerlaufdauer.

Payloads zur Laufzeit

Mit runHookPayload diesem Parameter können Sie zur Laufzeit Konfigurationsdaten pro microVM (maximal 16 KB Zeichenfolge) übergeben. Lambda übermittelt diese Nutzlast als Teil des Anforderungstextes an den /run Lifecycle-Hook. Lambda fügt das auch microvmId in den Anforderungstext ein.

Der /run Hook empfängt einen JSON-Hauptteil mit der folgenden Struktur:

{ "microvmId": "mvm-01234567-abcd-ef01-2345-6789abcdef01", "runHookPayload": "tenant-specific-string" }

Verwenden Sie Runtime-Payloads, um Konfigurationen bereitzustellen, die je nach MicroVM variieren — zum Beispiel Mandanten-IDs, Sitzungstoken, signierte URLs oder Secrets Manager Manager-Pfade. Im Gegensatz zu Umgebungsvariablen (die auf Image-Ebene festgelegt und von allen MicroVMs dieses Images gemeinsam genutzt werden) ist die Run-Hook-Payload für jede MicroVM einzigartig.

aws lambda-microvms run-microvm \ --image-identifier arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image \ --run-hook-payload 'tenant-specific-string'

Wenn Sie eine MicroVM nicht mehr benötigen, beenden Sie sie, damit keine Gebühren mehr anfallen. Detaillierte Anweisungen finden Sie unter Terminierung einer MicroVM.

Verbindung zu einer MicroVM herstellen

Jede MicroVM erhält eine eindeutige öffentliche HTTPS-Endpunkt-URL, die beim Anruf zugewiesen wird. run-microvm Über diese URL stellen Sie eine Verbindung zu Ihrer Anwendung her, die in der MicroVM ausgeführt wird.

Authentifizierung

Alle Anfragen an einen MicroVM-Endpunkt erfordern ein JWE-Authentifizierungstoken. Es gibt keine Option für einen nicht authentifizierten Zugriff. Generieren Sie ein Token mit: create-microvm-auth-token

aws lambda-microvms create-microvm-auth-token \ --microvm-identifier microvm-id \ --expiration-in-minutes 30 \ --allowed-ports '[{"allPorts":{}}]'

Tokens sind auf bestimmte Ports beschränkt und haben ein konfigurierbares Ablaufdatum. Sie können den Zugriff auf einen einzelnen Port, einen Portbereich oder alle Ports einschränken:

{ "port": number } { "range": { "startPort": N, "endPort": N } } { "allPorts": {} }

Port-Routing

Standardmäßig leitet Lambda eingehenden Datenverkehr an Port 8080 innerhalb Ihrer MicroVM weiter. Um an einen anderen Port weiterzuleiten, fügen Sie den X-aws-proxy-port Header in Ihre Anfrage ein. Der Zielport muss innerhalb des im Authentifizierungstoken allowedPorts definierten Ports liegen.

Protokolle

Lambda MicroVMS unterstützt HTTP/2, WebSockets, gRPC und SSE über die Endpunkt-URL.

Übergeben Sie bei WebSocket Verbindungen das Authentifizierungstoken und den Zielport über Unterprotokolle:

// JavaScript WebSocket example const protocols = [ "lambda-microvms", // Required base protocol "lambda-microvms.authentication.<auth-token>", // Auth token "lambda-microvms.port.9000" // Target port ]; const ws = new WebSocket('wss://<microvm-endpoint>/path', protocols);

Lambda entfernt MicroVM-specific Unterprotokolle aus der Anfrage, bevor sie an Ihre Anwendung weitergeleitet wird.

SDK-Beispiele

Die folgenden Beispiele zeigen, wie Sie eine MicroVM ausführen und mithilfe der AWS SDKs eine Verbindung zu ihr herstellen.

Python
Beispiel Beispiel — Eine MicroVM ausführen und eine Verbindung mit boto3 herstellen
import boto3, requests client = boto3.client("lambda-microvms") run_resp = client.run_microvm( imageIdentifier="arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image", idlePolicy={"autoResumeEnabled": True, "maxIdleDurationSeconds": 900, "suspendedDurationSeconds": 300} ) microvm_id = run_resp["microvmId"] endpoint = run_resp["endpoint"] print(f"MicroVM {microvm_id} running at {endpoint}") token_resp = client.create_microvm_auth_token( microvmIdentifier=microvm_id, expirationInMinutes=30, allowedPorts=[{"allPorts": {}}] ) token = token_resp["authToken"]["X-aws-proxy-auth"] resp = requests.get(f"https://{endpoint}/health", headers={"X-aws-proxy-auth": token}) print(resp.status_code, resp.json())
Node.js
Beispiel Beispiel — Betrieb einer MicroVM und Herstellen einer Verbindung mit AWS SDK für JavaScript
import { LambdaMicrovmsClient, RunMicrovmCommand, CreateMicrovmAuthTokenCommand } from "@aws-sdk/client-lambda-microvms"; const client = new LambdaMicrovmsClient({}); const { microvmId, endpoint } = await client.send(new RunMicrovmCommand({ imageIdentifier: "arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image", idlePolicy: { autoResumeEnabled: true, maxIdleDurationSeconds: 900, suspendedDurationSeconds: 300 } })); const { authToken } = await client.send(new CreateMicrovmAuthTokenCommand({ microvmIdentifier: microvmId, expirationInMinutes: 30, allowedPorts: [{ allPorts: {} }] })); const resp = await fetch(`https://${endpoint}/health`, { headers: { "X-aws-proxy-auth": authToken["X-aws-proxy-auth"] } }); console.log(await resp.json());

Anfragen senden

Bash
Beispiel Beispiel — Senden einer Anfrage mit cURL
curl 'https://<microvm-endpoint>' \ -H 'X-aws-proxy-auth: <TOKEN>' \ -H 'X-aws-proxy-port: 8080'
Python
Beispiel Beispiel — Senden einer Anfrage mit der Anforderungsbibliothek
import requests response = requests.get('https://<microvm-endpoint>', headers={'X-aws-proxy-auth': '<TOKEN>'}) print(response.text)
Node.js
Beispiel Beispiel — Senden einer Anfrage mit fetch
const response = await fetch('https://<microvm-endpoint>', { headers: { 'X-aws-proxy-auth': '<TOKEN>', 'X-aws-proxy-port': '8080' } }); console.log(await response.text());

Lebenszyklus-Hooks

Mit Lifecycle-Hooks können Sie benutzerdefinierte Logik an wichtigen Punkten im MicroVM-Lebenszyklus ausführen — wenn der MicroVM-Lebenszyklus gestartet, unterbrochen, wieder aufgenommen oder beendet wird. Verwenden Sie Hooks, um den Status pro Mandant zu initialisieren, Daten vor dem Sperren zu leeren, Anmeldeinformationen bei der Wiederaufnahme zu aktualisieren oder Ressourcen vor der Beendigung zu bereinigen.

Jeder Hook ist ein HTTP-Endpunkt, den Ihre Anwendung verfügbar macht. Lambda sendet beim entsprechenden Lebenszyklusereignis eine POST-Anfrage an den Hook. Hooks überwachen den Pfad /aws/lambda-microvms/runtime/v1/<hook-name> auf dem Port, den Sie konfigurieren.

Ihre MicroVM beginnt, externen Datenverkehr zu empfangen, nachdem der /run Hook HTTP 200 zurückgibt. Bis dahin leitet der Endpunkt keine Anfragen an Ihre Anwendung weiter.

Haken Wenn aufgerufen Zweck
/aws/lambda-microvms/runtime/v1/run Nachdem MicroVM mit dem Snapshot gestartet wurde Initialisieren Sie den Status pro Mandant, setzen Sie eindeutige Werte zurück und führen Sie Integritätsprüfungen durch. Der Verkehr beginnt, nachdem dieser Hook zurückgekehrt ist.
/aws/lambda-microvms/runtime/v1/resume Nachdem MicroVM aus dem angehaltenen Zustand wieder aufgenommen wurde Re-establish Netzwerkverbindungen, Anmeldeinformationen aktualisieren, Status überprüfen. Die MicroVM bleibt im SUSPENDED Status, solange dieser Hook ausgeführt wird; sie wechselt in diesen Zustand, RUNNING nachdem der Hook zurückgekehrt ist.
/aws/lambda-microvms/runtime/v1/suspend Bevor MicroVM angehalten wird Leeren Sie ausstehende Schreibvorgänge, schließen Sie Verbindungen, geben Sie Ressourcen frei.
/aws/lambda-microvms/runtime/v1/terminate Bevor MicroVM beendet wird Daten leeren, externe Systeme benachrichtigen, aufräumen.

Informationen zu Hooks, die während der Image-Erstellung (/readyund/validate) ausgeführt werden, finden Sie unterHooks zum Erstellen von MicroVM-Images.

OpenAPI-Spezifikation:

{ "openapi": "3.0.2", "info": { "title": "Lambda MicroVMs Application Hook Interface", "version": "2025-12-03" }, "paths": { "/ready": { "post": { "description": "Called by Lambda during MicroVM image creation to determine if the application has initialized.", "operationId": "Ready", "responses": { "200": { "description": "Successful invocation." }, "503": { "description": "Application is not yet ready. Lambda retries until timeout." } } } }, "/resume": { "post": { "description": "Called by Lambda when resuming a MicroVM that is in the SUSPENDED state.", "operationId": "Resume", "responses": { "200": { "description": "Successful invocation." } } } }, "/run": { "post": { "description": "Called by Lambda when a new MicroVM is run from a MicroVM image.", "operationId": "Run", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RunRequestContent" } } } }, "responses": { "200": { "description": "Successful invocation." } } } }, "/suspend": { "post": { "description": "Called by Lambda when suspending a MicroVM.", "operationId": "Suspend", "responses": { "200": { "description": "Successful invocation." } } } }, "/terminate": { "post": { "description": "Called by Lambda when terminating a MicroVM, before resources are released.", "operationId": "Terminate", "responses": { "200": { "description": "Successful invocation." } } } }, "/validate": { "post": { "description": "Called by Lambda when running a MicroVM to validate the image build. Use this hook to perform tests that validate your application behaves correctly when running. Lambda also samples the portions of the image that are used when handling this request, allowing Lambda to prefetch those portions of the image to reduce latency at run time.", "operationId": "Validate", "responses": { "200": { "description": "Successful invocation." }, "503": { "description": "Validation in progress. Lambda retries until timeout." } } } } }, "components": { "schemas": { "RunRequestContent": { "type": "object", "properties": { "microvmId": { "type": "string", "description": "The MicroVM identifier." }, "runHookPayload": { "type": "string", "description": "Run hook payload provided to RunMicrovm." } } } } }, "servers": [ { "url": "/aws/lambda-microvms/runtime/v1" } ] }

MicroVMS aussetzen und wieder aufnehmen

Unterbrechen Sie MicroVMs, um die Kosten zu senken und gleichzeitig den Anwendungsstatus beizubehalten. Während des Betriebs zahlen Sie Rechengebühren. Während der Sperrung zahlen Sie nur Snapshot-Speichergebühren.

Wie kann ich den Vorgang aussetzen

Es gibt zwei Möglichkeiten, eine MicroVM auszusetzen:

  1. Richtlinie für Leerlauf (automatisch)maxIdleDurationSeconds In der Richtlinie für Leerlauf konfigurieren. Wenn für diese Dauer kein Datenverkehr am MicroVM-Endpunkt eingeht, unterbricht Lambda die MicroVM automatisch.

  2. API-Aufruf (explizit) — Aufruf suspend-microvm zur sofortigen Unterbrechung:

aws lambda-microvms suspend-microvm --microvm-identifier microvm-id

Der /suspend-Hook

Vor dem Aussetzen ruft Lambda Ihren /suspend Hook auf. Verwenden Sie ihn, um ausstehende Schreibvorgänge zu löschen, Netzwerkverbindungen zu schließen und Ressourcen freizugeben, die nicht über die Suspend-Grenze hinaus bestehen bleiben dürfen.

Verhalten fortsetzen

Wenn eine MicroVM wieder aufgenommen wird (durch einen API-Aufruf oder automatische Wiederaufnahme), stellt Lambda den Speicher- und Festplattenstatus vom Suspend-Checkpoint aus wieder her. Die MicroVM bleibt im Status, während der Hook ausgeführt wird. SUSPENDED /resume Nachdem der Hook HTTP 200 zurückgegeben hat, wechselt die MicroVM zum Datenverkehr RUNNING und empfängt diesen.

Verwenden Sie den /resume Hook, um Anmeldeinformationen zu aktualisieren, Netzwerkverbindungen wiederherzustellen und den Status zu überprüfen.

aws lambda-microvms resume-microvm --microvm-identifier microvm-id

Auto-resume

Wenn autoResumeEnabled=true der Datenverkehr den Endpunkt einer angehaltenen MicroVM erreicht, nimmt Lambda die MicroVM automatisch wieder auf. Lambda hält die eingehende Anfrage, während der Lebenslauf abgeschlossen ist (einschließlich des /resume Hooks), und übermittelt sie dann an Ihre Anwendung.

Der Lebenslauf erhöht die Latenz bei der ersten Anfrage. Die Dauer hängt von der Größe des wiederherzustellenden Status und der Dauer Ihres /resume Hooks ab.

Wenn die Wiederaufnahme nicht erfolgreich ist, gibt Lambda 502 Bad Gateway an den Anrufer zurück.

Anmerkung

Auto-resume fügt Latenz nur bei der ersten Anfrage nach dem Sperren hinzu. Nachfolgende Anfragen, während die MicroVM läuft, sind davon nicht betroffen.

Skalierung und Parallelität

Sie erstellen neue MicroVMs, indem Sie anrufen. run-microvm Jede MicroVM hat ihren eigenen dedizierten Endpunkt. Es gibt keinen Lastenausgleich zwischen MicroVMs von einem einzigen Endpunkt aus.

Account-level Kapazität — Ihr Konto hat ein Kontingent für den gesamten Arbeitsspeicher, der all Ihren MicroVMs in der Region RUNNING oder einem SUSPENDED Bundesstaat zugewiesen werden kann, und Sie können das Vierfache dieses Kontingents vertikal skalieren. Um eine Erhöhung des Kontingents zu beantragen, besuchen Sie die Service Quotas Quotas-Konsole und suchen Sie nach Lambda MicroVMs.

Kostenmodell:

  • Beim Betrieb von MicroVMs fallen Rechengebühren an.

  • Bei unterbrochenen Mikro-VMs fallen Snapshot-Speichergebühren an, nicht jedoch Rechengebühren.

  • Für terminierte MicroVMs fallen keine Gebühren an.

Strategien für das Kapazitätsmanagement:

  • Mikro-VMs im Leerlauf aussetzen — Konfigurieren Sie Richtlinien für den Leerlauf, sodass Mikro-VMs, die keinen Datenverkehr empfangen, automatisch gesperrt werden.

  • MicroVMs beenden, die nicht mehr benötigt werden — Verwenden Sie diese OptionsuspendedDurationSeconds, um nach einer maximalen Sperrdauer automatisch zu beenden, oder rufen Sie explizit auf. terminate-microvm

  • Right-size Richtlinien für inaktive Anwendungen — Diese werden auf maxIdleDurationSeconds der Grundlage Ihrer Datenverkehrsmuster festgelegt. Durch kürzere Leerlaufzeiten wird schneller Kapazität freigesetzt.

Terminierung einer MicroVM

Beenden Sie eine MicroVM, wenn sie nicht mehr benötigt wird. Durch die Kündigung werden alle Rechenressourcen freigegeben und alle Gebühren werden eingestellt.

Vor der Freigabe von Ressourcen ruft Lambda Ihren /terminate Hook auf. Verwenden Sie ihn, um ausstehende Daten zu löschen oder externe Systeme zu benachrichtigen.

aws lambda-microvms terminate-microvm --microvm-identifier microvm-id

MicroVMs auflisten

Listet alle MicroVMs in Ihrem Konto auf, optional nach Bildern gefiltert:

aws lambda-microvms list-microvms # Filter by image aws lambda-microvms list-microvms --image-identifier my-image --image-version 1.0

Fehlerbehandlung

Fehler ausführen

In der folgenden Tabelle sind die häufigsten Fehler aufgeführt, die von der run-microvm API zurückgegeben werden:

Fehler Ursache Lösung
ServiceQuotaExceededException Das Konto hat sein Speicherkontingent für gleichzeitige MicroVMs erreicht. Beenden Sie inaktive MicroVMs oder fordern Sie eine Erhöhung des Kontingents an.
ResourceNotFoundException Das angegebene Image ist nicht vorhanden oder befindet sich nicht im CREATED Status. Überprüfen Sie die Image-ID und bestätigen Sie, dass der Build abgeschlossen ist.
ValidationException Ein oder mehrere Anforderungsparameter sind ungültig. Überprüfen Sie die Richtlinienwerte im Leerlauf, das Format der Bild-ID und die Connector-ARNs.
ThrottlingException Das API-Ratenlimit für diesen Vorgang wurde überschritten. Implementieren Sie exponentiellen Backoff mit Jitter.

Versuchen Sie es erneut mit der Strategie

Verwenden Sie für vorübergehende Fehler (ThrottlingException,InternalServerException) den exponentiellen Backoff:

import time, random def run_with_retry(client, params, max_retries=5): for attempt in range(max_retries): try: return client.run_microvm(**params) except client.exceptions.ThrottlingException: delay = (2 ** attempt) + random.uniform(0, 1) time.sleep(delay) raise Exception("Max retries exceeded")