O blog da AWS
O runtime Node.js 22 agora disponível no AWS Lambda
Este post foi escrito por Julian Wood, developer advocate sênior, e Andrea Amorosi, arquiteto de solução senior .
Agora você pode desenvolver funções do AWS Lambda usando o runtime Node.js 22, que está no status LTS ativo e pronto para uso em produção. O Node.js 22 inclui várias adições à linguagem, incluindo a “require()ing” de módulos ES, bem como mudanças na implementação do runtime e na biblioteca padrão. Com essa versão, os desenvolvedores do Node.js podem aproveitar esses novos recursos e aprimoramentos ao criar aplicativos Serverless no AWS Lambda.
Você pode desenvolver funções do Node.js 22 Lambda usando o AWS Management Console, a AWS Command Line Interface (AWS CLI), o AWS SDK para JavaScript, o AWS Serverless Application Model (AWS SAM), o AWS Cloud Development Kit (AWS CDK) e outras infraestruturas como ferramentas de código.
Para usar essa nova versão, especifique o valor do parâmetro de runtime nodejs22.x
ao criar ou atualizar funções ou ao usar a imagem base do contêiner apropriada.
Você pode usar o Node.js 22 com o Powertools for AWS Lambda (TypeScript), um kit de ferramentas para desenvolvedores para implementar as melhores práticas Serverless e aumentar a velocidade do desenvolvedor. O Powertools for AWS Lambda inclui bibliotecas para dar suporte a tarefas comuns, como observabilidade, integração com o AWS Systems Manager Parameter Store, idempotência, processamento em lote e muito mais. Você também pode usar o Node.js 22 com o Lambda @Edge para personalizar o conteúdo de baixa latência entregue pelo Amazon CloudFront.
Esta postagem destaca mudanças importantes no runtime do Node.js, atualizações notáveis da linguagem Node.js e como você pode usar o novo runtime Node.js 22 em seus aplicativos Serverless.
Node.js 22 atualizações da linguagem
O Node.js 22 apresenta várias atualizações e recursos de linguagem que aprimoram a produtividade do desenvolvedor e melhoram o desempenho do aplicativo.
Esta versão adiciona suporte para carregar módulos ECMAScript (ESM) usando require()
. Você pode ativar esse recurso usando a sinalização --experimental-require-module
configurando a variável de ambiente NODE_OPTIONS
. O require() suporta gráficos ESM síncronos e preenche a lacuna entre o CommonJS e o ESM, fornecendo mais flexibilidade no carregamento do módulo. É importante observar que esse recurso é experimental no momento e pode mudar em versões futuras.
O suporte ao WebSocket, que antes estava disponível por trás de um sinalizador (flag) --experimental-websocket
, agora está habilitado por padrão no Node.js 22. Isso traz uma implementação para clientes WebSocket compatível com navegadores para o Node.js sem a necessidade de dependências externas. O suporte nativo simplifica a criação de aplicativos em tempo real e aprimora a experiência geral do WebSocket em ambientes Node.js.
O novo runtime também inclui melhorias de desempenho na criação do AbortSignal
. Isso torna as operações de rede mais rápidas e eficientes para a API Fetch e o processo de testes. A API Fetch agora também é considerada estável no Node.js 22.
Para usuários da linguagem TypeScript, o Node.js 22
introduz suporte experimental para transformar a sintaxe somente do TypeScript em código JavaScript. Usando a sinalização --experimental-transform-types
, você pode habilitar esse recurso para oferecer suporte direto à sintaxe do TypeScript, como Enum
e namespace
. Embora você possa habilitar o recurso no Lambda, seu ponto de entrada de função (ou seja, index.mjs
ou app.cjs
) não pode ser gravado atualmente usando TypeScript, pois o runtime espera um arquivo com uma extensão JavaScript. Você pode usar o TypeScript para qualquer outro módulo importado em sua base de código.
Para uma visão geral detalhada dos recursos da linguagem Node.js 22, consulte a postagem do blog de lançamento do Node.js 22 e o changelog do Node.js 22.
Recursos experimentais que não estão disponíveis
O Node.js 22 inclui um recurso experimental para detectar automaticamente a sintaxe do módulo (módulos CommonJS ou ES). Esse recurso deve ser ativado quando o runtime do Node.js é compilado. Como o runtime Node.js 22 fornecido pelo Lambda é destinado a cargas de trabalho de produção, esse recurso experimental não está habilitado na compilação do Lambda e não pode ser habilitado por meio de um sinalizador para o runtime. Para usar esse recurso no Lambda, você precisa implantar seu próprio runtime do Node.js usando runtime personalizado ou uma imagem de container com a detecção de sintaxe do módulo experimental ativada.
Considerações sobre desempenho
No lançamento, os novos runtimes do Lambda recebem menos uso do que os runtimes já disponíveis. Isso pode resultar em tempos de inicialização a frio (coldstart) mais longos devido à redução da residência do cache nos processos internos do Lambda. Os coldstarts geralmente melhoram nas semanas seguintes ao lançamento, à medida que o uso aumenta. Como resultado, a AWS recomenda não tirar conclusões de comparações de desempenho lado a lado com outros runtimes do Lambda até que o desempenho se estabilize. Como o desempenho é altamente dependente da carga de trabalho, os clientes com cargas de trabalho sensíveis ao desempenho devem realizar seus próprios testes, em vez de confiar em benchmarks de teste genéricos.
Os construtores devem continuar medindo e testando o desempenho da função e otimizando o código e a configuração da função para qualquer impacto. Para saber mais sobre como otimizar o desempenho do Node.js no Lambda, consulte Otimização de desempenho no Guia do operador do Lambda e nossa postagem no blog Otimizando dependências do Node.js no AWS Lambda.
Migração de runtimes anteriores do Node.js
SDK da AWS para JavaScript
Até o Node.js 16, os runtimes do Node.js do Lambda incluíam o SDK da AWS para JavaScript versão 2. Desde então, isso foi substituído pelo SDK da AWS para JavaScript versão 3, lançado em dezembro de 2022. Começando com o Node.js 18 e continuando com o Node.js 22, os runtimes do Lambda Node.js incluem a versão 3. Ao atualizar do Node.js 16 ou de runtimes anteriores e usar a versão 2 incluída, você deve atualizar seu código para usar o SDK v3.
Para um desempenho ideal e para ter controle total sobre suas dependências de código, recomendamos agrupar e reduzir o SDK da AWS em seu pacote de implantação, em vez de usar o SDK incluído no runtime. Para obter mais informações, consulte Otimização das dependências do Node.js no AWS Lambda.
Amazon Linux 2023
O runtime do Node.js 22 é baseado no runtime provided.al2023
, que se baseia na imagem mínima do container Amazon Linux 2023. A imagem mínima do Amazon Linux 2023 usa microdnf
como gerenciador de pacotes, symlinked
com link simbólico como dnf
. Isso substitui o gerenciador de pacotes yum
usado no Node.js 18 e nas imagens anteriores baseadas em AL2. Se você implantar sua função Lambda como uma imagem de container, deverá atualizar seu Dockerfile para usar dnf
em vez de yum
ao atualizar para a imagem base Node.js 22 do Node.js 18 ou anterior.
Além disso, o AL2 inclui curl
e gnupg2
como suas versões mínimas curl-minimal
e gnupg2-minimal.
Saiba mais sobre o runtime provided.al2023
no post Apresentando o runtime do Amazon Linux 2023 para o AWS Lambda e no post de lançamento do Amazon Linux 2023.
Usando o runtime Node.js 22 no AWS Lambda
No console de gerenciamento da AWS
Para usar o runtime do Node.js 22 para desenvolver suas funções do Lambda, especifique um valor de parâmetro de runtime Node.js 22.x ao criar ou atualizar uma função. A versão de runtime do Node.js 22 agora está disponível no menu Runtime na página Criar função no console do AWS Lambda:
Para atualizar uma função Lambda existente para o Node.js 22, navegue até a função no console do Lambda e escolha Node.js 22.x no painel de configurações do Runtime. A nova versão do Node.js está disponível no menu suspenso Runtime:
Imagem do container AWS Lambda
Altere a versão da imagem base do Node.js modificando a instrução FROM
em seu Dockerfile.
Modelo de aplicativo Serverless da AWS (AWS SAM)
No AWS SAM, defina o atributo Runtime como node22.x para usar esta versão:
Quando você adiciona código de função diretamente em um modelo do AWS SAM ou do AWS CloudFormation como uma função embutida, ele é visto como common.js
.
O AWS SAM oferece suporte à geração desse modelo com o Node.js 22 para novos aplicativos Serverless usando o comando sam init
. Consulte a documentação do AWS SAM.
AWS Cloud Developer Kit (AWS CDK)
No AWS CDK, defina o atributo de runtime como runtime.nodejs_22_x
para usar essa versão.
Conclusão
O Lambda agora oferece suporte ao Node.js 22 como um runtime de linguagem gerenciado. Esta versão usa o sistema operacional Amazon Linux 2023, bem como outras melhorias detalhadas neste blog.
Você pode criar e implantar funções usando o Node.js 22 usando o AWS Management Console, o AWS CLI, o AWS SDK, o AWS SAM, o AWS CDK ou a infraestrutura de sua escolha como ferramenta de código. Você também pode usar a imagem base do container Node.js 22 se preferir criar e implantar suas funções usando imagens de container.
O runtime do Node.js 22 ajuda os desenvolvedores a criar aplicativos Serverless mais eficientes, poderosos e escaláveis. Leia sobre o modelo de programação Node.js na documentação do Lambda para saber mais sobre como escrever funções no Node.js 22. Experimente o runtime do Node.js no Lambda hoje mesmo.
Para obter mais recursos de aprendizado Serverless, visite Serverless Land.
Este blog é uma tradução do conteúdo original em inglês (link aqui).
Biografia do autor
Julian Wood é Developer Advocate Sênior na Amazon Web Services (AWS) e ajuda desenvolvedores e criadores a adotar Serverless como a tecnologias que podem transformar a maneira como criam e executam aplicativos. |
Biografia do tradutor
Daniel Abib é Senior 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. |
Biografia do Revisor
Nicolas Tarzia é Senior Technical Account Manager na AWS, com mais de 13 anos de experiencia, com ampla experiencia em arquitetura cloud, engenharia e design de software. Atualmente está habilitando empresas do ramo de ISV (Independent Software Vendors) simplificando a operação na nuvem e otimizando os custos em cloud. Sua area de interesse são tecnologias serverless. |