O blog da AWS

Apresentando os controles de gerenciamento de runtime do AWS Lambda

Por Jonathan Tuliani, Principal Product Manager 

Hoje, o AWS Lambda está anunciando controles de gerenciamento de runtime que fornecem mais visibilidade e controle sobre quando o Lambda aplica atualizações de runtime às suas funções. O Lambda também está mudando a forma como implementa atualizações automáticas de runtime em suas funções. Juntas, essas mudanças oferecem mais flexibilidade na forma como você aproveita os mais recentes recursos de runtime, melhorias de desempenho e atualizações de segurança.

Por padrão, todas as funções continuarão recebendo atualizações automáticas de runtime. Você não precisa mudar a forma como usa o Lambda para continuar se beneficiando da segurança e da simplicidade operacional dos runtime gerenciados que o Lambda fornece. Os controles de runtime são recursos opcionais para clientes avançados que exigem mais controle sobre suas alterações de runtime.

Esta postagem explica quais novos controles de gerenciamento de runtime estão disponíveis e como você pode aproveitar esse novo recurso.

Visão geral

Para cada runtime, o Lambda fornece um ambiente de execução gerenciado. Isso inclui o sistema operacional Amazon Linux, o runtime da linguagem de programação e os SDKs da AWS. O Lambda assume a carga operacional de aplicar patches e atualizações de segurança a todos esses componentes. Os clientes nos dizem o quanto gostam de poder implantar uma função e deixá-la, às vezes por anos, sem precisar aplicar patches. Com o Lambda, aplicar patches “simplesmente funciona” automaticamente.

O Lambda se esforça para fornecer atualizações que sejam retrocompatíveis com as funções existentes. No entanto, como acontece com todos os patches de software, há casos raros em que um patch pode expor um problema subjacente com uma função existente que depende do comportamento anterior. Por exemplo, considere um bug em um dos pacotes de sistema operacional em runtime. Aplicar um patch para corrigir o bug é a escolha certa para a grande maioria dos clientes e funções. No entanto, em casos raros, uma função pode depender do comportamento anterior (incorreto). Clientes com cargas de trabalho críticas em execução no Lambda nos dizem que gostariam de uma forma de mitigar ainda mais até mesmo esse pequeno risco de interrupção.

Com o lançamento dos controles de gerenciamento de runtime, o Lambda agora oferece três novos recursos. Primeiro, o Lambda fornece visibilidade sobre qual versão de patch de um runtime sua função está usando e quando as atualizações de runtime são aplicadas. Em segundo lugar, você pode, opcionalmente, sincronizar atualizações de runtime com implantações de funções. Isso fornece controle sobre quando o Lambda aplica atualizações de runtime e permite a detecção precoce de incompatibilidades raras de atualizações em runtime. Em terceiro lugar, nos raros casos em que ocorre uma incompatibilidade de atualização do runtime, você pode reverter sua função para uma versão anterior do runtime. Isso mantém sua função funcionando e minimiza as interrupções, oferecendo tempo para corrigir a incompatibilidade antes de retornar à versão mais recente do runtime.

Identificadores de runtime e versões de runtime

Os runtime do Lambda definem os componentes do ambiente de execução no qual seu código de função é executado. Isso inclui o sistema operacional, o runtime da linguagem de programação, as variáveis de ambiente e os certificados. Para Python, Node.js e Ruby, o runtime também inclui o SDK da AWS. Cada runtime do Lambda tem um identificador de runtime exclusivo, por exemplo, nodejs18.x ou python3.9. Cada identificador de runtime representa uma versão principal distinta da linguagem de programação.

Os controles de gerenciamento de runtime introduzem o conceito de versões de runtime do Lambda. Uma versão de runtime é uma versão imutável de um runtime específico. Cada runtime do Lambda, como o Node.js 16 ou o Python 3.9, começa com uma versão inicial do runtime. Toda vez que o Lambda atualiza o runtime, ele adiciona uma nova versão a esse runtime. Essas atualizações abrangem todos os componentes de runtime (sistema operacional, runtime da linguagem etc.) e, portanto, usam um esquema de numeração definido pelo Lambda, independente dos números de versão usados pela linguagem de programação. Para cada versão de runtime, o Lambda também publica uma imagem base correspondente para clientes que empacotam suas funções como imagens de contêiner.

Os novos identificadores de runtime representam uma versão importante da linguagem de programação e, às vezes, de outros componentes de runtime, como o sistema operacional ou o SDK. O Lambda não pode garantir a compatibilidade entre identificadores de runtime, embora na maioria das vezes você possa atualizar suas funções com pouca ou nenhuma modificação. Você controla quando atualiza suas funções para um novo identificador de runtime. Por outro lado, novas versões de runtime para o mesmo identificador de runtime têm um nível muito alto de compatibilidade com versões anteriores das funções existentes. Por padrão, o Lambda aplica automaticamente as atualizações de runtime movendo funções da versão de runtime anterior para uma versão de runtime mais recente.

Cada versão de runtime tem um número de versão e um nome de recurso da Amazon (ARN). Você pode ver a versão em uma nova linha de registro da plataforma, INIT_START. O Lambda emite essa linha de log toda vez que cria um novo ambiente de execução durante o processo de inicialização a frio.

INIT_START Runtime Version: python:3.9.v14	Runtime Version ARN: arn:aws:lambda:eu-south-1::runtime:7b620fc2e66107a1046b140b9d320295811af3ad5d4c6a011fad1fa65127e9e6I

INIT_START Runtime Version: python:3.9.v14 Runtime
Version ARN:
arn:aws:lambda:eu-south-1::runtime:7b620fc2e66107a1046b140b9d320295811af3ad5d4c6a011fad1fa65127e9e6I

As versões de runtime melhoram a visibilidade das atualizações gerenciadas do runtime. Você pode usar a linha de registro INIT_START para identificar quando a função faz a transição de uma versão de runtime para outra. Isso ajuda você a investigar se uma atualização de runtime pode ter causado algum comportamento inesperado de suas funções. Mudanças no comportamento causadas por atualizações de runtime são muito raras. Se sua função não estiver se comportando conforme o esperado, de longe a causa mais provável é um erro no código ou na configuração da função.

Modos de gerenciamento de execução

Com os controles de gerenciamento de runtime, agora você tem mais controle sobre quando o Lambda aplica atualizações de runtime às suas funções. Agora você pode especificar uma configuração de gerenciamento de runtime para cada função. Você pode definir a configuração de gerenciamento de runtime de forma independente para $LATEST e cada versão de função publicada.

Você pode especificar um dos três modos de atualização de runtime: automático, atualização de função ou manual. O modo de atualização em runtime controla quando o Lambda atualiza a versão da função para uma nova versão em runtime. Por padrão, todas as funções recebem atualizações de runtime automaticamente, as alternativas são para usuários avançados em casos específicos.

Automático

As atualizações automáticas são o padrão e a escolha certa para a maioria dos clientes, a fim de garantir que você continue se beneficiando das atualizações de versão em runtime. Eles ajudam a minimizar suas despesas operacionais, permitindo que o Lambda cuide das atualizações de runtime.

Embora o Lambda sempre tenha fornecido atualizações automáticas de runtime, esta versão inclui uma mudança na forma como as atualizações automáticas de runtime são implementadas. Anteriormente, o Lambda aplicava atualizações de runtime a todas as funções em cada região, seguindo uma sequência de implantação região por região. Com esta versão, as funções configuradas para usar o modo de atualização automática do runtime agora recebem atualizações do runtime em duas fases. Inicialmente, o Lambda aplica apenas uma nova versão de runtime às funções recém-criadas ou atualizadas. Depois que esse período inicial for concluído, o Lambda aplica a atualização de runtime a todas as funções restantes configuradas para usar o modo de atualização automática de runtime.

Essa implantação em duas fases sincroniza atualizações de runtime com atualizações de funções para clientes que estão desenvolvendo ativamente suas funções. Isso facilita a detecção e a resposta a quaisquer mudanças inesperadas no comportamento. Para funções que não estão em desenvolvimento ativo, o modo automático continua oferecendo os benefícios operacionais das atualizações de runtime totalmente automáticas.

Atualização da função

No modo de atualização de funções, o Lambda atualiza sua função para a versão de runtime mais recente disponível sempre que você altera o código ou a configuração da função. É o mesmo que a primeira fase do modo automático. A diferença é que, no modo automático, há uma segunda fase em que o Lambda aplica atualizações de runtime às funções que não foram alteradas. No modo de atualização de função, se você não alterar uma função, ela continuará usando a versão atual do runtime indefinidamente. Isso significa que, ao usar o modo de atualização de funções, você deve atualizar suas funções regularmente para manter seus runtime atualizados. Se você não atualizar uma função regularmente, deverá usar o modo de atualização automática do runtime.

A sincronização de atualizações de runtime com implantações de funções permite que você controle quando o Lambda aplica as atualizações de runtime. Por exemplo, você pode evitar a aplicação de atualizações durante eventos críticos para os negócios, como o lançamento de um produto ou vendas de fim de ano.

Quando usado com pipelines de CI/CD, o modo de atualização de funções permite a detecção e mitigação precoces no caso raro de uma incompatibilidade de atualização em runtime. Isso é especialmente eficaz se você criar uma nova versão de função publicada a cada implantação. Cada versão de função publicada captura uma cópia estática do código e da configuração da função, para que você possa reverter para uma versão de função publicada anteriormente, se necessário. O uso do modo de atualização de função estende a versão publicada da função para também capturar a versão em runtime. Isso permite sincronizar a implantação e a reversão de todo o ambiente de execução do Lambda, incluindo código de função, configuração e versão de runtime.

Manual

Considere o caso raro de uma atualização de runtime ser incompatível com uma de suas funções. Com os controles de gerenciamento de runtime, agora você pode reverter para uma versão anterior do runtime. Isso mantém sua função funcionando e minimiza as interrupções, dando a você tempo para corrigir a incompatibilidade antes de retornar à versão mais recente do runtime.

Há duas maneiras de implementar uma reversão de versão em runtime. Você pode usar o modo de atualização de função com uma versão de função publicada para sincronizar a reversão do código, da configuração e da versão do runtime. Ou, para funções que usam o modo de atualização automática de runtime padrão, você pode reverter sua versão de runtime usando o modo manual.

O modo de atualização manual do runtime fornece controle total sobre qual versão do runtime sua função usa. Ao ativar o modo manual, você deve especificar o ARN da versão de runtime a ser usada, que pode ser encontrada na linha de log INIT_START.

O Lambda não impõe um limite de tempo de uso de qualquer versão de runtime específica. No entanto, a AWS recomenda fortemente o uso do modo manual somente para remediação de curto prazo de incompatibilidades de código. Reverta sua função para o modo automático assim que resolver o problema. Funções que usam a mesma versão de runtime por um longo período podem eventualmente parar de funcionar devido, por exemplo, à expiração de um certificado.

Usando controles de gerenciamento de runtime

Você pode configurar controles de gerenciamento de runtime por meio do Lambda AWS Management Console e da AWS Command Line Interface (AWS CLI). Você também pode usar a infraestrutura como ferramentas de código, como o AWS CloudFormation e o AWS Serverless Application Model (AWS SAM).

Console

No console do Lambda, navegue até uma função específica. Você pode encontrar controles de gerenciamento de runtime na guia Código, no painel de configurações de runtime. Expanda a configuração de gerenciamento de runtime para visualizar o modo de atualização atual do runtime e o ARN da versão do runtime.

Runtime settings

Configurações de runtime

Para alterar o modo de atualização do runtime, selecione Editar configuração de gerenciamento do runtime. Você pode escolher entre os modos automático, de atualização de função e de atualização manual em runtime.

Edit runtime management configuration (Auto)

Editar configuração de gerenciamento de runtime (Auto)

No modo manual, você também deve especificar o ARN da versão de runtime.

Edit runtime management configuration (Manual)Editar configuração de gerenciamento de runtime (Manual)

AWS SAM

O AWS SAM é uma estrutura de código aberto para criar aplicativos sem servidor. Você pode especificar as configurações de gerenciamento de runtime usando a propriedade runtimeManagementConfig.

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: lambda_function.handler
      Runtime: python3.9
      RuntimeManagementConfig:
        UpdateOn: Manual
        RuntimeVersionArn: arn:aws:lambda:eu-west-1::runtime:7b620fc2e66107a1046b140b9d320295811af3ad5d4c6a011fad1fa65127e9e6
YAML

AWS CLI

Você também pode gerenciar as configurações de gerenciamento de runtime usando o AWS CLI. Você configura os controles de gerenciamento de runtime por meio de um comando dedicado aws lambda put-runtime-management-config, em vez de aws lambda update-function-configuration.

aws lambda put-runtime-management-config --function-name <function_arn> --update-runtime-on Manual --runtime-version-arn <runtime_version_arn>
Bash

Para visualizar a configuração de gerenciamento de runtime existente, use aws lambda get-runtime-management-config.

aws lambda get-runtime-management-config --function-name <function_arn>
Bash

A versão atual do runtime ARN também é retornada por aws lambda get-function and aws lambda get-function-configuration.

Conclusão

Os controles de gerenciamento de runtime fornecem mais visibilidade e flexibilidade sobre quando e como o Lambda aplica atualizações de runtime às suas funções. Você pode especificar um dos três modos de atualização: automático, atualização de função ou manual. Esses modos permitem que você continue aproveitando as vantagens dos patches automáticos do Lambda, sincronize as atualizações de runtime com suas implantações e reverta para uma versão de runtime anterior no caso raro de uma atualização de runtime afetar negativamente sua função.

Para obter mais informações sobre controles de gerenciamento de runtime, consulte nossa página de documentação.

Para obter mais recursos de aprendizado Serverless, visite ServerlessLand.

 

Este artigo foi traduzido do Blog da AWS em Inglês.

 


Sobre o autor

Jonathan Tuliani, Principal Product Manager

 

 

 

 

Tradutor

Rodrigo Peres é um Solutions Architect na AWS, com mais de 20 anos trabalhando com arquitetura de soluções, desenvolvimento de sistemas e modernização de sistemas legados.