Selecione suas preferências de cookies

Usamos cookies essenciais e ferramentas semelhantes que são necessárias para fornecer nosso site e serviços. Usamos cookies de desempenho para coletar estatísticas anônimas, para que possamos entender como os clientes usam nosso site e fazer as devidas melhorias. Cookies essenciais não podem ser desativados, mas você pode clicar em “Personalizar” ou “Recusar” para recusar cookies de desempenho.

Se você concordar, a AWS e terceiros aprovados também usarão cookies para fornecer recursos úteis do site, lembrar suas preferências e exibir conteúdo relevante, incluindo publicidade relevante. Para aceitar ou recusar todos os cookies não essenciais, clique em “Aceitar” ou “Recusar”. Para fazer escolhas mais detalhadas, clique em “Personalizar”.

Como trabalhar com camadas para funções do Lambda em TypeScript

Modo de foco
Como trabalhar com camadas para funções do Lambda em TypeScript - AWS Lambda

Uma camada do Lambda é um arquivo .zip que contém código ou dados complementares. As camadas geralmente contêm dependências de biblioteca, um runtime personalizado ou arquivos de configuração. A criação de uma camada envolve três etapas gerais:

  1. Empacotar o conteúdo da sua camada. Isso significa criar um arquivo .zip contendo as dependências que você deseja usar em suas funções.

  2. Criar a camada no Lambda.

  3. Adicionar a camada às suas funções.

Este tópico contém as etapas e orientações sobre como empacotar e criar adequadamente uma camada do Lambda com Node.js com dependências externas de bibliotecas. Além disso, este tópico explica como usar a camada com uma função escrita em TypeScript.

Pré-requisitos

Para seguir as etapas desta seção, você deve ter o seguinte:

Neste tópico, fazemos referência à aplicação de exemplo layer-nodejs no repositório aws-lambda-developer-guide do GitHub. Esta aplicação contém scripts que empacotarão a biblioteca lodash em uma camada do Lambda. O diretório layer contém os scripts para gerar a camada. A aplicação também contém uma função de amostra em TypeScript no diretório function-ts, que usa a dependência da camada. Após a criação de uma camada, é possível converter código de uma linguagem para outra, implantar e invocar a função correspondente para verificar se tudo está funcionando corretamente. Este documento fornece uma orientação sobre como criar, empacotar, implantar e testar essa camada usando a função de amostra em TypeScript.

Essa aplicação de exemplo usa o runtime do Node.js 20. Se você adicionar dependências adicionais à camada, elas deverão ser compatíveis com o Node.js 20.

Compatibilidade da camada Node.js com o ambiente de runtime do Lambda

Ao empacotar o código em uma camada Node.js, você especifica os ambientes de runtime do Lambda com os quais o código é compatível. Para avaliar a compatibilidade do código com um runtime, considere para quais versões do Node.js, quais sistemas operacionais e quais arquiteturas de conjunto de instruções o código foi projetado.

Os runtimes do Node.js do Lambda especificam a versão e o sistema operacional do Node.js. Neste documento, você usará o runtime do Node.js 20, que é baseado no AL2023. Para obter mais informações sobre as versões do runtime, consulte Tempos de execução compatíveis. Ao criar a função do Lambda, você especifica a arquitetura do conjunto de instruções. Neste documento, você usará a arquitetura arm64. Para obter mais informações sobre arquiteturas no Lambda, consulte Selecionar e configurar a arquitetura de um conjunto de instruções para a função do Lambda.

Quando você usa o código fornecido em um pacote, cada mantenedor do pacote define sua compatibilidade de forma independente. A maior parte do desenvolvimento do Node.js foi projetada para funcionar independentemente do sistema operacional e da arquitetura do conjunto de instruções. Além disso, falhas de incompatibilidades com novas versões do Node.js não são tão comuns. Espere passar mais tempo avaliando a compatibilidade entre pacotes do que avaliando a compatibilidade de pacotes com a versão, o sistema operacional ou a arquitetura do conjunto de instruções do Node.js.

Às vezes, os pacotes do Node.js incluem código compilado, o que exige que você considere a compatibilidade da arquitetura do sistema operacional e do conjunto de instruções. Se precisar avaliar a compatibilidade do código dos pacotes, você precisará inspecionar os pacotes e a documentação deles. Os pacotes no NPM podem especificar a compatibilidade por meio dos campos engines, os e cpu do arquivo de manifesto package.json. Para obter mais informações sobre os arquivos package.json, consulte package.json na documentação do NPM.

Caminhos de camada para runtimes do Node.js

Quando você adiciona uma camada a uma função, o Lambda carrega o conteúdo da camada no diretório nesse ambiente de execução. Se as dependências de pacotes da camada estiverem em caminhos de pasta específicos, o ambiente de execução do Node.js reconhecerá os módulos e você poderá referenciá-los no seu código de função.

Para garantir que os módulos sejam selecionados, empacote-os em seu arquivo de camada .zip em um dos caminhos de pasta a seguir. Esses arquivos são armazenados em /opt, e os caminhos das pastas são carregados na variável PATH de ambiente.

  • nodejs/node_modules

  • nodejs/nodeX/node_modules

Por exemplo, o arquivo .zip de camada resultante que você cria neste tutorial tem a seguinte estrutura de diretórios:

layer_content.zip └ nodejs └ node20 └ node_modules └ lodash └ <other potential dependencies> └ ...

Você colocará a biblioteca lodash no diretório nodejs/node20/node_modules. Isso garante que o Lambda possa localizar a biblioteca durante as invocações da função.

Empacotar o conteúdo de camada

Neste exemplo, você empacota a biblioteca lodash em um arquivo de camada .zip. Conclua as etapas a seguir para instalar e empacotar o conteúdo de camada.

Para instalar e empacotar seu conteúdo de camada
  1. Clone o repositório aws-lambda-developer-guide do GitHub, que contém o código de exemplo de que você precisa no diretório sample-apps/layer-nodejs.

    git clone https://github.com/awsdocs/aws-lambda-developer-guide.git
  2. Acesse o diretório layer do exemplo de aplicação layer-nodejs. Esse diretório contém os scripts que você usa para criar e empacotar a camada corretamente.

    cd aws-lambda-developer-guide/sample-apps/layer-nodejs/layer
  3. Garanta que o arquivo package.json liste lodash. Esse arquivo define as dependências que você deseja incluir na camada. Você pode atualizar esse arquivo para incluir quaisquer dependências que deseje na camada.

    nota

    O package.json usado nesta etapa não é armazenado nem usado com as dependências depois que elas são carregadas em uma camada do Lambda. Ele é usado somente no processo de empacotamento de camadas e não especifica uma compatibilidade e um comando de execução como o arquivo faria em uma aplicação Node.js ou um pacote publicado.

  4. Certifique-se de ter permissão de shell para executar os scripts no diretório layer.

    chmod 744 1-install.sh && chmod 744 2-package.sh
  5. Execute o script 1-install.sh usando o seguinte comando:

    ./1-install.sh

    Esse script executa npm install, que lê o package.json e faz o download das dependências definidas nele.

    exemplo 1-install.sh
    npm install .
  6. Execute o script 2-package.sh usando o seguinte comando:

    ./2-package.sh

    Esse script copia o conteúdo do diretório node_modules em um novo diretório chamado nodejs/node20. Em seguida, ele compacta o conteúdo do diretório nodejs em um arquivo chamado layer_content.zip. Esse é o arquivo .zip da sua camada. É possível descompactar o arquivo e verificar se ele contém a estrutura de arquivo correta, conforme apresentado na seção Caminhos de camada para runtimes do Node.js.

    exemplo 2-package.sh
    mkdir -p nodejs/node20 cp -r node_modules nodejs/node20/ zip -r layer_content.zip nodejs

Como criar a camada

Pegue o arquivo layer_content.zip gerado na seção anterior e o carregue como uma camada do Lambda. É possível fazer upload de uma camada usando o AWS Management Console ou a API do Lambda por meio da AWS Command Line Interface (AWS CLI). Ao carregar seu arquivo .zip de camada, no seguinte comando PublishLayerVersion da AWS CLI, especifique nodejs20.x como o runtime compatível e arm64 como a arquitetura compatível.

aws lambda publish-layer-version --layer-name nodejs-lodash-layer \ --zip-file fileb://layer_content.zip \ --compatible-runtimes nodejs20.x \ --compatible-architectures "arm64"

Na resposta, anote o LayerVersionArn, que será algo como arn:aws:lambda:us-east-1:123456789012:layer:nodejs-lodash-layer:1. Você precisará desse nome do recurso da Amazon (ARN) na próxima etapa deste tutorial, ao adicionar a camada à função.

Como adicionar a camada à sua função

Implante um exemplo de função do Lambda que usa a biblioteca lodash em seu código de função, e depois anexe a camada que você criou. Para criar uma função do Lambda usando código escrito em TypeScript, é necessário converter código da linguagem TypeScript para JavaScript para que ele possa ser usado pelo runtime em Node.js. Para ter mais informações sobre esse processo, consulte Definir o manipulador de função do Lambda em TypeScript. Para obter melhor compatibilidade, use “tsc” para converter código de uma linguagem para outra no módulo TypeScript ao distribuir as dependências em camadas. Se você realizar o empacotamento das dependências, considere usar “esbuild”. Para obter mais informações sobre o empacotamento com “esbuild”, consulte Implantar código TypeScript transcompilado no Lambda com arquivos .zip.

Para implantar a função, você precisará de um perfil de execução. Para ter mais informações, consulte Definir permissões de uma função do Lambda com um perfil de execução. Se ainda não tiver um perfil de execução, siga as etapas na seção recolhível. Caso contrário, pule para a próxima seção para implantar a função.

Para criar uma função de execução
  1. Abra a página Roles (Funções) no console do IAM.

  2. Selecione Criar perfil.

  3. Crie uma função com as propriedades a seguir.

    • Entidade confiávelLambda.

    • Permissions (Permissões): AWSLambdaBasicExecutionRole.

    • Role name (Nome da função): lambda-role.

    A política AWSLambdaBasicExecutionRole tem as permissões necessárias para a função gravar logs no CloudWatch Logs.

Para criar uma função de execução
  1. Abra a página Roles (Funções) no console do IAM.

  2. Selecione Criar perfil.

  3. Crie uma função com as propriedades a seguir.

    • Entidade confiávelLambda.

    • Permissions (Permissões): AWSLambdaBasicExecutionRole.

    • Role name (Nome da função): lambda-role.

    A política AWSLambdaBasicExecutionRole tem as permissões necessárias para a função gravar logs no CloudWatch Logs.

O código da função de exemplo usa o método lodash _.findLastIndex para ler por meio de uma matriz de objetos. Ele compara os objetos com os critérios para encontrar o índice de uma correspondência. Em seguida, ele retorna o índice e o valor do objeto na resposta do Lambda.

import { Handler } from 'aws-lambda'; import * as _ from 'lodash'; type User = { user: string; active: boolean; } type UserResult = { statusCode: number; body: string; } const users: User[] = [ { 'user': 'Carlos', 'active': true }, { 'user': 'Gil-dong', 'active': false }, { 'user': 'Pat', 'active': false } ]; export const handler: Handler<any, UserResult> = async (): Promise<UserResult> => { let out = _.findLastIndex(users, (user: User) => { return user.user == 'Pat'; }); const response = { statusCode: 200, body: JSON.stringify(out + ", " + users[out].user), }; return response; };
Para implantar a função do Lambda
  1. Acesse o diretório function-ts/ da aplicação de amostra layer-nodejs. Se, no momento, você estiver no diretório layer/ da aplicação de análise layer-nodejs, execute o seguinte comando:

    cd ../function-ts
  2. Instale as dependências de desenvolvimento listadas no package.json usando o seguinte comando:

    npm install
  3. Em seguida, execute a tarefa build definida no package.json para converter código de uma linguagem para outra e empacotar o código da função em um arquivo .zip. Use o seguinte comando:

    npm run build
  4. Implantar a função. No seguinte comando da AWS CLI, substitua o parâmetro --role pelo ARN do seu perfil de execução:

    aws lambda create-function --function-name nodejs_function_with_layer \ --runtime nodejs20.x \ --architectures "arm64" \ --handler index.handler \ --role arn:aws:iam::123456789012:role/lambda-role \ --zip-file fileb://dist/index.zip
  5. Anexe a camada à função. No seguinte comando da AWS CLI, substitua o parâmetro --layers pelo ARN da versão de camada que você anotou anteriormente:

    aws lambda update-function-configuration --function-name nodejs_function_with_layer \ --cli-binary-format raw-in-base64-out \ --layers "arn:aws:lambda:us-east-1:123456789012:layer:nodejs-lodash-layer:1"
  6. Invoque a função para verificar se funciona usando o seguinte comando da AWS CLI:

    aws lambda invoke --function-name nodejs_function_with_layer \ --cli-binary-format raw-in-base64-out \ --payload '{}' response.json

    Você deve ver uma saída semelhante a:

    { "StatusCode": 200, "ExecutedVersion": "$LATEST" }

    O arquivo response.json de saída contém detalhes sobre a resposta.

Agora você pode excluir os recursos criados para este tutorial, a menos que queira mantê-los. Excluindo os recursos da AWS que você não está mais usando, você evita cobranças desnecessárias em sua Conta da AWS.

Para excluir a camada do Lambda
  1. Abra a página Camadas do console do Lambda.

  2. Selecione a camada que você criou.

  3. Escolha Excluir, depois escolha Excluir novamente.

Como excluir a função do Lambda
  1. Abra a página Functions (Funções) no console do Lambda.

  2. Selecione a função que você criou.

  3. Selecione Ações, Excluir.

  4. Digite confirm no campo de entrada de texto e escolha Delete (Excluir).

Agora você pode excluir os recursos criados para este tutorial, a menos que queira mantê-los. Excluindo os recursos da AWS que você não está mais usando, você evita cobranças desnecessárias em sua Conta da AWS.

Para excluir a camada do Lambda
  1. Abra a página Camadas do console do Lambda.

  2. Selecione a camada que você criou.

  3. Escolha Excluir, depois escolha Excluir novamente.

Como excluir a função do Lambda
  1. Abra a página Functions (Funções) no console do Lambda.

  2. Selecione a função que você criou.

  3. Selecione Ações, Excluir.

  4. Digite confirm no campo de entrada de texto e escolha Delete (Excluir).

PrivacidadeTermos do sitePreferências de cookies
© 2025, Amazon Web Services, Inc. ou suas afiliadas. Todos os direitos reservados.