веб-сервисы амазонок — ошибка c ++ в лямбде AWS?

У меня есть лямбда-выражение, которое отлично работает с без сервера на 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)"]

Я не смог ничего найти по этому поводу, так может ли кто-нибудь помочь с этим?

1

Решение

Согласно Документация AWS,

Собственные модули установлены и развернуты аналогичным образом, но вам потребуется
построить их против библиотек Amazon Linux.

Так что раскрутите экземпляр EC2, создайте там свой проект, заархивируйте его и загрузите в Lambda. Похоже, что имеет значение, какой Amazon Linux AMI вы используете … Возможно, потому что они имеют разную архитектуру или разные версии библиотек или что-то в этом роде. В моем случае (при создании проекта NodeJS с использованием модуля x509) Amazon Linux 2 AMI (ami-922914f7) не работал; это привело к ошибке, очень похожей на вашу. Если вы попробуете это, но это не сработает, попробуйте пересобрать его на оригинальном Amazon Linux AMI (ami-2a0f324f). После того, как я это сделал, в Lambda все прошло отлично.

Спасибо @Tommaso за вдохновение для этого решения.

1

Другие решения

Это происходит, когда вы упаковываете зависимости узлов в системе с другой архитектурой (из-за некоторых зависимостей, которые имеют собственный код, который компилируется в вашей системе, который отличается от AWS Lambda)

Бежать docker run -v "$PWD":/var/task lambci/lambda:build-nodejs6.10 вместо npm install настроить зависимости в лямбда-подобной среде AWS перед упаковкой модуля перед его загрузкой в ​​AWS.

0

По вопросам рекламы [email protected]