Uso de instantáneas
Cuando MicroVM de AWS Lambda crea una imagen de MicroVM, captura una instantánea de Firecracker de la aplicación completamente inicializada. En esta página se describe el contenido de una instantánea, cómo manejar la unicidad entre las MicroVM que comparten la misma instantánea y las prácticas recomendadas para las aplicaciones compatibles con instantáneas.
Qué captura una instantánea
Una instantánea de Firecracker captura el siguiente estado de la MicroVM en el momento en que finaliza la compilación de la imagen:
-
Estado de la memoria de los procesos en ejecución: todos los procesos lanzados por
ENTRYPOINT/CMD, incluidos los daemons en segundo plano, los trabajos de cron y los procesos secundarios. -
Estado del disco: el sistema de archivos raíz, incluidos todos los archivos escritos durante la fase de compilación, como los paquetes instalados, los archivos binarios compilados y los archivos de configuración.
-
Conexiones de red y descriptores de archivo: todas las conexiones de red inicializadas, los identificadores de archivo, las canalizaciones y otros descriptores.
Cuando ejecuta una MicroVM, Lambda la restaura a partir de esta instantánea. La aplicación reanuda su ejecución exactamente en el punto donde finalizó la compilación de la versión de la imagen de MicroVM.
Consideraciones sobre compatibilidad
Como todas las MicroVM que se lanzan a partir de la misma versión de imagen comparten un estado inicial idéntico, tenga en cuenta lo siguiente al crear aplicaciones con las MicroVM de Lambda:
-
Unicidad: si el código genera contenido único durante la fase de compilación de la versión de imagen, como identificadores únicos, secretos o entropía para la seudoaleatoriedad, ese contenido se comparte entre todas las MicroVM que se ejecutan a partir de la misma versión de imagen. Genere contenido único después de iniciar una nueva MicroVM, no durante la compilación de la imagen. Use el enlace del ciclo de vida
/runpara restablecer el contenido único generado anteriormente. -
Conexiones de red: es posible que las conexiones establecidas durante la fase de compilación de la versión de imagen se deban restablecer cuando se ejecute una MicroVM a partir de esa versión de imagen. Valide el estado de las conexiones y restablézcalas según sea necesario. En la mayoría de los casos, las conexiones creadas por los SDK de AWS se restablecen automáticamente.
Gestión de la unicidad con instantáneas
Todas las MicroVM que se ejecutan a partir de la misma imagen comparten un estado inicial idéntico. Para mantener la unicidad entre las MicroVM:
-
Genere identificadores únicos, secretos y valores aleatorios después de iniciar una MicroVM, no durante la compilación de la versión de imagen. Use el enlace del ciclo de vida
/runpara restablecer cualquier estado único. -
Use generadores de números seudoaleatorios criptográficamente seguros (CSPRNG) para el lenguaje de programación. Compruebe que la biblioteca criptográfica estándar del lenguaje obtenga la entropía del dispositivo
/dev/randomo del dispositivo/dev/urandom. Este es el comportamiento predeterminado de las bibliotecas criptográficas para lenguajes de programación conocidos, como Java 11+ (biblioteca SecureRandom), Node.js (biblioteca crypto.randomBytes), Python 3.12+ (biblioteca Secrets.SystemRandom) y Dotnet8+ (biblioteca Cryptography.RandomNumberGenerator). El software que lee datos de/dev/randomo/dev/urandommantiene la aleatoriedad cuando se usa con instantáneas de imágenes de MicroVM. -
Si el código de la aplicación usa OpenSSL, obtenga de
public.ecr.aws/lambda/microvms:al2023-minimalla imagen de contenedor base proporcionada por AWS y úsela para crear la imagen de MicroVM. Esta imagen contiene una versión de OpenSSL con parches de AWS que es compatible con la creación de instantáneas. Si desea usar una imagen base propia con OpenSSL, use la versión de OpenSSL con parches (openssl-snapsafe-libs) que figura en la lista de paquetes de Amazon Linux 2023.