View a markdown version of this page

Conceitos fundamentais do AWS Lambda MicroVMS - AWS Lambda

Conceitos fundamentais do AWS Lambda MicroVMS

O AWS Lambda MicroVMS usa vários tipos de recursos que você cria e gerencia. Esta página descreve cada tipo de recurso, como o Lambda compila a imagem da microVM em um snapshot e os estados do ciclo de vida pelos quais uma microVM passa em runtime, a base para compilar aplicações com microVMs.

Principais conceitos

MicroVM

Uma microVM é um recurso que representa um ambiente computacional isolado para um único locatário, sessão de usuário ou trabalho. Cada microVM executa um sistema operacional Amazon Linux 2023 com recursos de sistema operacional, oferecendo execução e retomada quase instantâneas. As microVMs recebem solicitações por meio de conexões HTTPS de entrada e podem ser suspensas quando estiverem ociosas, preservando a memória e o estado do disco. Uma microVM suspensa é retomada quando o tráfego retorna.

Imagem da microVM

A imagem da microVM é um recurso que define o ambiente de aplicação de uma microVM. Quando você cria uma imagem, o Lambda a compila em um snapshot que permite inicialização quase instantânea (consulte Como o Lambda compila a imagem abaixo).

Para criar a imagem de uma microVM, você fornece um pacote compactado contendo um Dockerfile e os artefatos da sua aplicação, carregados no Amazon S3. Use uma imagem gerenciada e publicada pelo Lambda como base e especifique-a com o parâmetro base-image-arn. O Dockerfile define as camadas da aplicação que o Lambda compila sobre a base gerenciada.

As imagens da microVM têm versões. Cada versão representa uma única compilação produzida a partir de um artefato de código e uma imagem base específicos. A versão avança pelos estados de compilação (PENDINGIN_PROGRESSSUCCESSFUL ou FAILED) e as versões bem-sucedidas podem ser definidas como ACTIVE ou INACTIVE. Para obter detalhes sobre os estados e o gerenciamento das imagens, consulte Imagens da microVM.

Conectores de rede

Os conectores de rede são recursos que controlam como o tráfego chega à microVM e como sua microVM chega aos serviços externos. Você associa conectores a uma microVM em runtime para configurar o acesso de entrada e saída de forma independente.

Os conectores de tempo de compilação e de runtime podem ser diferentes, permitindo que sua microVM alcance ambientes diferentes durante a compilação da imagem, em comparação com o runtime.

Use os padrões fornecidos pelo Lambda para acesso à porta de entrada (com autenticação JWE), acesso ao shell e saída pública da internet. Crie seu próprio conector de rede para rotear o tráfego de saída pela sua VPC.

Como o Lambda compila a imagem

Quando você cria ou atualiza a imagem de uma microVM, o Lambda executa um processo de compilação que produz um snapshot do Firecracker. Esse snapshot captura o estado totalmente inicializado da aplicação, permitindo a inicialização e a retomada quase instantâneas das microVMs executadas a partir dele.

O processo de compilação:

  1. O Lambda provisiona uma nova microVM usando a imagem base gerenciada que você especificou.

  2. O Lambda executa as instruções do Dockerfile para instalar dependências e configurar o ambiente.

  3. O Lambda inicia a aplicação usando o comando ENTRYPOINT ou CMD.

  4. Se você habilitar o hook /ready, o Lambda aguarda até que a aplicação sinalize que está pronta (HTTP 200).

  5. O Lambda captura um snapshot do estado do disco e da memória, incluindo todos os processos em execução.

Quando você executa uma microVM, o Lambda a restaura a partir desse snapshot. Sua aplicação é retomada do estado pré-inicializado sem repetir o startup.

Se a aplicação gerar conteúdo exclusivo durante a compilação (como IDs, segredos ou conexões de rede exclusivos), esse conteúdo será compartilhado entre todas as microVMs executadas a partir da mesma versão da imagem. Para evitar isso, gere conteúdo exclusivo depois que a microVM começar a usar o gancho do ciclo de vida /run. Para obter detalhes, consulte a seção de compatibilidade de snapshots em Imagens da microVM.

Ciclo de vida do microVM

Em runtime, uma microVM passa pelos estágios a seguir:

  1. Executar: você chama run-microvm. O Lambda restaura a microVM a partir do snapshot da imagem, atribui uma ID exclusiva e cria um endpoint. A microVM faz a transição de PENDING para RUNNING.

  2. Em execução: sua aplicação recebe e processa solicitações por meio do URL do endpoint.

  3. Suspender: após um período de inatividade configurável (ou por meio da API suspend-microvm), a microVM passa de SUSPENDING para SUSPENDED. O estado da memória e do disco são preservados.

  4. Retomar: a microVM retorna diretamente de SUSPENDED para RUNNING quando o tráfego chega (se autoResumeEnabled=true) ou você chama resume-microvm.

  5. Encerrar: a microVM passa de TERMINATING para TERMINATED quando você chama terminate-microvm ou a duração máxima é excedida.

Estados

A tabela a seguir descreve cada estado da microVM. Esses estados permitem que você crie aplicações confiáveis e implemente o tratamento de erros adequado.

Estado Descrição
PENDING A microVM está sendo provisionada. Os recursos estão sendo alocados e o snapshot está sendo carregado.
RUNNING A microVM está ativa e aceita tráfego por meio do URL do endpoint. O hook /run foi concluído.
SUSPENDING A microVM está sendo suspensa. O hook /suspend está sendo executado. O disco e a memória estão sendo verificados.
SUSPENDED A microVM é suspensa. O estado é preservado. Nenhuma cobrança de computação é acumulada. Pode ser retomada ou encerrada.
TERMINATING A microVM está sendo encerrada. O hook /terminate está sendo executado. Os recursos estão sendo liberados.
TERMINATED A MicroVM foi encerrada. Este é um estado terminal. A microVM não pode ser retomada nem reiniciada.

Transições de estados

A tabela a seguir mostra as transições válidas entre os estados da microVM e o que aciona cada transição.

Estado inicial Estado final Trigger
PENDING RUNNING Provisionamento concluído, hook /run bem-sucedido.
RUNNING SUSPENDING Duração da inatividade excedida ou chamada de API suspend-microvm explícita.
SUSPENDING SUSPENDED Hook /suspend concluído, estado do disco e da memória verificados.
SUSPENDED RUNNING O tráfego chega (autoResumeEnabled=true) ou chamada de API resume-microvm explícita.
RUNNING TERMINATING Chamada de API terminate-microvm explícita ou maximumDurationInSeconds excedida.
SUSPENDED TERMINATING terminate-microvm excedida ou chamada de API suspendedDurationSeconds explícita.
TERMINATING TERMINATED Hook /terminate concluído, todos os recursos liberados.
Importante

Se o hook /run falhar ou atingir o tempo limite, a microVM poderá fazer a transição diretamente para TERMINATING sem atingir a RUNNING. Implemente o tempo limite e o tratamento de erros em seus hooks para evitar falhas silenciosas.