O blog da AWS
Apresentando o runtime do Amazon Linux 2023 para o AWS Lambda
Por Rakshith Rao, Senior Solutions Architect
provided.al2023
, esse runtime fornece um ambiente somente de sistema operacional para executar suas funções do Lambda.Ele se baseia na versão
mínima de imagem de contêiner do Amazon Linux 2023 e tem várias melhorias em relação ao
Amazon Linux 2 (AL2), como uma área de implantação menor, versões atualizadas de bibliotecas como
glibc
e um novo gerenciador de pacotes.
O que são runtimes do Lambda para o sistema operacional?
Os runtimes do Lambda definem o ambiente de execução em que sua função é executada. Eles fornecem o sistema operacional, suporte a idiomas e configurações adicionais, como variáveis de ambiente e certificados.
O Lambda fornece runtimes gerenciados para Java, Python, Node.js, .NET e Ruby. No entanto, se você quiser desenvolver suas funções do Lambda em linguagens de programação que não são suportadas pelos runtimes da linguagem gerenciada do Lambda, a família de runtime “fornecida” disponibiliza um ambiente somente de sistema operacional no qual você pode executar código escrito em qualquer linguagem. Esta versão estende a família de runtime fornecida para oferecer suporte ao Amazon Linux 2023.
Os clientes usam esses runtimes somente do sistema operacional em três cenários comuns. Primeiro, eles são usados com linguagens que compilam para código nativo, como Go, Rust, C++, .NET Native AOT e Java GraalVM Native. Como você só carrega o binário compilado para o Lambda, essas linguagens não exigem um runtime de linguagem dedicado, elas exigem apenas um ambiente de sistema operacional no qual o binário possa ser executado.
Em segundo lugar, os runtimes exclusivos do sistema operacional também permitem a criação de runtimes de idiomas de terceiros que você pode usar imediatamente. Por exemplo, você pode escrever funções Lambda em PHP usando Bref ou Swift usando o Swift AWS Lambda Runtime.
Em terceiro lugar, você pode usar o runtime exclusivo do sistema operacional para implantar runtimes personalizados, que você cria para uma linguagem ou versão de linguagem que o Lambda não fornece um runtime gerenciado. Por exemplo, Node.js 19 — Lambda fornece apenas runtimes gerenciados para versões LTS, que para Node.js são as versões com números pares.
Novidades da imagem base do Amazon Linux 2023 para Lambda
Pacotes atualizados
A imagem base do AL2023
para Lambda é baseada na imagem de contêiner AL2023-Minimal e inclui várias atualizações e alterações de pacotes em comparação com provided.al2
.
A versão da glibc na imagem base do AL2023 foi atualizada para 2.34, da 2.26 que estava incluída na imagem base do AL2. Algumas bibliotecas que os desenvolvedores queriam usar nos runtimes fornecidos exigiam versões mais recentes do glibc
. Com esse lançamento, agora você pode usar uma versão atualizada do glibc
com sua função Lambda.
A imagem base AL2 para Lambda veio pré-instalada com o Python 2.7. Isso foi necessário porque o Python era uma dependência necessária para alguns dos pacotes que estavam agrupados na imagem base. A imagem base AL2023 do Lambda removeu essa dependência do Python 2.7 e não vem com nenhum runtime de linguagem pré-instalado. Você pode escolher e instalar qualquer versão compatível do Python de que precisar.
Como a imagem base do AL2023 para Lambda é baseada na distribuição mínima do AL2023, você também se beneficia de uma área de implantação significativamente menor. A nova imagem tem menos de 40 MB em comparação com a imagem base baseada em AL2, que tem mais de 100 MB de tamanho. Você pode encontrar a lista completa de pacotes disponíveis na imagem base do AL2023 do Lambda na coluna “contêiner mínimo” da documentação da lista de pacotes do AL2023.
Gerenciador de pacotes
O Amazon Linux 2023 usa dnf
como gerenciador de pacotes, substituindo o yum
, que era o gerenciador de pacotes padrão no Amazon Linux 2. A imagem base AL2023 para Lambda usa microdnf como gerenciador de pacotes, que é uma implementação autônoma do dnf baseada em libdnf
e não requer dependências extras, como Python. O microdnf
em provided.al2023
tem um link simbólico (symlinked) como dnf
. Observe que o microdnf
não suporta todas as opções de dnf
. Por exemplo, você não pode instalar um rpm remoto usando o URL do rpm
ou instalar um arquivo rpm
local. Em vez disso, você pode usar o comando rpm
diretamente para instalar esses pacotes.
Este exemplo de Dockerfile mostra como você pode instalar pacotes usando dnf ao criar uma função Lambda baseada em contêiner:
Suporte de runtime
Com o lançamento do provided.al2023
, você pode migrar imediatamente suas funções Lambda personalizadas baseadas em runtime do AL2. Ele também define a base dos futuros runtimes gerenciados pelo Lambda. As futuras versões de runtimes de linguagem gerenciada, como Node.js 20, Python 3.12, Java 21 e .NET 8, são baseadas no Amazon Linux 2023 e usarão provided.al2023
como imagem base.
Alterando os runtimes e usando outros serviços de computação
Anteriormente, a imagem provided.al2023
era criada como uma imagem personalizada que usava uma seleção de pacotes do AL2. Ele incluía pacotes como curl e yum, necessários para criar funções usando o runtime personalizado. Além disso, cada runtime de linguagem gerenciada usou pacotes diferentes com base no caso de uso.
Como as versões futuras de runtimes gerenciados usam provided.al2023
como imagem base, elas contêm o mesmo conjunto de pacotes básicos que vêm com o AL2023-minimal. Isso simplifica a migração da função Lambda de um runtime personalizado para um runtime de linguagem gerenciada. Também facilita a mudança para outros serviços de computação, como o AWS Fargate ou o Amazon Elastic Container Services (ECS), para executar seu aplicativo.
Atualização a partir de runtimes baseados em AL1
Para obter mais informações sobre a depreciação do runtime do Lambda, consulte Runtimes do Lambda.
O fim do suporte do AL1 está programado para 31 de dezembro de 2023. Os runtimes baseados em AL1 go1.x, java8 e provided
serão descontinuados a partir dessa data. Você deve migrar suas funções do Lambda baseadas em Go para a família de runtime fornecida, como provided.al2 ou provided.al2023.
Usar um runtime fornecido oferece vários benefícios em relação ao runtime go1.x
. Primeiro, você pode executar suas funções do Lambda nos processadores AWS Graviton2 que oferecem uma relação preço-desempenho até 34% melhor em comparação com funções executadas em processadores x86_64. Em segundo lugar, ele oferece um pacote de implantação menor e um caminho de invocação de função mais rápido. E terceiro, ele alinha o Go com outras linguagens que também são compiladas em código nativo e executadas na família de runtime fornecido
.
A descontinuação da imagem base do Amazon Linux 1 (AL1) para o Lambda também está programada para 31 de dezembro de 2023. Com o provided.al2023 agora disponível ao público em geral, você deve começar a planejar a migração de suas funções Lambda baseadas em go1.x e AL1 para provided.al2023
.
Usando a imagem base AL2023 para Lambda
Para criar funções do Lambda usando um runtime personalizado, siga estas etapas usando o runtime provided.al2023.
Console de gerenciamento da AWS
Navegue até a página Criar função no console Lambda. Para usar o runtime personalizado do AL2023, selecione Forneça seu próprio bootstrap no Amazon Linux 2023 como o valor do runtime:
Modelo de template do Serverless Application Model (AWS SAM)
Se você usa o template do AWS SAM para criar e implantar sua função Lambda, use provided.al2023
como o valor do Runtime
:
Criação de funções do Lambda que compilam nativamente
O runtime personalizado do Lambda simplifica a experiência de criar funções em linguagens que são compiladas em código nativo, ampliando a variedade de linguagens que você pode usar. O Lambda fornece a API Runtime, uma API HTTP que runtimes personalizados podem usar para interagir com o serviço Lambda. As implementações dessa API, chamada Runtime Interface Client (RIC), permitem que sua função receba eventos de invocação do Lambda, envie a resposta de volta ao Lambda e relate erros ao serviço Lambda. Os RICs estão disponíveis como bibliotecas específicas de linguagem para várias linguagens de programação populares, como Go, Rust, Python e Java.
Por exemplo, você pode criar funções usando Go, conforme mostrado na seção Building with Go da documentação do desenvolvedor do Lambda. Observe que o nome do arquivo executável da sua função sempre deve ser bootstrap em provided.al2023
ao usar o modelo de implantação zip. Para usar o AL2023
neste exemplo, use provided.al2023 como o runtime da sua função Lambda.
Se você estiver usando CLI, defina a opção —runtime
como provided.al2023
:
Se você estiver usando o AWS Serverless Application Model, use provided.al2023
como o valor do Runtime
em seu arquivo de modelo do AWS SAM:
Se você executar sua função como uma imagem de contêiner, conforme mostrado no exemplo de imagem de contêiner Deploy, use este Dockerfile. Você pode usar qualquer nome para o arquivo executável da sua função ao usar imagens de contêiner. Você precisa especificar o nome do executável como ENTRYPOINT
em seu Dockerfile:
Conclusão
Com esse lançamento, agora você pode criar suas funções do Lambda usando o Amazon Linux 2023 como runtime personalizado ou usá-lo como imagem base para executar suas funções do Lambda baseadas em contêineres. Você se beneficia das versões atualizadas de bibliotecas, como glibc, novo gerenciador de pacotes e tamanho de implantação menor do que os runtimes baseados no Amazon Linux 2. O Lambda também usa o Amazon Linux 2023-minimal como base para futuras versões de runtime do Lambda.
Para obter mais recursos de aprendizado Serverless, visite Serverless Land.
Este artigo foi traduzido do Blog da AWS em Inglês.
Sobre o autor
Rakshith Rao é arquiteto sênior de soluções
Tradutor
Daniel Abib é Enterprise Solution Architect na AWS, com mais de 25 anos trabalhando com gerenciamento de projetos, arquiteturas de soluções escaláveis, desenvolvimento de sistemas e CI/CD, microsserviços, arquitetura Serverless & Containers e segurança. Ele trabalha apoiando clientes corporativos, ajudando-os em sua jornada para a nuvem.