【发布时间】:2016-08-09 17:48:45
【问题描述】:
当我上传 zip 文件时,AWS 成功创建了 lambda 函数。但是当我测试它时它给出了这个错误。
{
"errorMessage": "Unable to import module 'amazonSNS'"
}
以下是我创建的 zip 文件的内容。我尝试将 zip 文件的名称更改为“amazonSNS”以匹配 amazonSNS.py 文件,但没有帮助,同样的问题。
Lambda 函数配置中的 Lambda 处理程序设置为“amazonSNS.handler”,其中 amazonSNS 是文件名,handler 是需要调用的函数名,正如他们在文档中所指示的那样。
这里是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 请求 ID:76a61551-052a-11e6-b466-8fa0769ac309 报告请求 ID: 76a61551-052a-11e6-b466-8fa0769ac309 持续时间:0.33 毫秒 持续时间:100 毫秒
更新
我从“site-package”文件夹中添加了一些我认为是 MySQLdb 包的一部分的文件,这是 zip 文件的当前内容。
在此之后,新的错误日志是。
START RequestId:c0715d9a-0531-11e6-9409-a3b194fd4afd 版本:$LATEST 无法导入模块“amazonSNS”:libmysqlclient.so.18:无法打开 共享对象文件:没有这样的文件或目录
END 请求 ID:c0715d9a-0531-11e6-9409-a3b194fd4afd 报告请求 ID: c0715d9a-0531-11e6-9409-a3b194fd4afd 持续时间:0.35 毫秒 持续时间:100 毫秒内存大小:128 MB 使用的最大内存:22 MB
【问题讨论】:
-
我会强烈建议在开发 lambda 函数时始终使用虚拟环境。 Tutorials 的用法就在那里。这允许您使用完全您需要的软件包来构建和测试您的软件。然后,您只需将
pip --version的内容(在激活 virtualenv 的情况下运行)复制到您上传的 zip 文件的顶级目录中,并确保您获得了所需的每个 (Python) 文件。 -
不幸的是,获取所有您需要的 Python 文件似乎并没有涵盖您对某些依赖于 系统的软件的基础> 文件。 @OmarZairi 的回答向您展示了一种解决方法,当不在您的 virtualenv 的
site-packages目录中的文件出现错误时,它应该是非常通用的。 -
刚刚意识到,如果您不使用 Pipenv 或 virtualenvwrapper,则使用
pip --version来识别 virtualenv 的site-packages目录的位置可能不起作用。无论如何,您可能应该使用其中之一。 -
这是来自亚马逊(坦率地说,通常很糟糕)官方文档中的info on the virtualenv strategy。
-
如果您花费大量时间创建 Lambda 进程,那么在与 lambda 进程相同的环境中创建的虚拟环境中测试它们可能是值得的,这可以通过创建 EC2 instance using the official image 来完成.
标签: python amazon-web-services lambda