

# Conceitos fundamentais do AWS Lambda MicroVMS
<a name="microvms-how-it-works"></a>

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
<a name="microvms-key-concepts"></a>

**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](#microvms-build-process) 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 (`PENDING`→ `IN_PROGRESS` → `SUCCESSFUL` 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](microvms-images.md).

**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
<a name="microvms-build-process"></a>

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.

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

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

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

1. 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](microvms-images.md).

## Ciclo de vida do microVM
<a name="microvms-lifecycle-overview"></a>

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`.

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

1. **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.

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

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

### Estados
<a name="microvms-states"></a>

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 name="microvms-transitions"></a>

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.