O blog da AWS
Gerenciando atualizações de runtime do AWS Lambda
python3.11
ou
nodejs20.x.
O Lambda aplica automaticamente
patches e atualizações de segurança a todos os
runtimes gerenciados e às imagens de base de contêineres correspondentes. A correção automática de
runtime é um dos recursos que os clientes mais adoram no Lambda. Quando esses
patches não estão mais disponíveis, o Lambda encerra o suporte para o
runtime. Nos próximos meses, o Lambda
descontinuará vários
runtimes populares, acionados pelo fim da vida útil das versões da linguagem upstream e do Amazon Linux 1.
Runtime |
|
||
---|---|---|---|
Node.js 14 |
|
||
Node.js 16 |
|
||
Python 3.7 |
|
||
Java 8 (Amazon Linux 1) |
|
||
Go 1.x |
|
||
Ruby 2.7 |
|
||
|
|
A depreciação do runtime não é exclusiva do Lambda. Você deve atualizar o código usando o Python 3.7 ou o Node.js 14 quando essas versões de linguagem chegarem ao fim da vida útil, independentemente do serviço de computação em que seu código está sendo executado. O Lambda pode ajudar a facilitar isso rastreando quais tempos de execução você está usando e fornecendo notificações de suspensão de uso.
Esta postagem contém considerações e melhores práticas para gerenciar suspensões e atualizações de runtime ao usar o Lambda. A adoção dessas técnicas facilita o gerenciamento de atualizações de runtime, especialmente ao trabalhar com um grande número de funções.
Especificando tempos de execução do Lambda
Ao implantar sua função como um arquivo de arquivos.zip, você escolhe um runtime ao criar a função. Para alterar o runtime, você pode atualizar a configuração da sua função.
O Lambda mantém cada runtime gerenciado atualizado, assumindo a carga operacional de corrigir os tempos de execução com atualizações de segurança, correções de bugs, novos recursos, aprimoramentos de desempenho e suporte para versões menores. Essas atualizações de runtimes são publicadas como versões de runtime. O Lambda aplica atualizações de runtime às funções migrando a função de uma versão anterior de runtime para uma nova versão de runtime.
Você pode controlar como suas funções recebem essas atualizações usando controles de gerenciamento de runtimes. As versões de runtime e as atualizações de runtime se aplicam às atualizações de patch para um determinado runtime do Lambda. O Lambda não atualiza automaticamente as funções entre as principais versões de runtime da linguagem, por exemplo, de nodejs14.x
para nodejs18.x
.
Para uma função definida como uma imagem de contêiner, você escolhe um runtime e a distribuição Linux ao criar a imagem de contêiner. A maioria dos clientes começa com uma das imagens de contêiner base do Lambda, embora você também possa criar suas próprias imagens do zero. Para alterar o runtime, você cria uma nova imagem de contêiner a partir de uma imagem de contêiner base diferente.
Por que o Lambda descontinua os runtimes?
O Lambda descontinua um runtime quando os mantenedores da linguagem de runtime upstream marcam o fim da vida útil da linguagem ou as atualizações de segurança não estão mais disponíveis.
Em quase todos os casos, a data de fim da vida útil de uma versão da linguagem ou sistema operacional é publicada com bastante antecedência. A política de descontinuação do runtime do Lambda fornece cronogramas de fim de vida útil para cada linguagem compatível com o Lambda. O Lambda notifica você por e-mail e por meio de seu painel pessoal de saúde se você estiver usando um runtime programado para suspensão de uso.
A descontinuidade do runtime do Lambda ocorre em vários estágios. O Lambda primeiro bloqueia a criação de novas funções que usam um determinado runtime. Posteriormente, o Lambda também bloqueia a atualização de funções existentes usando o runtime não suportado, exceto para atualizar para um runtime compatível. O Lambda não bloqueia invocações de funções que usam um runtime obsoleto. As invocações de funções continuam indefinidamente após o runtime atingir o fim do suporte.
A Lambda está estendendo o período de notificação de suspensão de uso de 60 dias antes da suspensão para 180 dias. Anteriormente, o bloqueio da criação de novas funções acontecia na descontinuação e o bloqueio de atualizações das funções existentes 30 dias depois. O bloqueio da criação de novas funções agora acontece 30 dias após a descontinuação e o bloqueio de atualizações das funções existentes 60 dias depois.
Ocasionalmente, o Lambda atrasa a descontinuação de um runtime do Lambda por um período limitado além da data de término do suporte da versão da linguagem compatível com o runtime. Durante esse período, o Lambda aplica apenas patches de segurança ao sistema operacional em runtime. O Lambda não aplica patches de segurança aos tempos de execução da linguagem de programação depois que eles atingem a data de fim do suporte.
O Lambda pode atualizar automaticamente meu runtime?
Mudar de uma versão principal do runtime da linguagem para outra tem um risco significativo de ser uma alteração significativa. Algumas bibliotecas e dependências em um idioma têm cronogramas de depreciação e não oferecem suporte a versões de uma linguagem após um determinado ponto. Migrar funções para novos tempos de execução pode afetar potencialmente as cargas de trabalho (workloads) de produção em grande escala das quais os clientes dependem.
Como o Lambda não pode garantir a compatibilidade com versões anteriores entre as principais linguagens, atualizar o runtime do Lambda usado por uma função é uma operação orientada pelo cliente.
Versões da função Lambda
Você pode usar versões de funções para gerenciar a implantação de suas funções. No Lambda, você faz alterações no código e na configuração da versão padrão da função, chamada $LATEST.
Quando você publica uma versão da função, o Lambda faz uma captura instantânea do código, do runtime e da configuração da função para manter uma experiência consistente para os usuários dessa versão da função. Ao invocar uma função, você pode especificar a versão a ser usada ou invocar a versão $LATEST.
As versões da função Lambda são necessárias ao usar a concorrência provisionada ou o SnapStart.
Alguns desenvolvedores usam um processo de controle de versão automático criando uma nova versão da função sempre que implantam uma alteração. Isso resulta em várias versões de uma função, com apenas uma única versão realmente em uso.
Embora o Lambda aplique atualizações de runtime às versões de funções publicadas, você não pode atualizar a versão principal do runtime para uma versão de função publicada, por exemplo, de Node.js 16 para Node.js 20. Para atualizar o runtime de uma função, você deve atualizar a versão $LATEST
e, em seguida, criar uma nova versão publicada da função, se necessário. Isso significa que versões diferentes de uma função podem usar tempos de execução diferentes. Veja a seguir a mesma função com a versão 1 usando Node.js 14.x
e a versão 2 usando Node.js 18.x.
Certifique-se de criar um processo de manutenção para excluir versões de funções não utilizadas, o que também afeta sua cota de armazenamento do Lambda.
Gerenciando atualizações de runtime de funções
O gerenciamento de atualizações de runtime de funções deve fazer parte do ciclo de vida de entrega de software, de forma semelhante à forma como você trata dependências e atualizações de segurança. Você precisa entender quais funções estão sendo usadas ativamente em sua organização. As organizações podem criar priorização com base nos perfis de segurança e/ou no uso da função. Você pode usar os mesmos mecanismos de comunicação que talvez já esteja usando para lidar com vulnerabilidades de segurança.
Implemente proteções preventivas para garantir que os desenvolvedores só possam criar funções usando tempos de execução compatíveis. Usar a infraestrutura como código, pipelines de CI/CD e práticas de teste robustas facilita a atualização dos tempos de execução.
Identificação de funções afetadas
Há ferramentas disponíveis para verificar a configuração do runtime do Lambda e identificar quais funções e quais versões de funções publicadas estão realmente em uso. Excluir uma função ou uma versão da função que não está mais em uso é a maneira mais simples de evitar a suspensão do runtime.
Você pode identificar funções usando runtimes obsoletos ou prestes a serem descontinuados usando o AWS Trusted Advisor. Use a verificação de funções do AWS Lambda usando runtimes obsoletos, na categoria Segurança que fornece um aviso prévio de 120 dias.
O AWS Trusted Advisor Lambda funciona usando runtimes obsoletos
O AWS Trusted Advisor verifica todas as versões de suas funções, incluindo $LATEST
e versões publicadas.
A AWS Command Line Interface (AWS CLI) pode listar todas as funções em uma região específica que estão usando um runtime específico. Para encontrar todas as funções em sua conta, repita o comando a seguir para cada região e conta da AWS. Substitua os parâmetros <REGION>
e <RUNTIME>
pelos seus valores. O parâmetro --function-version ALL
faz com que todas as versões da função sejam retornadas; omita esse parâmetro para retornar somente a versão $LATEST.
Você pode usar o AWS Config para criar uma visualização da configuração dos recursos em sua conta e também armazenar dados de instantâneos de configuração no Amazon S3. As consultas do AWS Config não oferecem suporte a versões de funções publicadas, elas só podem consultar a versão $LATEST.
Em seguida, você pode usar o Amazon Athena e o Amazon QuickSight para criar painéis para visualizar dados do AWS Config. Para obter mais informações, consulte o guia de aprendizado sobre como implementar a governança em profundidade para aplicativos serverless.
Painel mostrando dados do AWS Config
Há várias maneiras de monitorar o uso da função Lambda.
Você pode usar o Explorer para métricas do Amazon CloudWatch para visualizar o Lambda por runtime e rastrear a métrica de invocações dentro do período padrão de retenção de métricas do CloudWatch de 15 meses.
Rastreie invocações nas métricas do Amazon CloudWatch
Você pode ativar o registro de eventos de dados do AWS CloudTrail para registrar um evento sempre que funções do Lambda forem invocadas. Isso ajuda você a entender quais identidades estão invocando funções e a frequência de suas invocações.
Os relatórios de custo e uso da AWS podem mostrar quais funções estão incorrendo em custos e em uso.
Limitando o uso do runtime
O AWS CloudFormation Guard é uma ferramenta de avaliação de código aberto para validar a infraestrutura como modelos de código. Crie regras de política para garantir que os desenvolvedores escolham somente os tempos de execução aprovados. Para obter mais informações, consulte Controles preventivos com o AWS CloudFormation Guard.
As regras do AWS Config permitem que você verifique se as configurações da função Lambda para o runtime correspondem aos valores esperados. Para obter mais informações sobre como executar essas regras antes da implantação, consulte Controles preventivos com o AWS Config. Você também pode sinalizar de forma reativa funções como não compatíveis à medida que suas políticas de governança evoluem. Para obter mais informações, consulte Detective Controls with AWS Config.
Atualmente, o Lambda não tem políticas de controle de serviço (SCP) para bloquear a criação de funções com base no runtime
Práticas recomendadas de atualização
Use a infraestrutura como ferramentas de código (IaC) para criar e gerenciar suas funções do Lambda, o que pode facilitar o gerenciamento de atualizações.
Certifique-se de executar testes em suas funções ao desenvolver localmente. Inclua testes automatizados como parte de seus pipelines de CI/CD para fornecer confiança em suas atualizações de runtime. Ao implementar atualizações de funções, você pode usar aliases ponderados para mudar o tráfego entre duas versões da função enquanto monitora erros e falhas.
Usando runtimes após a descontinuação
A AWS recomenda fortemente que você atualize suas funções para um runtime compatível antes da descontinuação para continuar se beneficiando de patches de segurança, correções de bugs e dos recursos de runtime mais recentes. Embora a descontinuação não afete as invocações de funções, você usará um runtime sem suporte, que pode ter vulnerabilidades de segurança não corrigidas. Sua função pode eventualmente parar de funcionar, por exemplo, devido à expiração de um certificado.
O Lambda bloqueia a criação e as atualizações de funções usando runtimes obsoletos. Para criar ou atualizar funções após o bloqueio dessas operações, entre em contato com o AWS Support.
Conclusão
O Lambda está descontinuando vários runtimes populares nos próximos meses, refletindo o fim da vida útil das versões da linguagem upstream e do Amazon Linux 1. Esta postagem aborda considerações para gerenciar atualizações de runtime da função Lambda.
Para obter mais recursos de aprendizado serverless, visite Serverless Land.