У меня есть лямбда-выражение, которое отлично работает с без сервера на localhost.
Но при развертывании с помощью лямбды у меня возникает следующая ошибка:
"errorMessage": "/var/lang/lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /var/task/node_modules/scrypt/build/Release/scrypt.node)",
"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)",
"Object.<anonymous> (/var/task/node_modules/scrypt/index.js:3:20)",
"Module._compile (module.js:570:32)",
"Object.Module._extensions..js (module.js:579:10)",
"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)",
"Object.<anonymous> (/var/task/node_modules/scrypt.js/node.js:1:76)",
"Module._compile (module.js:570:32)",
"Object.Module._extensions..js (module.js:579:10)",
"Module.load (module.js:487:32)",
"tryModuleLoad (module.js:446:12)",
"Function.Module._load (module.js:438:3)",
"Module.require (module.js:497:17)"]
Я не смог ничего найти по этому поводу, так может ли кто-нибудь помочь с этим?
Согласно Документация AWS,
Собственные модули установлены и развернуты аналогичным образом, но вам потребуется
построить их против библиотек Amazon Linux.
Так что раскрутите экземпляр EC2, создайте там свой проект, заархивируйте его и загрузите в Lambda. Похоже, что имеет значение, какой Amazon Linux AMI вы используете … Возможно, потому что они имеют разную архитектуру или разные версии библиотек или что-то в этом роде. В моем случае (при создании проекта NodeJS с использованием модуля x509) Amazon Linux 2 AMI (ami-922914f7) не работал; это привело к ошибке, очень похожей на вашу. Если вы попробуете это, но это не сработает, попробуйте пересобрать его на оригинальном Amazon Linux AMI (ami-2a0f324f). После того, как я это сделал, в Lambda все прошло отлично.
Спасибо @Tommaso за вдохновение для этого решения.
Это происходит, когда вы упаковываете зависимости узлов в системе с другой архитектурой (из-за некоторых зависимостей, которые имеют собственный код, который компилируется в вашей системе, который отличается от AWS Lambda)
Бежать docker run -v "$PWD":/var/task lambci/lambda:build-nodejs6.10
вместо npm install
настроить зависимости в лямбда-подобной среде AWS перед упаковкой модуля перед его загрузкой в AWS.