View a markdown version of this page

Imágenes de MicroVM - AWS Lambda

Imágenes de MicroVM

En esta sección se explica cómo compilar, configurar, actualizar y administrar imágenes de MicroVM.

Una imagen de MicroVM es un recurso que define el sistema de archivos y el entorno de aplicación de una MicroVM. La imagen de MicroVM incluye el entorno de tiempo de ejecución, el código de la aplicación y programas auxiliares, como procesos en segundo plano y agentes de observabilidad. Para crear una imagen de MicroVM, debe proporcionar un paquete ZIP que contenga un Dockerfile y los artefactos de la aplicación, y cargarlo en Amazon S3. El Dockerfile define cómo se empaqueta la aplicación. Lambda compila la imagen de contenedor de la aplicación al ejecutar el Dockerfile sobre un entorno de sistema operativo proporcionado por una imagen base de MicroVM administrada por Lambda. Las imágenes base de MicroVM se describen a continuación, en la sección titulada Imágenes base de MicroVM.

Puede actualizar las imágenes base de MicroVM para actualizar el código o la configuración de la aplicación de las MicroVM. Cada actualización que desencadena crea una nueva versión de la imagen de MicroVM.

Cómo Lambda compila una imagen de MicroVM

Cuando crea una imagen de MicroVM, Lambda:

  • Recupera de Amazon S3 los artefactos empaquetados.

  • Inicia una MicroVM nueva a partir de la imagen base administrada por Lambda.

  • Ejecuta las instrucciones del Dockerfile.

  • Lanza la aplicación mediante la instrucción ENTRYPOINT o CMD.

  • Espera a que el enlace de ciclo de vida indique que la inicialización ha finalizado.

  • Captura una instantánea del estado del disco y de la memoria.

Una vez que finaliza el proceso de creación de la instantánea, la imagen de MicroVM pasa al estado CREATED. Ahora puede utilizar esta imagen de MicroVM para crear una MicroVM. Cada imagen de MicroVM se puede utilizar para crear varias MicroVM independientes. Una MicroVM ejecutada a partir de la imagen de MicroVM se reanuda directamente desde el estado capturado en la instantánea, lo que permite tiempos de inicio rápidos. Cada imagen de MicroVM se puede utilizar para ejecutar varias MicroVM, hasta el límite disponible para la cuenta.

Para obtener instrucciones paso a paso sobre cómo empaquetar el código y crear la primera imagen de MicroVM, consulte Creación de la primera MicroVM.

Dimensionamiento de las MicroVM

Las MicroVM de Lambda utilizan un modelo de capacidad de referencia y máxima que elimina la necesidad de ajustar el tamaño de cada entorno de computación en función de la actividad máxima. Configure los recursos de computación de referencia de la MicroVM. Durante los períodos de máxima actividad, la MicroVM puede escalar verticalmente de forma automática hasta cuatro veces la capacidad de referencia. Mientras la MicroVM está en ejecución, se cobra la tarifa de referencia y solo se paga por lo que se utilice activamente por encima de la capacidad de referencia, con facturación por segundo.

La capacidad de referencia se establece mediante el parámetro memory al crear la imagen de MicroVM. Las vCPU escalan proporcionalmente con la memoria (2 GB = 1 vCPU). La capacidad de referencia predeterminada es de 2 GB/1 vCPU.

En la siguiente tabla se indican los tamaños disponibles:

Referencia Peak Espacio máximo en disco
0,5 GB de memoria, 0,25 vCPU 2 GB de memoria, 1 vCPU 8 GB
1 GB de memoria, 0,5 vCPU 4 GB de memoria, 2 vCPU 8 GB
2 GB de memoria, 1 vCPU (valor predeterminado) 8 GB de memoria, 4 vCPU 8 GB
4 GB de memoria, 2 vCPU 16 GB de memoria, 8 vCPU 16 GB
8 GB de memoria, 4 vCPU 32 GB de memoria, 16 vCPU 32 GB

Imágenes base de MicroVM

Una imagen base de MicroVM sirve como base para las imágenes de MicroVM. Lambda publica una imagen base de MicroVM que proporciona el sistema operativo Amazon Linux 2023 y los componentes del servicio necesarios para ejecutar MicroVM. Cuando crea o actualiza una imagen de MicroVM, Lambda inicia una nueva MicroVM a partir de esta imagen base y ejecuta las instrucciones de Dockerfile en este entorno de sistema operativo.

Lambda publica periódicamente nuevas versiones de las imágenes base de MicroVM administradas por el servicio, por ejemplo, cuando aplica parches de seguridad para actualizar el sistema operativo o los componentes del servicio. De forma predeterminada, se aplica la versión más reciente de una imagen base administrada por el servicio al crear o actualizar imágenes de MicroVM propias. Para solucionar problemas o depurar, al crear su propia imagen de MicroVM, puede especificar de forma opcional una versión distinta de las imágenes base administradas por el servicio mediante el parámetro base-image-version.

Las versiones de las imágenes base siguen un ciclo de vida de desuso:

  • AVAILABLE: versión actual, recomendada para su uso.

  • DEPRECATED (60 días): existe una versión más reciente. Aún puede compilar y ejecutar.

  • EXPIRING (30 días): no se pueden crear imágenes nuevas. Las imágenes existentes aún se pueden ejecutar.

  • EXPIRED: no se puede compilar ni ejecutar. Vuelva a compilar su imagen con una versión compatible.

  • RECALLED: deja de estar disponible de inmediato debido a problemas críticos de seguridad, lo cual ocurre en raras ocasiones.

Para mantenerse al día, supervise las notificaciones de desuso y vuelva a compilar las imágenes de MicroVM cuando se publique una nueva versión de la imagen base.

Tenga en cuenta que la imagen base de MicroVM es distinta de la imagen base de contenedor que se especifica en los archivos Dockerfile. La primera define el entorno del sistema operativo de las MicroVM, mientras que la segunda define qué imagen base de contenedor se debe utilizar para empaquetar la aplicación destinada a MicroVM de Lambda. Consulte la sección en Imágenes de base de contenedores para obtener más información.

Utilice las siguientes API para consultar las imágenes base de MicroVM administradas disponibles y sus versiones:

# List all managed MicroVM base images aws lambda-microvms list-managed-microvm-images # List the versions of a specific managed MicroVM base image aws lambda-microvms list-managed-microvm-image-versions \ --image-identifier arn:aws:lambda:us-east-1:aws:microvm-image:al2023-1

Enlaces de compilación de imágenes de MicroVM

Lambda proporciona enlaces de compilación de imágenes de MicroVM que permiten comprobar que la aplicación funcione correctamente y optimizar el rendimiento durante la creación de la imagen de MicroVM. Los enlaces se ejecutan antes de que Lambda capture la instantánea que se utiliza para inicializar cada MicroVM. Cada enlace es un punto de conexión HTTP que la aplicación expone y al que Lambda llama durante la compilación. Al responder a estas solicitudes, puede controlar y validar el proceso de compilación de la imagen de MicroVM. Lambda utiliza códigos de estado HTTP para determinar si los enlaces se completaron correctamente.

importante

Si configura algún enlace, debe especificar el puerto en el que la aplicación escucha las solicitudes de los enlaces.

Enlace Ruta Details HTTP Status Codes Tiempo de espera
/ready /aws/lambda-microvms/runtime/v1/ready Se llama durante la compilación de la imagen de MicroVM, después de que la aplicación se inicia mediante ENTRYPOINT o CMD. Indica que la aplicación está lista para que se capture una instantánea. HTTP 503: aún no está lista; Lambda vuelve a intentarlo hasta que se agota el tiempo de espera. HTTP 200: inicialización completada; Lambda captura la instantánea. De 1 a 3600 segundos (readyTimeoutInSeconds)
/validate /aws/lambda-microvms/runtime/v1/validate Se llama después de que finaliza la compilación, en una nueva MicroVM que se inicia a partir de la imagen creada. Confirma que la aplicación funciona correctamente cuando se reanuda. HTTP 503: la validación necesita más tiempo para completarse; Lambda vuelve a intentarlo hasta que se agota el tiempo de espera. HTTP 200: la validación se completó correctamente. De 1 a 3600 segundos (validateTimeoutInSeconds)
importante

Cuando devuelva HTTP 503, hágalo de inmediato en lugar de mantener abierta la solicitud durante la espera. Si el tiempo de espera se agota mientras una solicitud permanece abierta, Lambda finaliza la compilación.

nota

También puede utilizar el enlace /validate para optimizar el tiempo de inicio. Para ello, ejecute cargas útiles simuladas durante la validación. Esto permite que Lambda realice un seguimiento de las regiones de la instantánea a las que se accede y optimice su recuperación durante el inicio de la MicroVM.

Actualización de una imagen de MicroVM

Puede actualizar una imagen de MicroVM existente mediante una llamada a la API update-microvm-image. Cada actualización desencadena la compilación de una nueva versión de la imagen de MicroVM. Por lo general, una imagen de MicroVM se actualiza para:

  • Implementación de código nuevo de la aplicación: hacer referencia a un nuevo artefacto de código, como un archivo ZIP nuevo cargado en Amazon S3, para publicar una nueva versión de la aplicación.

  • Migración a una imagen base de MicroVM más reciente: cambiar el ARN de la imagen base de MicroVM para utilizar versiones más recientes de la imagen base de MicroVM de Lambda. Para obtener más información, consulte Aplicación de parches a imágenes de MicroVM y Imágenes base de MicroVM.

  • Cambio del rol de compilación: actualizar el ARN del rol de compilación cuando cambien los permisos que Lambda necesita durante la compilación, por ejemplo, cuando el artefacto de código se traslade a otro bucket de Amazon S3 o cuando se empiece a extraer contenido de un repositorio privado de ECR.

  • Ajuste de la configuración del tiempo de ejecución: cambiar los enlaces, las variables de entorno o las capacidades para volver a configurar cómo se compila y ejecuta la imagen de MicroVM de Lambda.

  • Actualización de la descripción: cambiar la descripción de la imagen de MicroVM de Lambda para registrar los cambios realizados en esta versión.

El siguiente comando de la CLI muestra cómo actualizar una imagen de MicroVM de Lambda. Los parámetros --base-image-arn y --build-role-arn son obligatorios en todas las llamadas aupdate-microvm-image que desencadenan una nueva compilación, incluso cuando solo se cambia el artefacto de código. Si se omiten, se genera una ValidationException:

aws lambda-microvms update-microvm-image \ --image-identifier arn:aws:lambda:us-east-1:123456789012:microvm-image:my-microvm-image \ --code-artifact uri=s3://my-bucket/deployments/app-v2.zip \ --base-image-arn arn:aws:lambda:us-east-1:aws:microvm-image:al2023-1 \ --build-role-arn arn:aws:iam::123456789012:role/MicrovmBuildRole \ --description "Updated with v2 application code"

Estados de la imagen y estados de compilación

Cada vez que se crea o actualiza una imagen de MicroVM, Lambda genera una nueva versión compilada a partir del artefacto de código y la imagen base. Una imagen de MicroVM puede tener muchas versiones con el tiempo, y las MicroVM se ejecutan a partir de una versión específica.

Tres estados independientes permiten supervisar distintos aspectos del ciclo de vida:

  • Estado de la imagen: ciclo de vida general del recurso de imagen de MicroVM, que puede estar en proceso de creación, listo para usarse, en proceso de actualización, con errores o en proceso de eliminación.

  • Estado de la versión: progreso de compilación de una versión específica, que puede estar pendiente, en proceso de compilación, completada correctamente o con errores. Consulte stateReason o los registros de CloudWatch (/aws/lambda/microvms/<image-name>) para obtener información sobre los errores.

  • Activación de la versión: indica si una versión compilada correctamente puede ejecutar MicroVM. Lambda establece automáticamente las versiones nuevas en ACTIVE. Puede establecer una versión en INACTIVE para desactivarla sin eliminarla.

Estado Valores posibles Responsable de la transición
Estado de la imagen CREATING, CREATED, CREATION_FAILED, UPDATING, UPDATED, UPDATE_FAILED, DELETING, DELETED, DELETION_FAILED Lambda (automático)
Estado de la versión PENDING, IN_PROGRESS, SUCCESSFUL, FAILED Lambda (automático)
Activación de la versión ACTIVE, INACTIVE Usuario (update-microvm-image-version --state)

Para ejecutar una MicroVM a partir de una versión, el estado de la imagen debe ser CREATED o UPDATED, el estado de la versión debe ser SUCCESSFUL y la versión debe estar en ACTIVE.

nota

Estos estados son independientes. Una imagen cuyo estado sea CREATED puede contener una versión cuyo estado sea FAILED.

# De-activate a version aws lambda-microvms update-microvm-image-version \ --image-identifier my-image \ --image-version 1.0 \ --state INACTIVE

Variables de entorno

Las variables de entorno se configuran durante la compilación de la imagen de MicroVM mediante el campo environmentVariables (máximo de 50 variables). Estas variables se insertan en el contenedor durante el proceso de compilación de la instantánea. Puede pasar cargas útiles configuradas dinámicamente al ejecutar una MicroVM nueva. Consulte la sección sobre la ejecución de una MicroVM para obtener más información.

Aplicación de parches a imágenes de MicroVM

Cuando haya disponible una nueva imagen base de MicroVM, puede realizar una llamada update-microvm-image para desencadenar la compilación de una imagen de MicroVM con los parches más recientes. Para ello, puede omitir el argumento base-image-version, con lo cual se utiliza la versión más reciente, o especificar el argumento con dicha versión.

Imágenes de base de contenedores

Las MicroVM de Lambda ejecutan la aplicación como un contenedor dentro del entorno del sistema operativo de la MicroVM. El contenedor se define mediante Dockerfile, y la instrucción FROM del Dockerfile establece la imagen base de contenedor de la aplicación.

Puede comenzar con la imagen base de contenedor de Lambda para Amazon Linux 2023 (public.ecr.aws/lambda/microvms:al2023-minimal) y agregar las instrucciones Dockerfile correspondientes, o bien utilizar una imagen base de contenedor propia. Cuando utilice imágenes de contenedor propias, compruebe que se cumplan los siguientes requisitos:

Requisitos

  • La imagen base de contenedor debe ser compatible con la arquitectura de CPU de destino.

  • Las imágenes base de contenedor de repositorios privados de AWS ECR requieren que el rol de compilación tenga los permisos ecr:GetAuthorizationToken y ecr:BatchGetImage.

  • La imagen base de contenedor se debe basar en un sistema operativo Linux.

  • Las imágenes base de contenedor deben ser accesibles desde la infraestructura de compilación de Lambda, ya sea a través de Internet público o de un repositorio de ECR de la misma cuenta de AWS.

  • Las imágenes base de contenedor deben ser compatibles con instantáneas. Consulte las instrucciones que aparecen a continuación.

Imágenes base compatibles con instantáneas

Dado que las MicroVM de Lambda inician cada MicroVM a partir de una instantánea preinicializada, las imágenes base deben ser compatibles con instantáneas. Se recomienda consultar la sección sobre Consideraciones sobre compatibilidad cuando se utilicen imágenes base propias con las MicroVM de Lambda.

Uso de una imagen privada de ECR

Incluya una referencia a la imagen base de contenedor privada de ECR en la instrucción FROM del Dockerfile:

FROM 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-base:latest WORKDIR /app COPY . . CMD ["./my-app"]

Agregue los siguientes permisos al rol de compilación:

{ "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*" }

Capacidades del sistema operativo

De forma predeterminada, las MicroVM de Lambda se ejecutan con un conjunto estándar de capacidades de Linux. Puede conceder capacidades de Linux elevadas mediante el campo additionalOsCapabilities al crear o actualizar una imagen de MicroVM. El único valor admitido es ["ALL"]. Las capacidades elevadas permiten realizar operaciones como montar sistemas de archivos, crear espacios de nombres de red o ejecutar programas eBPF. Las capacidades se aplican dentro del límite de aislamiento de la máquina virtual y no afectan al host ni a otras MicroVM.

aws lambda-microvms create-microvm-image \ --name my-network-tool \ --code-artifact uri=s3://my-bucket/app.zip \ --base-image-arn arn:aws:lambda:us-east-1:aws:microvm-image:al2023-1 \ --build-role-arn arn:aws:iam::123456789012:role/BuildRole \ --additional-os-capabilities '["ALL"]'