【问题标题】:How to use the package written by another language in AWS Lambda?如何在 AWS Lambda 中使用其他语言编写的包?
【发布时间】:2018-04-07 05:40:25
【问题描述】:

我想在 AWS Lambda 导入和使用 python 的数据集包。数据集包是关于 MySQL 连接和执行查询的。但是,当我尝试导入它时,出现了错误。

“libmysqlclient.so.18:无法打开共享对象文件:没有这样的文件或目录”

我认为问题是因为 MySQL 客户端包是必需的。但是,AWS Lambda 的机器上没有 MySQL 包。

如何添加第三方程序以及如何链接?

【问题讨论】:

  • 您必须随身携带所有依赖项。所以你要导入的包也应该包含 mysql 包。

标签: mysql python-2.7 amazon-web-services aws-lambda


【解决方案1】:

你应该在你的 lambda 文件夹中安装你的包:

$ pip install YOUR_MODULE -t YOUR_LAMBDA_FOLDER

然后,将整个目录压缩成一个 zip 文件以上传到 lambda 中。

【讨论】:

    【解决方案2】:

    您需要做的是在您的 lambda 包中包含所需的二进制文件。

    您需要使用pip 并创建一个隔离环境。您上传到 lambda 的 zip 需要包含 python2.7/site-packages(使用 pip 安装的那些)。

    现在存在与操作系统相关的依赖的极端情况。 这有一个棘手的解决方案。 在这些情况下,您必须生成一个 amazon linux ec2 实例才能构建/获取这些依赖项并将它们与您的 lambda 打包。 打包 lambda 后,您可以关闭 ec2 实例。 如果 virtualenv 不够用,请查看 this 指南。

    【讨论】:

    • 这是“操作系统相关依赖的极端情况”之一。
    【解决方案3】:

    这是一个依赖于操作系统的系统文件。我猜你已经成功安装了 Python mysql 客户端,但你仍然需要系统 mysql 客户端,它在你的系统上似乎与 lambda 版本不同。虽然在official lambda image 上构建您的虚拟环境肯定会解决此问题,但您可能将您自己的系统文件副本复制到您的 lambda zip 文件中。

    我找到了我的

    locate libmysqlclient.so.18
    

    注意:根据您的系统,最后的版本号可能会有所不同。使用您收到的错误中的版本。

    使用

    在我的 zip 文件的顶层添加该文件
    cd \path\from\locate\to\libmysqlclient
    

    紧随其后

    zip -u \path\to\lambda\zip\file.zip libmysqlclient.so.18
    

    为我工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      • 2018-09-15
      • 1970-01-01
      • 2011-03-09
      相关资源
      最近更新 更多