View a markdown version of this page

Trabalhar com snapshots - AWS Lambda

Trabalhar com snapshots

Quando o AWS Lambda MicroVMS compila a imagem de uma microVM, ele captura um snapshot do Firecracker da sua aplicação totalmente inicializada. Esta página descreve o que um snapshot contém, como lidar com a exclusividade entre microVMs que compartilham o mesmo snapshot e as práticas recomendadas para as aplicações compatíveis com snapshots.

O que um snapshot captura

Um snapshot do Firecracker captura o seguinte estado da sua microVM no momento em que a compilação da imagem é concluída:

  • Estado da memória dos processos em execução: todos os processos iniciados por ENTRYPOINT/CMD, inclusive daemons em segundo plano, trabalhos cron e processos secundários.

  • Estado do disco: o sistema de arquivos raiz, incluindo todos os arquivos gravados durante a fase de compilação (pacotes instalados, binários compilados, arquivos de configuração).

  • Conexões de rede e descritores de arquivo: qualquer conexão de rede inicializada, identificadores de arquivo, canais e outros descritores.

Quando você executa uma microVM, o Lambda a restaura a partir desse snapshot. Sua aplicação é retomada exatamente de onde a compilação da versão da imagem da microVM parou.

Considerações sobre compatibilidade

Como todas as microVMs iniciadas a partir da mesma versão de imagem compartilham um estado inicial idêntico, considere o seguinte ao criar aplicações com o Lambda MicroVMS:

  • Exclusividade: se seu código gerar conteúdo exclusivo durante a fase de criação da versão da imagem (IDs exclusivas, segredos ou entropia para pseudoaleatoriedade), esse conteúdo será compartilhado entre todas as microVMs executadas na mesma versão da imagem. Gere conteúdo exclusivo após a inicialização de uma nova microVM, não durante a compilação da imagem. Use o gancho do ciclo de vida /run para redefinir o conteúdo exclusivo gerado anteriormente.

  • Conexões de rede: as conexões estabelecidas durante a fase de compilação da versão da imagem talvez precisem ser restabelecidas quando uma microVM for executada a partir da versão da imagem. Valide o estado das conexões e restabeleça-as conforme necessário. Na maioria dos casos, as conexões criadas pelos AWS SDKs são automaticamente restabelecidas.

Tratamento da exclusividade com snapshots

Todas as microVMs executadas a partir da mesma imagem compartilham um estado inicial idêntico. Para manter a exclusividade em todas as microVMs:

  • Gere IDs, segredos e valores aleatórios exclusivos após a inicialização de uma microVM e não durante a compilação da versão da imagem. Use o gancho do ciclo de vida /run para redefinir qualquer estado exclusivo.

  • Use geradores de números pseudoaleatórios criptograficamente seguros (CSPRNGs) em sua linguagem de programação. Verifique se sua biblioteca criptográfica padrão da linguagem recebe sua entropia do dispositivo /dev/random ou /dev/urandom. Esse é o comportamento padrão das bibliotecas criptográficas de linguagens de programação populares, como Java 11+ (biblioteca SecureRandom), Node.js (biblioteca crypto.randomBytes), Python 3.12+ (biblioteca Secrets.SystemRandom) e Dotnet8+ (biblioteca Cryptography.RandomNumberGenerator). O software que lê /dev/random ou /dev/urandom mantém a aleatoriedade quando usado com os snapshots de imagens da microVM.

  • Se o código da sua aplicação usa OpenSSL, use a imagem de contêiner base fornecida pela AWS a partir de public.ecr.aws/lambda/microvms:al2023-minimal para compilar a imagem da microVM. Essa imagem contém uma versão corrigida pela AWS do OpenSSL que é compatível com snapshots. Se você quiser usar sua própria imagem base com o OpenSSL, use a versão corrigida do OpenSSL (openssl-snapsafe-libs) listada na lista de pacotes do Amazon Linux 2023.