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