¿Cómo puedo solucionar los errores «Cannot find module» o «Cannot find Package» cuando ejecuto el código de Lambda en Node.js?
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:
-
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.
- 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
- Cree una carpeta nodejs:
$ mkdir nodejs
- 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.
- 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.
- 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
Contenido relevante
- OFICIAL DE AWSActualizada hace 3 meses
- OFICIAL DE AWSActualizada hace 3 meses
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 3 años