Saltar al contenido

¿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

Se muestran los errores "Cannot find module" o "Cannot find Package" cuando ejecuto el código de AWS Lambda en Node.js.

Descripción corta

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

Resolución

Para resolver estos errores, crea una capa de Lambda que incluya las bibliotecas que desees utilizar en el código Node.js. Puedes reutilizar la capa en varias funciones de Lambda.

Para las versiones ejecutables de Node.js 16 y versiones anteriores, Lambda no admite las dependencias del módulo ES de JavaScript en capas. Debes incluir las dependencias en el despliegue. Lambda admite las dependencias del módulo ES de JavaScript para Node.js 24.

Cada versión ejecutable de Lambda agrega carpetas específicas del directorio /opt a la variable PATH. Si la capa usa la misma estructura de carpetas, el código de la función de Lambda puede acceder al contenido de la capa sin una ruta específica.

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

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

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de errores de AWS CLI. Además, asegúrate de utilizar la versión más reciente de AWS CLI.

Para crear una capa de Lambda para una biblioteca de Node.js, sigue estos pasos:

  1. Crea una instancia de Amazon Elastic Compute Cloud (Amazon EC2) a partir de una AMI de Amazon Linux 2023.
  2. Crea un rol de AWS Identity and Access Management (IAM) con permisos para llamar a la API publish-layer-version.
  3. Asocia el rol de IAM a la instancia de Amazon EC2.

Nota: La instancia ahora tiene permisos para cargar capas de Lambda durante la llamada a la API publish-layer-version. Usa SSH para conectarte a tu instancia de EC2. Para instalar Node.js, ejecuta el siguiente comando curl:

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh
    bash
    $ . ~/.nvm/nvm.sh
    nvm install 24
    ```

6. Crea una carpeta **nodejs**:
   ```plaintext
   mkdir nodejs
  1. Instala la biblioteca aws-xray-sdk en la carpeta nodejs:

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

    Nota: Sustituye aws-xray-sdk por la biblioteca Node.js que desees importar.

  2. Crea 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.

  3. Para publicar la capa de Lambda, ejecuta el siguiente comando publish-layer-version:

    aws lambda publish-layer-version --layer-name xray --zip-file fileb://layer.zip --compatible-runtimes nodejs24.x --region your-region

    Nota: Sustituye xray por el nombre de tu capa, nodejs24.x por tu versión de Node.js y your-region por tu región de AWS.

Para añadir los módulos ECMAScript 6 (ES6) o CommonJS al código, consulta 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?

¿Cómo puedo crear un paquete de despliegue de Lambda para Node.js?

OFICIAL DE AWSActualizada hace 6 meses