如何使用AWS Lambda中另一种语言编写的包?

时间:2017-02-16 07:30:46

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

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

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

我认为问题是因为MySQL客户端包是必要的。但是,AWS Lambda的机器中没有MySQL软件包。

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

3 个答案:

答案 0 :(得分:0)

您应该将软件包安装在lambda文件夹中:

$ pip install YOUR_MODULE -t YOUR_LAMBDA_FOLDER

然后,压缩整个目录以压缩上传到lambda。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

这是一个os依赖的系统文件。我猜你成功安装了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

为我工作。