Hoje, estamos anunciando AWS Lambda MicroVMs, uma nova computação primitiva sem servidor dentro AWS Lambda que permite executar código gerado por usuários ou IA em ambientes de execução isolados e com estado. Você obtém isolamento no nível da máquina digital, inicialização e retomada quase instantâneas e controle direto sobre o ciclo de vida e o estado do ambiente, tudo isso sem gerenciar a infraestrutura ou desenvolver experiência em tecnologias de virtualização complexas. Lambda MicroVMs são alimentados por Fogo de artifícioa mesma tecnologia de virtualização leve que alimentou mais de 15 trilhões de invocações mensais de funções Lambda.
Por que os clientes precisam disso
Nos últimos anos, surgiu uma nova classe de aplicativos multilocatários que compartilham a necessidade de fornecer a cada usuário last seu próprio ambiente de execução dedicado, no qual executar com segurança códigos que o desenvolvedor do aplicativo não escreveu. Assistentes de codificação de IA, ambientes de código interativos, plataformas de análise de dados, scanners de vulnerabilidade e servidores de jogos que executam scripts fornecidos pelo usuário se enquadram nesse padrão. Construir essa capacidade hoje significa fazer uma escolha difícil. As máquinas virtuais oferecem um forte isolamento, mas demoram alguns minutos para serem iniciadas. Os contêineres são iniciados em segundos, mas sua arquitetura de kernel compartilhado exige um reforço personalizado significativo para conter com segurança códigos não confiáveis. As funções como serviço são otimizadas para cargas de trabalho de solicitação e resposta orientadas a eventos, mas não foram projetadas para sessões interativas de longa duração que precisam reter o estado do ambiente nas interações do usuário. Isso faz com que os desenvolvedores aceitem compensações entre desempenho e isolamento ou invistam recursos de engenharia significativos para construir e operar infraestrutura de virtualização personalizada para obter execução isolada e, ao mesmo tempo, fornecer experiências de baixa latência aos usuários finais. Isso representa um esforço que exige profundo conhecimento e tira o tempo de engenharia do produto que eles estão realmente tentando construir.
Lambda MicroVMs foi desenvolvido especificamente para essa lacuna. Cada MicroVM fornece a um único usuário last ou sessão seu próprio ambiente isolado que é iniciado rapidamente, retém a memória e o estado do disco durante a sessão e faz uma pausa com baixo custo de inatividade quando o usuário se afasta. Como a mesma tecnologia Firecracker já sustenta o AWS Lambda Capabilities, você herda a maturidade operacional de um serviço que executa essa pilha em escala.
Vamos experimentar
Para começar, naveguei até o console do AWS Lambda, onde Lambda MicroVMs agora aparece no menu de navegação à esquerda. Primeiro preciso criar uma imagem MicroVM.
Empacotei um aplicativo da internet Flask e seu Dockerfile em um arquivo zip, carreguei-o em um Serviço de armazenamento simples da Amazon (Amazon S3) balde.
API My Flask – app.py
import logging
from flask import Flask, jsonify
app = Flask(__name__)
logging.basicConfig(stage=logging.INFO)
@app.route("/")
def good day():
app.logger.data("Acquired request to good day world endpoint")
return jsonify(message="Whats up, World!")
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
Meu Dockerfile
FROM public.ecr.aws/lambda/microvms:al2023-minimal
RUN dnf set up -y python3 python3-pip && dnf clear all
WORKDIR /app
COPY necessities.txt .
RUN pip set up --no-cache-dir -r necessities.txt
COPY app.py .
EXPOSE 5000
CMD ("gunicorn", "--bind", "0.0.0.0:5000", "app:app")
Usei o seguinte comando para criar minha imagem MicroVM.
aws lambda-microvms create-microvm-image
--code-artifact uri= --name
--base-image-arn arn:aws:lambda:us-east-1:aws:microvm-image:al2023-1
--build-role-arn 
Você também pode criar a imagem MicroVM no Console AWS como na imagem acima. Depois de executar o comando, o Lambda recuperou o zip, executou o Dockerfile, inicializou o aplicativo e tirou um instantâneo do Firecracker do disco em execução e do estado da memória. Crie registros transmitidos em tempo actual para Amazon CloudWatch sob /aws/lambda/microvms/e quando a imagem ficou pronta ela apareceu no console com seu Nome de recurso da Amazon (ARN) e número da versão.
aws lambda-microvms run-microvm
--image-identifier arn:aws:lambda:::microvm-image:my-image
--execution-role-arn arn:aws:iam:::function/MicroVMExecutionRole
--idle-policy '{"maxIdleDurationSeconds":900,"suspendedDurationSeconds":300,"autoResumeEnabled":true}'
O lançamento também pode ser feito por meio do Console AWS ou da CLI. Passei o ARN da imagem e uma política de inatividade configurada para suspensão automática após 15 minutos de inatividade e retomada automática na próxima solicitação recebida. Nenhuma configuração de rede foi necessária. Lambda atribuiu ao MicroVM um ID exclusivo, retornou um URL de endpoint dedicado e iniciou um novo MicroVM com meu aplicativo Flask já em execução, uma vez que foi retomado a partir de um snapshot. Meu aplicativo Flask já estava em execução no momento em que o lançamento foi concluído. Uma chamada de API para obter um ambiente de computação totalmente inicializado e inicializado.

Para enviar tráfego, gerei um token de autenticação de curta duração com a CLI e anexei-o a uma solicitação HTTPS simples usando o X-aws-proxy-auth cabeçalho. A solicitação chegou ao meu aplicativo Flask imediatamente. Em seguida, deixei o MicroVM ficar ocioso além do limite de suspensão, ponto em que o MicroVM foi suspenso, com sua memória e estado do disco capturados e armazenados. Em seguida, enviei outra solicitação e ela foi retomada com o estado do aplicativo totalmente intacto. Do lado do cliente, a pausa nunca aconteceu.

Como funciona
Nos bastidores, os Lambda MicroVMs oferecem três recursos que, até hoje, nenhum serviço de computação da AWS oferecia em conjunto. O primeiro é o isolamento no nível da máquina digital, que vem do Firecracker. Cada sessão é executada em seu próprio MicroVM dedicado, sem kernel compartilhado e sem recursos compartilhados entre usuários, portanto, o código não confiável fornecido por um usuário fica contido em seu ambiente de execução, sem acesso a outros ambientes ou ao sistema subjacente. O segundo é o lançamento rápido e a retomada. O modelo é imagem e inicialização: você cria uma imagem MicroVM fornecendo um Dockerfile e código empacotado como um artefato zip no Amazon S3, e o Lambda executa seu Dockerfile, inicializa seu aplicativo e obtém um snapshot do Firecracker da memória e do estado do disco do ambiente em execução. Cada MicroVM subsequente iniciado a partir dessa imagem é retomado a partir do snapshot pré-inicializado, em vez de inicializar a frio, o que significa que inicializações e retomadas inativas alcançam latência de inicialização quase instantânea. Até mesmo uma sessão interativa de vários gigabytes volta a ficar on-line com rapidez suficiente para responder ao usuário last. A terceira é a execução com estado. Um MicroVM em execução retém memória, disco e processos em execução durante a sessão do usuário. Durante períodos ociosos, um MicroVM pode ser suspenso – com a memória e o estado do disco intactos – e retomado quando o tráfego chegar. Pacotes instalados, modelos carregados e conjuntos de arquivos funcionais estão prontamente disponíveis quando o usuário retoma sua sessão. MicroVMs suportam até 8 horas de tempo de execução whole e podem ser suspensos automaticamente após uma janela de inatividade configurável, o que facilita a construção de produtos tão variados quanto verificações de vulnerabilidade de software program que são concluídas em minutos, aplicativos de análise de dados que são executados por horas e sessões de codificação interativas com longos períodos de inatividade. Como Lambda MicroVMs são iniciados a partir de snapshots pré-inicializados, os aplicativos que geram conteúdo exclusivo, estabelecem conexões de rede ou carregam dados efêmeros durante a inicialização podem precisar ser integrados a ganchos fornecidos pelo serviço para compatibilidade.
Lambda MicroVMs é um novo recurso do AWS Lambda, com uma superfície de API distinta. As funções Lambda continuam sendo a escolha certa para cargas de trabalho de solicitação e resposta orientadas a eventos, e os Lambda MicroVMs são desenvolvidos especificamente para aplicativos multilocatários que precisam fornecer a cada usuário last ou sessão seu próprio ambiente isolado para executar código gerado pelo usuário ou por IA. Os dois se complementam. Um aplicativo que usa funções Lambda para seu spine orientado a eventos pode chamar Lambda MicroVMs para as etapas que precisam executar código não confiável isoladamente. Você traz o aplicativo e o serviço entrega o ambiente de execução.
Agora disponível
AWS Lambda MicroVMs já está disponível no Leste dos EUA (Norte da Virgínia, Ohio), Oeste dos EUA (Oregon), Europa (Irlanda) e Ásia-Pacífico (Tóquio) Regiõesna arquitetura ARM64, com até 16 vCPUs, 32 GB de memória e 32 GB de disco por MicroVM. MicroVMs ociosas podem ser suspensas explicitamente por meio de uma chamada de API ou automaticamente por meio de uma política de ciclo de vida, o que reduz o custo de operação e preserva o estado completo para uma retomada rápida. Detalhes de preços podem ser encontrados no web site Página de preços do AWS Lambda.
Para começar, visite o Console AWS Lambdaou saiba mais no Página do produto Lambda MicroVMs. Para documentação, consulte o Guia do desenvolvedor de MicroVMs Lambda.
