将Python包部署到AWS Lambda

时间:2016-04-18 05:53:48

标签: python amazon-web-services lambda

AWS上传zip文件时成功创建lambda函数。但是当我测试它时,它会给出这个错误。

{
  "errorMessage": "Unable to import module 'amazonSNS'"
}

以下是我创建的zip文件的内容。我尝试将zip文件的名称更改为" amazonSNS"匹配amazonSNS.py文件,但没有帮助,同样的问题。

enter image description here

Lambda函数配置中的Lambda处理程序设置为" amazonSNS.handler"其中amazonSNS是文件名,处理程序是需要调用的函数名,正如文档中指示的那样。

以下是python文件的内容

import boto3
import MySQLdb

client = boto3.client("sns")
rds = boto3.client("rds")

def handler(event, context):
    conn = MySQLdb.connect("host", "username", "password", "database")
    cur = conn.cursor(MySQLdb.cursors.DictCursor)
    query = "select * from login.login limit 10"
    cur.execute(query)
    print cur.fetchall()
    print conn

这可能是什么问题?

这是日志输出

  

START RequestId:76a61551-052a-11e6-b466-8fa0769ac309版本:$ LATEST   无法导入模块' amazonSNS':没有名为_mysql的模块

     

END RequestId:76a61551-052a-11e6-b466-8fa0769ac309 REPORT RequestId:   76a61551-052a-11e6-b466-8fa0769ac309持续时间:0.33毫秒   持续时间:100毫秒

更新

我在" site-package"中添加了一些文件。我认为是MySQLdb包的一部分的文件夹,这是zip文件的当前内容。

enter image description here

在此之后,新的错误日志是。

  

START RequestId:c0715d9a-0531-11e6-9409-a3b194fd4afd版本:$ LATEST   无法导入模块' amazonSNS':libmysqlclient.so.18:无法打开   共享对象文件:没有这样的文件或目录

     

END RequestId:c0715d9a-0531-11e6-9409-a3b194fd4afd REPORT RequestId:   c0715d9a-0531-11e6-9409-a3b194fd4afd持续时间:0.35毫秒   持续时间:100毫秒内存大小:128 MB最大使用内存:22 MB

4 个答案:

答案 0 :(得分:4)

要解决此问题: 我搜索了libmysqlclient.so.20(最后的版本号可能不同)

find /. -name "libmysqlclient.so.20"

我的输出是

/./usr/lib/x86_64-linux-gnu/libmysqlclient.so.20

然后我将该文件复制到我的包

的根目录中
cp /usr/lib/x86_64-linux-gnu/libmysqlclient.so.20 <your package path>

答案 1 :(得分:1)

使用mysqlclient(适用于Python3的MySQLd fork)时遇到了这个问题。

由于我使用Zappa进行简单部署,解决方案很简单:只需切换到原始MySQLd软件包(但不支持Python 3):pip install mysql-python Zappa预先编译了version

答案 2 :(得分:0)

你是如何安装MySQLdb的? http://mysql-python.sourceforge.net/FAQ.html说:

  

ImportError:没有名为_mysql的模块   如果你看到这个,那么你在安装MySQLdb时可能会出错;重读(或读取)自述文件。 _mysql是与MySQL客户端库连接的低级C模块。

如果您还没有使用pip安装MySQLdb。

答案 3 :(得分:0)

我无法编译b以使其在Lambda中运行。相反,我切换到MySQL-python。我不确定性能,但至少可行。

P.S。我想知道为什么在亚马逊上没有关于建议的MySQL驱动程序的官方建议。至少我还没找到。