Intento usar capas de AWS Lambda, vi un tutorial al respecto, pero aparece el error "no se puede encontrar el módulo..."
service: aws-nodejs package: exclude: - .gitignore - package.json - .git/** provider: name: aws profile: sandbox runtime: nodejs12.x layers: testLayer: path: testLayer compatibleRuntimes: - nodejs12.x allowedAccounts: - '*' functions: hello: handler: handler.hello layers: - arn:aws:lambda:us-east-1:*:layer:testLayer:15 events: - http: path: test method: get cors: true Cuando lo implemento, no tengo ningún error en mi terminal, y en AWS, veo mi capa y cuando la descargo, tengo mi package.json con dependencia de momento y la carpeta node_modules con momento
mi handler.js se ve así:
'use strict'; module.exports.hello = async (event, context) => { const moment = require('moment') const a = moment('2016-01-01') return { statusCode: 200, body: JSON.stringify({ message: 'Hey' + a }), }; };La estructura de mis archivos:
testLayer/ node_modules/ moment/ package.json serverless.yml handler.js package.json¿Tienes alguna idea de lo que estoy haciendo mal?
Sí, es posible que sus módulos de nodo estén allí en su capa lambda y, sin embargo, lambda arroje el error "no se puede encontrar el módulo".
Esto puede deberse a que el zip que ha creado no se corresponde con la estructura de directorios mencionada en la documentación de AWS.
Según la documentación oficial:
Inclusión de dependencias de biblioteca en una capa Puede mover las dependencias de tiempo de ejecución fuera de su código de función colocándolas en una capa. Los tiempos de ejecución de Lambda incluyen rutas en el directorio /opt para garantizar que su código de función tenga acceso a las bibliotecas que se incluyen en las capas.
Para incluir bibliotecas en una capa, colóquelas en una de las carpetas admitidas por su tiempo de ejecución.
Node.js: nodejs/node_modules, nodejs/node8/node_modules (RUTA_NODE)
Ejemplo de SDK de AWS X-Ray para Node.js
nodejs/node_modules/aws-xray-sdk
Asegúrese de que su zip contenga la estructura de directorio correcta; de lo contrario, intente importar sus módulos desde /opt/your_node_module_directory