View a markdown version of this page

Imagens da microVM - AWS Lambda

Imagens da microVM

Esta seção descreve como compilar, configurar, atualizar e gerenciar imagens de microVM.

A imagem da microVM é um recurso que define o ambiente do sistema de arquivos e da aplicação de uma microVM. A imagem da microVM inclui seu ambiente de runtime, o código da aplicação e os programas de suporte, como os processos em segundo plano e os agentes de observabilidade. Para criar a imagem de uma microVM, você fornece um pacote compactado que contém um Dockerfile e os artefatos da sua aplicação, que serão carregados no Amazon S3. O Dockerfile define como sua aplicação é empacotada. O Lambda compila a imagem do contêiner da sua aplicação executando o Dockerfile com base no ambiente de sistema operacional fornecido por uma imagem base da microVM gerenciada pelo Lambda. As imagens de base da MicroVM são descritas abaixo, na seção intitulada Imagens de base da microVM.

Você pode atualizar as imagens de base da microVM para atualizar o código da aplicação ou a configuração de suas microVMs. Cada atualização que você aciona cria uma nova versão da imagem da microVM.

Como o Lambda compila uma imagem de microVM

Quando você cria uma imagem de microVM, o Lambda:

  • Recupera seus artefatos empacotados do Amazon S3.

  • Inicia uma nova microVM a partir da imagem definida como base gerenciada pelo Lambda.

  • Executa as instruções em seu Dockerfile.

  • Inicia sua aplicação usando a instrução ENTRYPOINT ou CMD.

  • Aguarda a conclusão da inicialização, sinalizada pelo gancho do ciclo de vida.

  • Captura um snapshot do estado do disco e da memória.

Quando o processo de snapshot é concluído, a imagem da microVM entra no estado CREATED. Agora você pode usar essa imagem da microVM para criar uma microVM e cada imagem da microVM pode ser usada para criar várias microVMs independentes. Uma microVM executada a partir da imagem da microVM é retomada diretamente do estado de snapshot, fornecendo tempos de startup rápidos. Cada imagem da microVM pode ser usada para executar várias microVMs, até o limite disponível para sua conta.

Para obter uma explicação passo a passo sobre como empacotar seu código e criar sua primeira imagem de microVM, consulte Criar sua primeira microVM.

Dimensionamento da microVM

O Lambda MicroVMS usa um modelo de pico como referência que elimina a necessidade de dimensionar corretamente cada ambiente de computação para atividades de pico. Você configura os recursos de computação de referência para sua microVM. Durante o pico de atividade, a microVM pode ser automaticamente escalada de maneira vertical até 4 vezes a referência. Você paga a taxa de referência enquanto sua microVM está em execução e paga apenas pelo que você usa ativamente acima da referência, cobrado por segundo.

Você define a referência por meio do parâmetro memory ao criar a imagem da microVM. A vCPU escala proporcionalmente à memória (2 GB = 1 vCPU). A referência padrão é 2 GB/1 vCPU.

A tabela a seguir lista os tamanhos disponíveis:

Referência Peak Espaço máximo em disco
0,5 GB de memória, 0,25 vCPU 2 GB de memória, 1 vCPU 8 GB
1 GB de memória, 0,5 vCPU 4 GB de memória, 2 vCPU 8 GB
2 GB de memória, 1 vCPU (padrão) 8 GB de memória, 4 vCPU 8 GB
4 GB de memória, 2 vCPU 16 GB de memória, 8 vCPU 16 GB
8 GB de memória, 4 vCPU 32 GB de memória, 16 vCPU 32 GB

Imagens de base da microVM

Uma imagem de referência da microVM serve como base para as imagens da microVM. O Lambda publica uma imagem base da microVM que fornece o sistema operacional Amazon Linux 2023 e os componentes de serviço necessários para executar as microVMs. Quando você cria ou atualiza a imagem de uma microVM, o Lambda inicia uma nova microVM a partir dessa imagem base e executa suas instruções Dockerfile nesse ambiente de sistema operacional.

O Lambda lança periodicamente novas versões de imagens base de microVM gerenciadas por serviços, como, por exemplo, ao aplicar patches de segurança para atualizar o sistema operacional ou os componentes de serviço. Por padrão, a versão mais recente de uma imagem base gerenciada pelo serviço se aplica quando você está criando/atualizando suas próprias imagens de microVM. Para solucionar problemas ou depurar, você pode, opcionalmente, substituir a versão das imagens baseadas em serviços gerenciados ao criar sua própria imagem de microVM usando o parâmetro base-image-version.

As versões da imagem base seguem um ciclo de vida de descontinuação:

  • AVAILABLE – Atual, recomendada para uso.

  • DEPRECATED (60 dias) – Existe uma versão mais recente. Você ainda pode compilar e executar.

  • EXPIRING (30 dias) – Não é possível criar novas imagens. As imagens existentes ainda podem ser executadas.

  • EXPIRED – Não é possível compilar nem executar. Recompile sua imagem em uma versão compatível.

  • RECALLED – Imediatamente indisponível devido a problemas críticos de segurança (raro).

Para se manter atualizado, monitore as notificações de descontinuação e recompile as imagens de microVM quando uma nova versão de imagem base for lançada.

Observe que a imagem base da microVM é diferente da imagem base do contêiner que você especifica em seus Dockerfiles. Enquanto a primeira define o ambiente do sistema operacional para as microVMS, a segunda define qual imagem de contêiner base usar ao empacotar a aplicação para uso com o Lambda MicroVMS. Consulte a seção em Imagens de base de contêiner para obter mais detalhes.

Use as seguintes APIs para descobrir as imagens base de microVM gerenciadas que estão disponíveis e suas respectivas versões:

# 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

Hooks de compilação de imagens de microVM

O Lambda fornece hooks de compilação de imagens de microVM que permitem verificar a exatidão da aplicação e otimizar o desempenho durante a criação de imagens de microVM. Os hooks são executados antes que o Lambda tire o snapshot que será usado para inicializar cada microVM. Cada hook é um endpoint HTTP que sua aplicação expõe e que o Lambda chama durante a compilação. Ao responder a essas solicitações, você controla e valida o processo de compilação da imagem da microVM. O Lambda usa códigos de status HTTP para determinar se os hooks foram concluídos com êxito.

Importante

Se algum hook for configurado, você deverá especificar a porta da aplicação para receber as solicitações de hook.

Hook Caminho Detalhes HTTP Status Codes Tempo limite
/ready /aws/lambda-microvms/runtime/v1/ready Chamado durante a compilação da imagem da microVM, após o início da aplicação por meio de ENTRYPOINT ou CMD. Sinaliza que a aplicação está pronta para snapshot. HTTP 503: ainda não está pronta; o Lambda tenta novamente até o tempo limite. HTTP 200: inicialização concluída; o Lambda executa o snapshot. 1 a 3.600 segundos (readyTimeoutInSeconds)
/validate /aws/lambda-microvms/runtime/v1/validate Chamado após a conclusão da compilação em uma nova microVM iniciada a partir da imagem criada. Confirma que a aplicação funciona corretamente ao ser retomada. HTTP 503: a validação precisa de mais tempo para ser concluída; o Lambda tenta novamente até o tempo limite. HTTP 200: validação aprovada. 1 a 3.600 segundos (validateTimeoutInSeconds)
Importante

Quando HTTP 503 for retornado, retorne-o imediatamente, em vez de manter a solicitação aberta enquanto você espera. Se o tempo limite expirar enquanto uma solicitação for mantida aberta, o Lambda encerra a compilação.

nota

Você também pode usar o hook /validate para otimizar o tempo de startup. Para fazer isso, execute cargas úteis durante a validação. Isso permite que o Lambda rastreie as regiões do snapshot que foram acessadas e otimize sua recuperação durante o startup da microVM.

Atualização de uma imagem de microVM

Você pode atualizar a imagem existente da microVM chamando a API update-microvm-image. Cada atualização aciona uma nova compilação da versão da imagem da microVM. Normalmente, você atualiza a imagem de uma microVM para:

  • Implantar o novo código da aplicação: aponte para um novo artefato de código (um novo zip carregado no Amazon S3) para enviar uma nova versão da aplicação.

  • Mover para uma imagem base de microVM mais recente: altere o ARN da imagem base da microVM para atualizar para as versões mais recentes da imagem base do Lambda MicroVM. Para ter mais informações, consulte Patches de imagem de MicroVM e Imagens de base da microVM.

  • Altere o perfil de compilação: atualize o ARN do perfil de compilação quando as permissões que o Lambda precisar durante a compilação forem alteradas, como quando seu artefato de código for movido para um bucket diferente do Amazon S3 ou você começar a extrair de um repositório ECR privado.

  • Ajuste a configuração do runtime: altere hooks, variáveis de ambiente ou recursos para reconfigurar a forma como a imagem da microVM é compilada e executada.

  • Atualize a descrição: altere a descrição da imagem da microVM para registrar o que foi alterado nessa versão.

O comando da CLI a seguir mostra como atualizar uma imagem da microVM. Os parâmetros --base-image-arn e --build-role-arn são obrigatórios em cada chamada update-microvm-image que acionar uma nova compilação, mesmo quando você está apenas alterando o artefato do código. Omitir esses parâmetros resulta em 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 imagem e estados de compilação

Sempre que você cria ou atualiza a imagem de uma microVM, o Lambda produz uma nova versão compilada a partir do artefato de código e da imagem base. A imagem da microVM pode ter várias versões ao longo do tempo; você executa microVMs a partir de uma versão específica.

Três estados independentes monitoram diferentes aspectos do ciclo de vida:

  • Estado da imagem: o ciclo de vida geral do recurso de imagem da microVM (sendo criada, pronta para uso, sendo atualizada, com falha ou sendo excluída).

  • Estado da versão: o progresso da compilação de uma versão específica (pendente, compilada, com êxito ou com falha). Verifique stateReason ou os logs do CloudWatch (/aws/lambda/microvms/<image-name>) para saber os detalhes da falha.

  • Ativação da versão: se uma versão compilada com êxito tem permissão para executar microVMs. O Lambda define as novas versões automaticamente como ACTIVE. Você pode definir uma versão como INACTIVE para desativá-la sem excluí-la.

Estado Possíveis valores Transição controlada por
Estado da imagem CREATING, CREATED, CREATION_FAILED, UPDATING, UPDATED, UPDATE_FAILED, DELETING, DELETED, DELETION_FAILED Lambda (automático)
Estado da versão PENDING, IN_PROGRESS, SUCCESSFUL, FAILED Lambda (automático)
Ativação da versão ACTIVE, INACTIVE Você (update-microvm-image-version --state)

Para executar uma microVM a partir de uma versão, o estado da imagem deve ser CREATED ou UPDATED, o estado da versão deve ser SUCCESSFUL e a versão deve ser ACTIVE.

nota

Esses estados são independentes. Uma imagem no estado CREATED pode conter uma versão cujo estado é FAILED.

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

Variáveis de ambiente

As variáveis do ambiente são definidas no momento da compilação da imagem da microVM por meio do campo environmentVariables (máximo de 50 variáveis). Eles são injetados no contêiner durante o processo de compilação do snapshot. Você pode transmitir cargas úteis definidas dinamicamente ao executar uma nova microVM. Consulte a seção sobre como executar a microVM para saber mais.

Patches de imagem de MicroVM

Quando há uma nova imagem base da microVM disponível, você pode emitir uma chamada update-microvm-image para acionar a compilação de uma imagem da microVM com os patches mais recentes, seja omitindo o argumento base-image-version (para a versão mais recente) ou especificando o argumento com a versão mais recente.

Imagens de base de contêiner

O Lambda MicroVMS executa sua aplicação como um contêiner dentro do ambiente do sistema operacional da microVM. Você define esse contêiner com o Dockerfile e a instrução FROM no Dockerfile define a imagem base do contêiner para sua aplicação.

Você pode começar com a imagem base do contêiner do Lambda para o Amazon Linux 2023 (public.ecr.aws/lambda/microvms:al2023-minimal) e adicionar as instruções Dockerfile com base nela ou usar sua própria imagem base do contêiner. Ao usar suas próprias imagens de contêiner, valide os seguintes requisitos:

Requisitos

  • A imagem base do contêiner deve ser compatível com a arquitetura da CPU de destino.

  • As imagens base dos contêineres a partir dos repositórios privados do AWS ECR exigem que o perfil de compilação tenha as permissões ecr:GetAuthorizationToken e ecr:BatchGetImage.

  • A imagem base do contêiner deve ser baseada em um sistema operacional Linux.

  • As imagens base do contêiner devem ser acessíveis a partir da infraestrutura de compilação do Lambda (internet pública ou um repositório ECR na mesma conta da AWS.

  • As imagens base do contêiner devem ser compatíveis com snapshots. Consulte as instruções abaixo.

Imagens base compatíveis com snapshots

Como o Lambda MicroVMS inicia cada microVM a partir de um snapshot pré-inicializado, as imagens definidas como base devem ser compatíveis com snapshot. Recomendamos a leitura da seção sobre Considerações sobre compatibilidade ao usar suas próprias imagens base com o Lambda MicroVMS.

Uso de uma imagem ECR privada

Consulte a imagem base do contêiner ECR privado na instrução FROM do Dockerfile:

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

Adicione as seguintes permissões ao perfil de compilação:

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

Recursos do sistema operacional

Por padrão, o Lambda MicroVMS é executado com um conjunto padrão de recursos Linux. Você pode conceder recursos elevados do Linux usando o campo additionalOsCapabilities ao criar ou atualizar uma imagem de microVM. O único valor aceito é ["ALL"]. Os recursos elevados permitem operações como a montagem de sistemas de arquivos, a criação de namespaces de rede ou a execução de programas eBPF. Os recursos são aplicados dentro do limite de isolamento da VM e não afetam o host ou outras microVMs.

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"]'