0

我正在尝试使用 Lambda 连接到 MongoDB-Atlas。在本地代码运行完美,但使用 AWS Lambda 我得到与 SSL 依赖相关的错误(我认为......)。

我想使用mongodump,所以我添加了最新版本的mongodump二进制,版本r3.6.3,我还添加了libssl.so.1.0.0、libsasl2.so.3、libgo.so.9和libcrypto.so.1.0 .0. 它们都位于我上传到 Lambda 的文件夹的根目录中。

这就是我在代码中的相关 mongo 查询的样子:

mongodump -d test -u adminUser -p "notmyrealpassword" -o "/tmp/FriApr062018_1523037710445/" --authenticationDatabase admin --ssl --port 27017 -h "host0.mongodb.net,host1.mongodb.net,host2.mongodb.net"

这是文件夹的样子:

index.js  libcrypto.so.1.0.0  libgo.so.9  libsasl2.so.3  libssl.so.1.0.0  mongodump  node_modules  package.json

当我尝试使用 Lambda 运行它时,我收到了这个错误(同样,代码在本地机器上运行良好):

/var/task/mongodump: /var/task/libssl.so.1.0.0: no version information available (required by /var/task/mongodump)
/var/task/mongodump: /var/task/libcrypto.so.1.0.0: no version information available (required by /var/task/mongodump)
4

1 回答 1

0

您需要将LD_LIBRARY_PATH环境变量设置为包含共享对象文件的目录,以便 mongodump 知道在哪里可以找到它们。有关告诉 mongodump 在哪里查找共享对象文件的其他方法,请参阅此 Stack Exchange 答案编辑 - 看起来它能够找到共享对象,只是不运行它们,所以这可能不是问题。

如果您在 mongodump 能够找到它们后出现错误,请仔细检查您的共享对象文件是否构建在与当前使用的运行 Lambda 函数的Amazon Linux AMI兼容的环境中。

no version information available错误和关于该错误含义的 StackOverflow 答案来看,听起来 OpenSSL libssl 和 libcrypto 共享对象可能是使用比 Amazon Linux AMI 上可用的版本更大的 major.minor.patch 版本构建的。因此,您可能需要自己构建它们,以便它们在目标操作系统中兼容。本文讨论了一些合理的方法来做到这一点。它适用于 python 项目,但也应该适用于构建 C 模块。

于 2018-04-15T21:08:15.967 回答