Como resolvo os erros “Não é possível encontrar o módulo” ou “Não é possível encontrar o pacote” ao executar o código do Lambda no Node.js?

3 minuto de leitura
0

Eu recebo o erro “Não é possível encontrar o módulo” ou “Não é possível encontrar o pacote” quando executo o código do AWS Lambda no Node.js.

Breve descrição

Se seu ambiente do Lambda não conseguir encontrar a biblioteca especificada no código Node.js, você receberá um destes erros. Eles ocorrem porque o Lambda não vem pré-empacotado com todas as bibliotecas do Node.js.

  • Se um módulo estiver faltando com o CommonJS, você receberá o seguinte erro: Runtime.ImportModuleError: Erro: Não é possível encontrar o módulo.
  • Se um módulo estiver faltando com o JavaScript ES6, você receberá o seguinte erro: Error [ERR_MODULE_NOT_FOUND]: Não é possível encontrar o pacote.

Para resolver esses erros, crie um pacote de implantação ou uma camada do Lambda que inclua as bibliotecas que você deseja usar em seu código Node.js.

Para runtimes do Node.js 16 e anteriores, o Lambda não tem suporte às dependências do módulo ES do JavaScript em camadas. Você deve incluir as dependências na implantação.
O Lambda tem suporte às dependências do módulo ES do JavaScript para o Node.js 18.

Use as etapas a seguir para criar uma camada do Lambda. Crie uma camada do Lambda em vez de um pacote de implantação para que você possa reutilizar a camada em várias funções do Lambda. Cada runtime do Lambda adiciona pastas específicas do diretório /opt à variável PATH. Se a camada usar a mesma estrutura de pastas, o código da função do Lambda poderá acessar o conteúdo da camada sem especificar o caminho.

Importante: A biblioteca que você importa para o Node.js deve estar dentro da estrutura de pastas nodejs/node_modules.

Resolução

É uma prática recomendada criar uma camada do Lambda no mesmo sistema operacional em que seu runtime do Lambda se baseia. Por exemplo, todas as versões do Node.js são baseadas no Amazon Machine Images (AMI) do Amazon Linux 2.

Crie uma camada do Lambda para uma biblioteca Node.js:

1.    Crie uma instância do Amazon Elastic Compute Cloud (Amazon EC2) a partir de uma AMI do Amazon Linux 2.

2.    Crie um perfil do AWS Identity and Access Management (IAM) com permissões para chamar a API publish-layer-version. Em seguida, conecte o perfil do IAM à instância do EC2.

Observação: sua instância do EC2 agora tem permissões para fazer upload de camadas Lambda para a chamada de API publish-layer-version.

3.    Conecte-se à sua instância do EC2 e, em seguida, instale o Node.js:

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
$ . ~/.nvm/nvm.sh
$ nvm install node

4.    Crie uma pasta nodejs:

$ mkdir nodejs

5.    Instale a biblioteca aws-xray-sdk na pasta nodejs:

$ cd nodejs
$ npm init  ***answer all queries regarding initialization that create a package.json file***
$ npm install --save aws-xray-sdk

Observação: substitua a biblioteca de exemplo aws-xray-sdk pela biblioteca Node.js que você deseja importar.

6.    Crie um arquivo zip para a biblioteca aws-xray-sdk:

$ zip -r layer.zip nodejs

Observação: a biblioteca aws-xray-sdk está no formato de pasta necessário para uma camada do Node.js: nodejs/node_modules.

7.    Publique a camada do Lambda:

$ aws lambda publish-layer-version --layer-name xray --zip-file fileb://layer.zip --compatible-runtimes nodejs12.x --region us-east-1

Observação: para adicionar módulos ECMAScript 6 (ES6) ou CommonJS em sua leitura de código, consulte a sintaxe JavaScript ES6/CommonJS.

Informações relacionadas

Como soluciono os erros de “permissão negada” ou “não foi possível importar o módulo” ao fazer o upload de um pacote de implantação do Lambda?

AWS OFICIAL
AWS OFICIALAtualizada há um ano