Como uso camadas para integrar a versão mais recente do AWS SDK para JavaScript na minha função Lambda do Node.js?

7 minuto de leitura
0

O ambiente de runtime do AWS Lambda não tem certos recursos da versão mais recente de um SDK da AWS. Quero integrar a versão mais recente do AWS SDK para JavaScript à minha função Node.js Lambda.

Breve descrição

Para integrar a versão mais recente de um SDK da AWS ao pacote de implantação da sua função do Lambda, crie uma camada do Lambda. Em seguida, adicione a camada à sua função. Para criar uma camada do Lambda e adicioná-la à sua função, use a AWS Command Line Interface (AWS CLI) ou o console do Lambda.

Observação: para as versões 16 e anteriores do Node.js, os runtimes do Lambda Node.js incluíram o AWS SDK para JavaScript versão 2. Para as versões 18 e posteriores do Node.js, o runtime do Lambda Node.js inclui o SDK da AWS para JavaScript versão 3. Para obter mais informações, consulte o runtime do Node.js 18.x agora disponível no AWS Lambda.

Para obter uma lista completa dos runtimes e das versões do SDK da AWS que o Lambda usa, consulte Tempos de execução do Lambda.

Observação: a resolução a seguir aumenta o tamanho do pacote de implantação da sua função. Para obter informações sobre cotas de armazenamento do Lambda, consulte Cotas do Lambda.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

(Opcional) Confirme a versão do AWS SDK que sua função usa

Para confirmar a versão do AWS SDK que sua função usa, conclua as seguintes etapas:

Observação: use esse método somente para as versões 16 e anteriores do Node.js.

  1. Crie uma função no console do Lambda.

  2. Atualize o código da função para retornar a versão do SDK da AWS que a função usa quando você invoca a função:

    const AWS = require('aws-sdk')   
    exports.handler = async (event) => {  
    return AWS.VERSION;  
    };
  3. Invoque sua função.

  4. Compare a versão do SDK da AWS que sua função retornou com a versão mais recente do SDK da AWS listada na documentação do SDK da AWS.

Instale e empacote a versão mais recente do SDK da AWS

Observação: os pacotes de implantação devem ser compatíveis com o runtime do Lambda que você usa. É uma prática recomendada usar o mesmo sistema operacional (SO) para seu tempo de execução especificado nos runtimes do Lambda. Por exemplo, inicie uma instância compatível do Amazon Elastic Compute Cloud (Amazon EC2).

Em um ambiente de desenvolvimento local compatível com o Lambda, conclua as seguintes etapas:

  1. Execute o comando a seguir para criar um diretório de trabalho:

    mkdir -p aws-sdk-layer/nodejs
  2. Execute o comando a seguir para mudar para o diretório de trabalho:

    cd aws-sdk-layer/nodejs
  3. Instale o AWS SDK para sua versão de runtime do Node.js:
    Node.js 16 e versões anteriores (SDK da AWS versão 2)
    Para instalar a versão mais recente do SDK da AWS versão 2, use uma instância compatível com Amazon Linux 2 para executar o seguinte comando:

    npm install aws-sdk

    Para obter mais informações, consulte Tutorial: Como configurar o Node.js em uma instância do Amazon EC2.

    Observação: é uma prática recomendada usar um ambiente do Amazon Linux 2 ao desenvolver recursos do Lambda.

    -ou-

    Se você usa um sistema operacional Windows ou macOS para desenvolvimento, use o Docker para executar o seguinte comando:

    docker run --entrypoint "" -v "$PWD":/var/task "public.ecr.aws/lambda/nodejs:<version>" /bin/sh -c "npm install aws-sdk; exit"

    Observação: antes de executar o comando, verifique se você está usando a versão mais recente do Docker no site do Docker.

    Node.js 18 e versões posteriores (SDK da AWS versão 3)

    Consulte Instalação do SDK para JavaScript.

    Se você importar um comando do SDK da AWS que não existe na versão do SDK incorporada ao Lambda, poderá receber o seguinte erro:

    “Runtime.UserCodeSyntaxError “Exportação nomeada não encontrada” O módulo solicitado é um módulo CommonJS”

    Nesse caso, instale o pacote específico para que você possa usá-lo em sua função. Por exemplo, você usa a seguinte instrução de importação:

    import {DeleteQueueCommand} from "@aws-sdk/client-connect";

    Nesse caso, instale o cliente atualizado para poder usar o pacote específico em sua função.

    Por exemplo, você usa a seguinte instrução de importação em uma função do Lambda com Node.js versão 18 ou posterior:

    import {DeleteQueueCommand} from "@aws-sdk/client-connect";

    Se esse pacote não estiver na sua versão atual do AWS SDK, você receberá o seguinte erro nos seus registros:

    “"errorType": "Runtime.UserCodeSyntaxError",
    "errorMessage": "SyntaxError: A exportação nomeada 'DeleteQueueCommand' não foi encontrada. O módulo solicitado '@aws -sdk/client-connect' é um módulo CommonJS, que pode não suportar todos os module.exports como exportações nomeadas.\nOs módulos CommonJS sempre podem ser importados por meio da exportação padrão, por exemplo, usando:\n\nimport pkg from '@aws-sdk/client-connect';\nconst {DeleteQueueCommand} = pkg;\n",”

    Para incluir o pacote DeleteQueueCommand e resolver esse erro, instale a versão mais recente do cliente:

    npm install @aws-sdk/client-connect  
    
  4. Crie um arquivo .zip a ser carregado na sua camada do Lambda:

    zip -r ../package.zip ../
  5. (Opcional) Verifique a versão do SDK da AWS que você instalou:

    cat package-lock.json

    Você recebe uma saída semelhante à seguinte:

    {  "requires": true,  
      "lockfileVersion": 1,  
      "dependencies": {  
        "aws-sdk": {  
          "version": "2.888.0",  
    ...

Use a AWS CLI para criar uma camada do Lambda e adicioná-la à sua função

  1. Para criar uma nova camada do Lambda que inclua a versão mais recente do SDK da AWS que você deseja usar, execute o seguinte comando publish-layer-version:

    Observação: substitua node_sdk pelo nome da sua camada e Minha camada por uma descrição da camada. Além disso, substitua o valor compatible-runtimes pelo runtime que você usa e region pela região da AWS em que sua função e camada estão.

    aws lambda publish-layer-version --layer-name node_sdk --description "My layer" --license-info "MIT" --compatible-runtimes --zip-file fileb://../package.zip --region

    Observe o valor LayerVersionArn que está na saída do comando para usar na próxima etapa.

  2. Para adicionar a camada à sua função, execute o seguinte comando update-function-configuration:

    Observação: substitua my-function pelo nome da sua função, arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 pelo valor LayerVersionArn da sua saída e region pela sua região.

    aws lambda update-function-configuration --function-name my-function --layers arn:aws:lambda:us-east-2:123456789012:layer:node_sdk:1 --region

    Para obter mais informações, consulte Como trabalhar com camadas do Lambda.

Use o console do Lambda para criar uma camada Lambda e adicioná-la à sua função

  1. Abra a página Layers no console do Lambda.
  2. Escolha Criar camada. Insira os valores a seguir:
    Em Nome, insira um nome para a nova camada.
    (Opcional) Em Descrição - opcional, insira uma descrição para a camada.
    Escolha Fazer upload de um arquivo .zip.
    Selecione Fazer upload. Em seguida, escolha o nome do arquivo .zip do seu pacote de implantação.
    (Opcional) Para Runtimes compatíveis - opcional, escolha um ou mais runtimes compatíveis. 
    (Opcional) Em Licença - opcional, insira qualquer informação de licença de software aplicável para a camada.
  3. Selecione Criar.
  4. Abra a página Funções no console do Lambda e escolha o nome da função à qual você deseja adicionar a camada.
  5. Abaixo de Visão geral da função, escolha Camadas.
  6. Escolha Adicionar uma camada.
  7. Em Escolher uma camada, escolha Camadas personalizadas. Em seguida, escolha os seguintes valores:
    O nome da camada
    A versão da camada
  8. Escolha Adicionar.

(Opcional) Testar a configuração

Conclua as etapas na seção (Opcional) Confirme a versão do AWS SDK que sua função usa para invocar sua função. A função retorna a versão do SDK da AWS que ela usa.

Você também pode verificar a versão mais recente do SDK da AWS no arquivo CHANGELOG do SDK da AWS que você usa. Para obter mais informações, consulte o Changelog do AWS SDK para JavaScript ou o Changelog do AWS SDK V3 para Javascript no site do GitHub.

Informações relacionadas

Modelo de programação Lambda

Práticas recomendadas para trabalhar com funções do AWS Lambda

Como faço para criar um pacote de implantação do Lambda para o Node.js?

AWS OFICIAL
AWS OFICIALAtualizada há 7 meses