¿Cómo puedo solucionar los errores «Cannot find module» o «Cannot find Package» cuando ejecuto el código de Lambda en Node.js?

3 minutos de lectura
0

Recibo el error «Cannot find module» o «Cannot find Package» cuando ejecuto el código de AWS Lambda en Node.js.

Descripción breve

Si el entorno Lambda no encuentra la biblioteca especificada en el código Node.js, recibirá uno de estos errores. Estos errores se producen porque Lambda no viene preempaquetada con todas las bibliotecas de Node.js.

  • Si falta un módulo en CommonJS, recibirá el siguiente error: Runtime.ImportModuleError: Error: No se puede encontrar el módulo.
  • Si falta un módulo en JavaScript ES6, recibirá el siguiente error: Error [ERR_MODULE_NOT_FOUND]: No se puede encontrar el paquete.

Para resolver estos errores, cree un paquete de despliegue o una capa Lambda que incluya las bibliotecas que desee utilizar en el código Node.js.

Para los entornos de ejecución de Node.js 16 y versiones anteriores, Lambda no admite las dependencias del módulo ES de JavaScript en capas. Debe incluir las dependencias en el despliegue.
Lambda admite las dependencias del módulo ES de JavaScript para Node.js 18.

Para crear una capa Lambda, dé los pasos siguientes. Cree una capa Lambda, en lugar de un paquete de despliegue, para poder reutilizar la capa en varias funciones de Lambda. Cada versión ejecutable de Lambda agrega carpetas específicas del directorio /opt a la variable PATH. Si la capa utiliza la misma estructura de carpetas, el código de la función Lambda puede acceder al contenido de la capa sin especificar la ruta.

Importante: La biblioteca que se importe a Node.js debe estar dentro de la estructura de carpetas nodejs/node_modules.

Resolución de problemas

Se recomienda crear una capa Lambda en el mismo sistema operativo en el que se basa la versión ejecutable de Lambda. Por ejemplo, todas las versiones de Node.js se basan en imágenes de máquina de Amazon (AMI) de Amazon Linux 2.

Cree una capa Lambda para una biblioteca de Node.js:

  1. Cree una instancia de Amazon Elastic Compute Cloud (Amazon EC2) a partir de una AMI de Amazon Linux 2.

  2. Cree un rol de AWS Identity and Access Management (IAM) con permisos para llamar a la API publish-layer-version. A continuación, adjunte el rol de IAM a la instancia de EC2.

Nota: La instancia de EC2 ahora tendrá permisos para cargar capas de Lambda durante la llamada a la API publish-layer-version.

  1. Conéctese a la instancia de EC2 y, a continuación, instale Node.js:
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
$ . ~/.nvm/nvm.sh
$ nvm install node
  1. Cree una carpeta nodejs:
$ mkdir nodejs
  1. Instale la biblioteca aws-xray-sdk en la carpeta nodejs:
$ cd nodejs
$ npm init  ***answer all queries regarding initialization that create a package.json file***
$ npm install --save aws-xray-sdk

Nota: Sustituya la biblioteca de ejemplos aws-xray-sdk por la biblioteca Node.js que desee importar.

  1. Cree un archivo zip para la biblioteca aws-xray-sdk:
$ zip -r layer.zip nodejs

Nota: La biblioteca aws-xray-sdk tiene el formato de carpeta necesario para una capa de Node.js: nodejs/node_modules.

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

Nota: Para añadir los módulos ECMAScript 6 (ES6) o CommonJS al código leído, consulte la sintaxis JavaScript ES6/CommonJS.

Información relacionada

¿Cómo soluciono los errores «permission denied» o «unable to import module» al cargar un paquete de despliegue de Lambda?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año