1

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)"
  ]

私はこれについて何も見つけることができなかったので、誰かがこれについて助けを提供できますか?

4

2 に答える 2

1

AWSのドキュメントによると、

ネイティブ モジュールも同様にインストールおよびデプロイされますが、Amazon Linux ライブラリに対してビルドする必要があります。

EC2 インスタンスをスピンアップし、そこにプロジェクトをビルドし、圧縮して、Lambda にアップロードします。ただし、使用する Amazon Linux AMI に違いがあるようです...おそらく、アーキテクチャが異なるか、ライブラリのバージョンが異なるためです。私の場合 (x509 モジュールを使用して NodeJS プロジェクトを構築していた)、Amazon Linux 2 AMI (ami-922914f7) は機能しませんでした。あなたと非常によく似たエラーが発生しました。これを試してもうまくいかない場合は、元の Amazon Linux AMI (ami-2a0f324f) で再構築してみてください。それを行った後、Lambda で完全に実行されました。

このソリューションの背後にあるインスピレーションについて @Tommaso に感謝します。

于 2018-05-23T00:05:25.147 に答える
0

これは、ノードの依存関係を異なるアーキテクチャのシステムにパッケージ化した場合に発生します (一部の依存関係には、AWS Lambda とは異なるシステムでコンパイルされるネイティブ コードがあるため)。

AWS にアップロードする前にモジュールをパッケージ化する前に、AWS Lambda のような環境で依存関係をセットアップするdocker run -v "$PWD":/var/task lambci/lambda:build-nodejs6.10代わりに実行します。npm install

于 2017-12-21T13:22:22.340 に答える