Контекст
У меня есть лямбда-функция, которая использует собственный модуль узла (узел-снежный ком), который требует компиляции для запуска.поскольку я использую macOS, скомпилированный код, который выполняется на моей локальной машине, не будет работать в среде Amazon Linux AWS Lambda.По этой причине я использую Docker и lambci/lambda:build-nodejs8.10
IMAGE для компиляции в код, который будет работать на Lambda, который я затем разверну через Serverless.
Проблема
Внутри моего каталога проекта с установленными модулями узла mac я запускаю контейнер с помощью следующей команды:
# To compile native deps in node_modules (runs `npm rebuild`)
docker run --rm -v "$PWD":/var/task lambci/lambda:build-nodejs8.10
9/10 раз этап компиляции завершается успешно, но затем появляются ошибки наnode postinstall
шаг с ошибкой ENOENT
при поиске без сервера (полный вывод приведен ниже).
> node-snowball@0.2.0 install /var/task/node_modules/node-snowball
> node-gyp rebuild
make: Entering directory `/var/task/node_modules/node-snowball/build'
CXX(target) Release/obj.target/snowball/src/snowball.o
...
CC(target) Release/obj.target/snowball/src/libstemmer/src_c/stem_UTF_8_turkish.o
SOLINK_MODULE(target) Release/obj.target/snowball.node
COPY Release/snowball.node
make: Leaving directory `/var/task/node_modules/node-snowball/build'
> spawn-sync@1.0.15 postinstall /var/task/node_modules/spawn-sync
> node postinstall
npm ERR! path /var/task/node_modules/serverless/bin/serverless
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall chmod
npm ERR! enoent ENOENT: no such file or directory, chmod '/var/task/node_modules/serverless/bin/serverless'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2019-02-21T11_46_54_327Z-debug.log
Однако, глядя в каталог моего проекта, я вижу, что там есть файлы без сервера.
my-app-directory/
|__node_modules/
|__serverless/
|__bin/
|__serverless
Что делает это еще более запутанным, так это то, что в 1/10 раза операция будет успешно завершена без каких-либо ошибок (вывод ниже).
> node-snowball@0.2.0 install /var/task/node_modules/node-snowball
> node-gyp rebuild
make: Entering directory `/var/task/node_modules/node-snowball/build'
CXX(target) Release/obj.target/snowball/src/snowball.o
...
CC(target) Release/obj.target/snowball/src/libstemmer/src_c/stem_UTF_8_turkish.o
SOLINK_MODULE(target) Release/obj.target/snowball.node
COPY Release/snowball.node
make: Leaving directory `/var/task/node_modules/node-snowball/build'
> spawn-sync@1.0.15 postinstall /var/task/node_modules/spawn-sync
> node postinstall
> serverless@1.37.1 postinstall /var/task/node_modules/serverless
> node ./scripts/postinstall.js
aws-sdk@2.404.0 /var/task/node_modules/aws-sdk
...
serverless@1.37.1 /var/task/node_modules/serverless
async@1.5.2 /var/task/node_modules/serverless/node_modules/async
raven@1.2.1 /var/task/node_modules/raven
uuid@3.0.0 /var/task/node_modules/raven/node_modules/uuid
uuid@2.0.3 /var/task/node_modules/serverless/node_modules/uuid
Что может быть причиной этого противоречивого поведения и как я могу это исправить?