

# Criar funções do Lambda com Node.js
<a name="lambda-nodejs"></a>

É possível executar o código JavaScript com Node.js no AWS Lambda. O Lambda fornece [runtimes](lambda-runtimes.md) para Node.js que executam seu código para processar eventos. Seu código é executado em um ambiente que inclui o AWS SDK para JavaScript, com as credenciais de uma função do AWS Identity and Access Management (IAM) que você gerencia. Para saber mais sobre as versões do SDK incluídas nos runtimes do Node.js, consulte [Versões do SDK incluídas no runtime](#nodejs-sdk-included).

O Lambda oferece suporte aos runtimes Node.js a seguir.<a name="nodejs-supported-runtimes"></a>


| Nome | Identificador | Sistema operacional | Data da substituição | Bloquear a criação de funções | Bloquear a atualização de funções | 
| --- | --- | --- | --- | --- | --- | 
| Node.js 24 | `nodejs24.x` | Amazon Linux 2023 |  30 de abril de 2028  |  1º de junho de 2028  |  1º de julho de 2028  | 
| Node.js 22 | `nodejs22.x` | Amazon Linux 2023 |  30 de abril de 2027  |  1º de junho de 2027  |  1º de julho de 2027  | 
| Node.js 20 | `nodejs20.x` | Amazon Linux 2023 |  30 de abril de 2026  |  31 de agosto de 2026  |  30 de setembro de 2026  | 

**Para criar uma função em Node.js.**

1. Abra o [console do lambda](https://console.aws.amazon.com/lambda).

1. Escolha a opção **Criar função**.

1. Configure as seguintes opções:
   + **Nome da função**: digite um nome para a função.
   + **Runtime**: escolha **Node.js 24.x**.

1. Escolha a opção **Criar função**.

O console cria uma função do Lambda com um único arquivo de origem chamado `index.mjs`. É possível editar esse arquivo e adicionar mais arquivos no editor de códigos integrado. Na seção **DEPLOY**, escolha **Implantar** para atualizar o código da função. Em seguida, para executar seu código, escolha **Criar evento de teste** na seção **TEST EVENTS**.

O arquivo `index.mjs` exporta uma função chamada `handler` que utiliza um objeto de evento e um objeto de contexto. Esta é a [função de manipulador](nodejs-handler.md) que o Lambda chama quando a função é invocada. O runtime da função do Node.js recebe eventos de invocação do Lambda e os transmite ao manipulador. Na configuração da função, o valor do manipulador é `index.handler`.

Quando você salva seu código de função, o console do Lambda cria um pacote de implantação de arquivos .zip. Quando desenvolver o código de função fora do console (usando um IDE), você precisará [criar um pacote de implantação](nodejs-package.md) para carregar o código na função do Lambda.

O runtime transmite um objeto de contexto para o manipulador, além do evento de invocação. O [objeto de contexto](nodejs-context.md) contém informações adicionais sobre a invocação, a função e o ambiente de execução. Outras informações estão disponíveis de variáveis de ambiente.

Sua função do Lambda é fornecida com um grupo de logs do CloudWatch Logs. O runtime envia detalhes sobre cada invocação para o CloudWatch Logs. Ele retransmite quaisquer [logs que sua função produz](nodejs-logging.md) durante a invocação. Se a função retornar um erro, o Lambda formatará o erro e o retornará para o invocador.

**Topics**
+ [Versões do SDK incluídas no runtime](#nodejs-sdk-included)
+ [Usar o keep-alive para conexões TCP](#nodejs-keep-alive)
+ [Carregamento de certificado de CA](#nodejs-certificate-loading)
+ [Atributos experimentais do Node.js](#nodejs-experimental-features)
+ [Definir o manipulador de função do Lambda em Node.js](nodejs-handler.md)
+ [Implantar funções do Lambda em Node.js com arquivos .zip](nodejs-package.md)
+ [Implantar funções do Lambda em Node.js com imagens de contêiner](nodejs-image.md)
+ [Trabalho com camadas para funções do Lambda com Node.js](nodejs-layers.md)
+ [Usar o objeto de contexto do Lambda para recuperar informações das funções em Node.js](nodejs-context.md)
+ [Registrar em log e monitorar funções do Lambda em Node.js](nodejs-logging.md)
+ [Instrumentação do código Node.js no AWS Lambda](nodejs-tracing.md)

## Versões do SDK incluídas no runtime
<a name="nodejs-sdk-included"></a>

Todos os [runtimes Node.js do Lambda compatíveis](#nodejs-supported-runtimes) incluem uma versão secundária específica do AWS SDK para JavaScript v3, e não a [versão mais recente](https://github.com/aws/aws-sdk-js-v3/releases). A versão secundária específica incluída no runtime depende da versão do runtime e do seu Região da AWS. Para encontrar a versão específica do SDK incluída no runtime que você está usando, crie uma função do Lambda com o código a seguir.

**Example index.mjs**  

```
import packageJson from '@aws-sdk/client-s3/package.json' with { type: 'json' };

export const handler = async () => ({ version: packageJson.version });
```
Uma resposta é retornada no seguinte formato:  

```
{
  "version": "3.632.0"
}
```

Para obter mais informações, consulte [Usar o SDK para JavaScript v3 em seu manipulador](nodejs-handler.md#nodejs-example-sdk-usage).

## Usar o keep-alive para conexões TCP
<a name="nodejs-keep-alive"></a>

O agente Node.js HTTP/HTTPS padrão cria uma nova conexão TCP para cada nova solicitação. Para evitar o custo de estabelecer novas conexões, o keep-alive é habilitado por padrão em todos os [runtimes Node.js com suporte](#nodejs-supported-runtimes). O Keep-alive pode reduzir os tempos de solicitação de funções do Lambda que fazem várias chamadas de API usando o SDK.

Para desativar o keep-alive, consulte [Reusing connections with keep-alive in Node.js](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/node-reusing-connections.html) no *Guia do desenvolvedor do AWS SDK para JavaScript 3.x*. Para obter mais informações sobre como usar o keep-alive, consulte [HTTP keep-alive is on by default in modular AWS SDK for JavaScript](https://aws.amazon.com/blogs/developer/http-keep-alive-is-on-by-default-in-modular-aws-sdk-for-javascript/) no Blog de ferramentas da AWS para o desenvolvedor.

## Carregamento de certificado de CA
<a name="nodejs-certificate-loading"></a>

Até a versão do runtime do Node.js 18, o Lambda carrega automaticamente certificados de CA (autoridade de certificação) específicos da Amazon para facilitar a criação de funções que interagem com outros Serviços da AWS. Por exemplo, o Lambda inclui os certificados do Amazon RDS necessários para validar o [certificado de identidade do servidor](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html) instalado no banco de dados do Amazon RDS. Esse comportamento pode ter um impacto na performance durante inicializações a frio.

A partir do Node.js 20, o Lambda não carrega mais certificados de CA adicionais por padrão. O runtime do Node.js 20 contém um arquivo de certificado com todos os certificados de CA da Amazon localizado em `/var/runtime/ca-cert.pem`. Para restaurar o mesmo comportamento do Node.js 18 e de runtimes anteriores, defina a [variável de ambiente](configuration-envvars.md) `NODE_EXTRA_CA_CERTS` como `/var/runtime/ca-cert.pem`.

Para otimizar a performance, recomendamos que você agrupe somente os certificados de que precisa com o pacote de implantação e carregue-os usando a variável de ambiente `NODE_EXTRA_CA_CERTS`. O arquivo de certificados deve consistir em um ou mais certificados de CA raiz ou intermediários confiáveis no formato PEM. Por exemplo, para o RDS, inclua os certificados necessários junto com seu código como `certificates/rds.pem`. Em seguida, carregue os certificados configurando `NODE_EXTRA_CA_CERTS` como`/var/task/certificates/rds.pem`.

## Atributos experimentais do Node.js
<a name="nodejs-experimental-features"></a>

As versões upstream da linguagem Node.js habilitam certos recursos experimentais por padrão. O Lambda desabilita esses recursos para garantir estabilidade em runtime e performance consistente. A tabela a seguir lista os recursos experimentais desabilitados pelo Lambda.


| Recurso experimental | Versões compatíveis do Node.js | Sinalizador do Node.js aplicado pelo Lambda | Sinalizador do Lambda para habilitar novamente | 
| --- | --- | --- | --- | 
| Suporte para importar módulos usando require em módulos do ES | Node.js 20, Node.js 22 | `--no-experimental-require-module` | `--experimental-require-module` | 
| Suporte para detecção automática de módulos do ES versus CommonJS | Node.js 22 | `--no-experimental-detect-module` | `--experimental-detect-module` | 

Para habilitar um recurso experimental desabilitado, defina o sinalizador de reativação na variável de ambiente `NODE_OPTIONS`. Por exemplo, para habilitar o suporte a require do módulo do ES, defina `NODE_OPTIONS` como `--experimental-require-module`. O Lambda detecta essa substituição e remove o sinalizador de desabilitação correspondente.

**Importante**  
 O uso de recursos experimentais pode resultar em instabilidade e problemas de performance. Esses recursos podem ser modificados ou removidos em futuras versões do Node.js. Funções que utilizam recursos experimentais não estão qualificadas para o Acordo de serviço (SLA) ou AWS Support do Lambda.