libffi-d78936b1.so.6.0.4:无法打开 AWS Lambda 函数上的共享对象文件错误
Posted
技术标签:
【中文标题】libffi-d78936b1.so.6.0.4:无法打开 AWS Lambda 函数上的共享对象文件错误【英文标题】:libffi-d78936b1.so.6.0.4: cannot open shared object file Error on AWS Lambda function 【发布时间】:2018-12-15 13:49:57 【问题描述】:我正在尝试使用 watson_developer_cloud sdk 部署 python Lambda 包。密码学是这个包拥有的众多依赖项之一。我已经在 Linux 机器上构建了这个包。我的包也包括 .libffi-d78936b1.so.6.0.4 隐藏文件。但是我的 lambda 函数仍然无法访问它。我仍然收到“libffi-d78936b1.so.6.0.4:无法打开共享对象文件”错误。 我已经在 Vagrant 服务器上构建了我的包,使用这里的说明:https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example-deployment-pkg.html#with-s3-example-deployment-pkg-python
确切的错误:
Unable to import module 'test_translation': libffi-d78936b1.so.6.0.4: cannot open shared object file: No such file or directory
请注意,正如solution 中所述,我已经使用 zip -r9 $DIR/lambda_function.zip . 而不是 * 创建了我的包。但它仍然不适合我。
任何方向都是高度可观的。
【问题讨论】:
【参考方案1】:libffi-d78936b1.so.6.0.4
位于名为 .libs_cffi_backend
的隐藏文件夹中。
所以要在你的 lambda zip 中添加这个隐藏文件夹,你应该这样做:
zip -r ../lambda_function.zip * .[^.]*
这将在上面的目录中创建一个名为 lambda_function.zip
的 zip 文件,其中包含当前目录中的所有文件(第一个 *
)以及以 .*
开头但不以 ..*
开头的所有文件([^.]
)
【讨论】:
没错,隐藏文件夹.libs_cffi_backend
错误地没有包含在压缩文件中。因此,如果您在压缩过程之前复制文件,请不要忘记这样做:cp -r /path/origin/. /path/destiny/
.【参考方案2】:
在这种情况下,我会花一些时间设置本地 SAM 环境,以便您可以:
1 - 调试您的 Lambda
2 - 检查正在打包的内容和文件层次结构
https://docs.aws.amazon.com/lambda/latest/dg/test-sam-cli.html
或者,您可以删除此导入并检测您的 lambda 函数以打印它“看到”的一些文件和目录。
我强烈建议您尝试一下 SAM,因为它不仅会使这种调试方式更容易,而且您需要在以后执行的任何进一步测试。 Lambda 很难调试。
【讨论】:
安装docker和SAM,我肯定要检查安装权限。如果有一种解决方法可以让 Lambda 函数使用共享库,那就太好了。【参考方案3】:有点晚了,我会评论弗兰克的回答,但声誉不够。
我在我的部署包中包含了隐藏目录.libs_cffi_backend
,但由于某种原因,Lambda 找不到位于其中的libffi-d78936b1.so.6.0.4
文件。
将此文件复制到与我的 lambda 处理程序相同的“根”级目录后,它能够加载依赖项并执行。
另外,确保部署包中的所有文件都是可读的chmod -R 644 .
【讨论】:
以上是关于libffi-d78936b1.so.6.0.4:无法打开 AWS Lambda 函数上的共享对象文件错误的主要内容,如果未能解决你的问题,请参考以下文章