【问题标题】:libffi-d78936b1.so.6.0.4: cannot open shared object file Error on AWS Lambda functionlibffi-d78936b1.so.6.0.4:无法打开 AWS Lambda 函数上的共享对象文件错误
【发布时间】: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 . 而不是 * 创建了我的包。但它仍然不适合我。

任何方向都是高度可观的。

【问题讨论】:

    标签: python-3.x amazon-web-services aws-lambda ibm-watson


    【解决方案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 .

    【讨论】:

      猜你喜欢
      • 2021-08-11
      • 2019-04-23
      • 2014-08-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      相关资源
      最近更新 更多