Tengo un módulo de nodo muy simple que quiero en AWS lambda, y está importando 'Natural' para algún procesamiento de texto.
Esta línea arroja el error: var n = require('natural');
El error es este:
{ "errorMessage": "/var/task/node_modules/webworker-threads/build/Release/WebWorkerThreads.node: invalid ELF header", "errorType": "Error", "stackTrace": [ "Module.load (module.js:487:32)", "tryModuleLoad (module.js:446:12)", "Function.Module._load (module.js:438:3)", "Module.require (module.js:497:17)", "require (internal/module.js:20:19)", "bindings (/var/task/node_modules/bindings/bindings.js:76:44)", "Object.<anonymous> (/var/task/node_modules/webworker-threads/index.js:1:105)", "Module._compile (module.js:570:32)" ] }y devuelve un
{ "message": "Internal server error" }¿AWS lambda no ejecuta webworkers? Intenté compilar con nvm 6.10 exactamente y reconstruí el archivo zip, pero fue en vano. ¿Hay algo más que deba incluir en el zip para asegurarme de que aws lambda env admita el módulo webworker?
EDITAR: (Resuelto) Escribí un largo tutorial y un blog con código para dockerizar el proceso de compilación nativo.
Debe compilar los módulos nativos en una AMI de Amazon con bibliotecas estáticas en lugar de compartidas/dinámicas. Cambiar un módulo de compartido a estático puede no ser trivial para algunos paquetes.
Los módulos nativos se instalan e implementan de manera similar, pero deberá compilarlos con las bibliotecas de Amazon Linux. Deberá asegurarse de que las bibliotecas y sus dependencias transitivas estén compiladas estáticamente o usar enlaces de estilo rpath; lo haremos de forma estática en esta publicación y demostraremos el uso de rpath en una publicación posterior. (Tenga en cuenta que muchas bibliotecas, pero no todas, se pueden vincular estáticamente de esta manera).