Ejecución y uso de MicroVM
En esta sección se describe cómo iniciar MicroVM, conectarse a las aplicaciones en ejecución, administrar el ciclo de vida de las MicroVM y gestionar el escalado.
Inicio de una MicroVM
Utilice el comando run-microvm para realizar el lanzamiento de una nueva MicroVM a partir de una imagen especificada. Lambda aprovisiona los recursos necesarios, crea un punto de conexión HTTPS dedicado e inicia la aplicación a partir de la instantánea de la imagen.
aws lambda-microvms run-microvm \ --image-identifierarn: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
Se crea una MicroVM cuando se llama a run-microvm. Cada MicroVM tiene su propio punto de conexión dedicado. No hay equilibrio de carga entre las MicroVM desde un único punto de conexión; cada punto de conexión está vinculado a una sola MicroVM.
El único parámetro obligatorio es --image-identifier, que debe ser el ARN de la imagen de MicroVM. Todos los demás parámetros son opcionales.
Parámetros clave
| Parámetro | Descripción |
|---|---|
--image-identifier |
(Obligatorio) ARN de la imagen de MicroVM que se ejecutará. |
--image-version |
Versión de la imagen de MicroVM que se ejecutará. De forma predeterminada, se utiliza la versión activa más reciente. |
--execution-role-arn |
Rol de IAM que proporciona los permisos de tiempo de ejecución necesarios para que la MicroVM interactúe con otros servicios de AWS. |
--idle-policy |
Controla el comportamiento de suspensión y reanudación automáticas. Consulte la configuración de la política de inactividad en la sección siguiente. |
--maximum-duration-in-seconds |
Duración máxima durante la cual la MicroVM puede permanecer en estado de ejecución o suspensión antes de que Lambda la termine. Intervalo: de 1 a 28 800 segundos (8 horas). |
--run-hook-payload |
Carga útil de cadena, con un máximo de 16 KB, que se entrega al enlace de ciclo de vida /run cuando se inicia la MicroVM. |
--logging |
Configuración de registros. Personalice el grupo de registro y la secuencia de CloudWatch, o desactive por completo el registro. |
--ingress-network-connectors |
Los ARN de los conectores de entrada que habilitan la conectividad HTTPS entrante. |
--egress-network-connectors |
Los ARN de los conectores de salida para la conectividad saliente, ya sea a Internet o a una VPC. |
nota
Para desactivar la conectividad de entrada, utilice el conector NO_INGRESS proporcionado por Lambda. Para obtener más información sobre los conectores de red, consulte Red.
Configuración de la política de inactividad
Cuando está habilitada, la política de inactividad controla la suspensión y la reanudación automáticas. La presencia de tráfico a través del punto de conexión de la MicroVM indica actividad. Si no se recibe tráfico durante el periodo de inactividad configurado, la MicroVM se considera inactiva y se suspende.
| Campo | Descripción |
|---|---|
autoResumeEnabled |
Cuando se establece en true, la MicroVM se reanuda automáticamente si recibe tráfico en su punto de conexión mientras está suspendida. |
maxIdleDurationSeconds |
Número de segundos sin tráfico tras los cuales se suspende la MicroVM. Máximo: 28 800 segundos (8 horas). |
suspendedDurationSeconds |
Número de segundos durante los cuales una MicroVM permanece en estado de suspensión antes de que Lambda la termine. |
nota
Para las aplicaciones asíncronas que no envían ni reciben tráfico de forma activa a través del punto de conexión, desactive la suspensión automática o configure un periodo de inactividad adecuado.
Cargas útiles del tiempo de ejecución
El parámetro runHookPayload permite pasar datos de configuración para cada MicroVM durante el tiempo de ejecución, con un máximo de 16 KB en una cadena. Lambda entrega esta carga útil como parte del cuerpo de la solicitud al enlace de ciclo de vida /run. Lambda también inserta microvmId en el cuerpo de la solicitud.
El enlace /run recibe un cuerpo JSON con la siguiente estructura:
{ "microvmId": "mvm-01234567-abcd-ef01-2345-6789abcdef01", "runHookPayload": "tenant-specific-string" }
Utilice cargas útiles del tiempo de ejecución para proporcionar una configuración que varíe en cada MicroVM, por ejemplo, ID de inquilinos, tokens de sesión, URL firmadas o rutas de Secrets Manager. A diferencia de las variables de entorno, que se configuran en el nivel de la imagen y se comparten entre todas las MicroVM creadas a partir de esta, la carga útil del enlace de ejecución es exclusiva de cada MicroVM.
aws lambda-microvms run-microvm \ --image-identifierarn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image\ --run-hook-payload 'tenant-specific-string'
Cuando ya no necesite una MicroVM, termínela para dejar de incurrir en cargos. Para obtener instrucciones, consulte Terminación de una MicroVM.
Conexión a una MicroVM
A cada MicroVM se le asigna una URL de punto de conexión HTTPS público única cuando se llama a run-microvm. La conexión a la aplicación que se ejecuta dentro de la MicroVM se realiza mediante esta URL.
Autenticación
Todas las solicitudes a un punto de conexión de MicroVM requieren un token de autenticación JWE. No existe una opción de acceso sin autenticación. Genere un token mediante create-microvm-auth-token:
aws lambda-microvms create-microvm-auth-token \ --microvm-identifiermicrovm-id\ --expiration-in-minutes 30 \ --allowed-ports '[{"allPorts":{}}]'
Los tokens se limitan a puertos específicos y su caducidad se puede configurar. Puede restringir el acceso a un solo puerto, a un intervalo de puertos o a todos los puertos:
{ "port":number} { "range": { "startPort":N, "endPort":N} } { "allPorts": {} }
Enrutamiento de puertos
De forma predeterminada, Lambda enruta el tráfico entrante al puerto 8080 de la MicroVM. Para enrutar el tráfico a otro puerto, incluya el encabezado X-aws-proxy-port en la solicitud. El puerto de destino se debe encontrar dentro de los allowedPorts definidos en el token de autenticación.
Protocolos
Las MicroVM de Lambda admiten HTTP/2, WebSockets, gRPC y SSE mediante la URL del punto de conexión.
Para las conexiones WebSocket, pase el token de autenticación y el puerto de destino mediante subprotocolos:
// 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 elimina de la solicitud los subprotocolos específicos de la MicroVM antes de enviarla a la aplicación.
Ejemplos de SDK
Los siguientes ejemplos muestran cómo ejecutar una MicroVM y conectarse a esta mediante los SDK de AWS.
Envío de solicitudes
Enlaces de ciclo de vida
Los enlaces de ciclo de vida permiten ejecutar lógica personalizada en momentos clave del ciclo de vida de la MicroVM: cuando se inicia, se suspende, se reanuda o termina. Utilice los enlaces para inicializar el estado de cada inquilino, forzar la escritura de los datos pendientes antes de la suspensión, actualizar las credenciales tras la reanudación o liberar los recursos antes de la terminación.
Cada enlace es un punto de conexión HTTP que la aplicación expone. Lambda envía una solicitud POST al enlace cuando se produce el evento correspondiente del ciclo de vida. Los enlaces escuchan en la ruta /aws/lambda-microvms/runtime/v1/<hook-name> del puerto que configure.
La MicroVM comienza a recibir tráfico externo una vez que el enlace /run devuelve el código de estado HTTP 200. Hasta ese momento, el punto de conexión no reenvía las solicitudes a la aplicación.
| Enlace | Momento de invocación | Finalidad |
|---|---|---|
/aws/lambda-microvms/runtime/v1/run |
Después de que la MicroVM se inicia a partir de una instantánea | Inicializar el estado de cada inquilino, restablecer los valores únicos y realizar comprobaciones de estado. El tráfico comienza después de que este enlace devuelve una respuesta. |
/aws/lambda-microvms/runtime/v1/resume |
Después de que la MicroVM se reanuda tras estar suspendida | Restablecer las conexiones de red, renovar las credenciales y validar el estado. La MicroVM permanece en el estado SUSPENDED mientras se ejecuta este enlace y pasa al estado RUNNING después de que el enlace devuelve una respuesta. |
/aws/lambda-microvms/runtime/v1/suspend |
Antes de que la MicroVM se suspenda | Completar las escrituras pendientes, cerrar las conexiones y liberar los recursos. |
/aws/lambda-microvms/runtime/v1/terminate |
Antes de que la MicroVM termine | Completar la escritura de los datos pendientes, notificar a los sistemas externos y realizar las tareas de limpieza necesarias. |
Para consultar los enlaces que se ejecutan durante la creación de la imagen (/ready y /validate), consulte Enlaces de compilación de imágenes de MicroVM.
Especificación de OpenAPI:
{ "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" } ] }
Suspensión y reanudación de MicroVM
La suspensión de las MicroVM permite reducir los costos y, al mismo tiempo, conservar el estado de la aplicación. Mientras están en ejecución, se aplican cargos por computación. Mientras están suspendidas, solo se aplican cargos por el almacenamiento de instantáneas.
Cómo suspender una MicroVM
Hay dos formas de suspender una MicroVM:
-
Política de inactividad (automática): configure
maxIdleDurationSecondsen la política de inactividad. Si no se recibe tráfico en el punto de conexión de la MicroVM durante ese periodo, Lambda suspende automáticamente la MicroVM. -
Llamada a la API (explícita): llame a
suspend-microvmpara suspender la MicroVM de inmediato:
aws lambda-microvms suspend-microvm --microvm-identifiermicrovm-id
El enlace /suspend
Antes de suspender la MicroVM, Lambda llama al enlace /suspend. Utilícelo para completar las escrituras pendientes, cerrar las conexiones de red y liberar los recursos que no se deban conservar tras la suspensión.
Comportamiento de la reanudación
Cuando una MicroVM se reanuda, ya sea mediante una llamada a la API o mediante la reanudación automática, Lambda restaura el estado de la memoria y del disco a partir del punto de control de la suspensión. La MicroVM permanece en el estado SUSPENDED mientras se ejecuta el enlace /resume. Después de que el enlace devuelve una respuesta HTTP 200, la MicroVM pasa al estado RUNNING y comienza a recibir tráfico.
Utilice el enlace /resume para renovar las credenciales, restablecer las conexiones de red y validar el estado.
aws lambda-microvms resume-microvm --microvm-identifiermicrovm-id
Reanudación automática
Si es autoResumeEnabled=true y llega tráfico al punto de conexión de una MicroVM suspendida, Lambda reanuda automáticamente la MicroVM. Lambda retiene la solicitud entrante hasta que finaliza la reanudación, incluida la ejecución del enlace /resume, y después la entrega a la aplicación.
La reanudación aumenta la latencia de la primera solicitud. La duración depende del tamaño del estado suspendido que se restaura y de la duración de la ejecución del enlace /resume.
Si la reanudación no se completa correctamente, Lambda devuelve al emisor de la llamada el error 502 (puerta de enlace incorrecta).
nota
La reanudación automática solo aumenta la latencia de la primera solicitud posterior a la suspensión. Las solicitudes posteriores no se ven afectadas mientras la MicroVM está en ejecución.
Escalado y simultaneidad
Las nuevas MicroVM se crean mediante una llamada a run-microvm. Cada MicroVM tiene su propio punto de conexión dedicado. No hay equilibrio de carga entre varias MicroVM mediante un único punto de conexión.
Capacidad en el nivel de la cuenta: la cuenta tiene una cuota para la memoria total que se puede asignar entre todas las MicroVM que se encuentren en el estado RUNNING o SUSPENDED en una región. Puede escalar verticalmente hasta cuatro veces el valor de esta cuota. Para solicitar un aumento de la cuota, acceda a la consola de Service Quotas y busque MicroVM de Lambda.
Modelo de costos:
-
Las MicroVM en ejecución generan cargos por computación.
-
Las MicroVM suspendidas generan cargos por el almacenamiento de instantáneas, pero no cargos por computación.
-
Las MicroVM terminadas no generan cargos.
Estrategias para administrar la capacidad:
-
Suspensión de MicroVM inactivas: configure políticas de inactividad para suspender automáticamente las MicroVM que no reciban tráfico.
-
Terminación de MicroVM que ya no se necesitan: utilice
suspendedDurationSecondspara terminarlas automáticamente una vez transcurrida la duración máxima de suspensión o llame aterminate-microvmde forma explícita. -
Ajuste del tamaño de las políticas de inactividad: establezca
maxIdleDurationSecondsen función de los patrones de tráfico. Los periodos de inactividad más breves liberan capacidad con mayor rapidez.
Terminación de una MicroVM
Termine una MicroVM cuando ya no la necesite. La terminación libera todos los recursos de computación y hace que dejen de aplicarse todos los cargos.
Antes de liberar los recursos, Lambda llama al enlace /terminate. Utilícelo para completar la escritura de los datos pendientes o notificar a los sistemas externos.
aws lambda-microvms terminate-microvm --microvm-identifiermicrovm-id
Enumeración de MicroVM
Enumere todas las MicroVM de la cuenta, con la opción de filtrarlas por imagen:
aws lambda-microvms list-microvms # Filter by image aws lambda-microvms list-microvms --image-identifiermy-image--image-version1.0
Gestión de errores
Errores de ejecución
En la siguiente tabla se indican los errores habituales que devuelve la API run-microvm:
| Error | Causa | Solución |
|---|---|---|
ServiceQuotaExceededException |
La cuenta ha alcanzado su cuota de memoria para la ejecución simultánea de MicroVM. | Termine las MicroVM inactivas o solicite un aumento de la cuota. |
ResourceNotFoundException |
La imagen especificada no existe o no se encuentra en el estado CREATED. |
Compruebe el identificador de la imagen y confirme que la compilación haya finalizado. |
ValidationException |
Uno o varios parámetros de la solicitud no son válidos. | Compruebe los valores de la política de inactividad, el formato del identificador de la imagen y los ARN de los conectores. |
ThrottlingException |
Se ha superado el límite de frecuencia de solicitudes de la API para esta operación. | Implemente el retroceso exponencial con fluctuación aleatoria. |
Estrategia de reintento
Para los errores transitorios (ThrottlingException, InternalServerException), utilice el retroceso exponencial:
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")