AWS Lambda python库函数错误

Posted

技术标签:

【中文标题】AWS Lambda python库函数错误【英文标题】:AWS Lambda python library function error 【发布时间】:2018-07-11 02:05:02 【问题描述】:

我正在尝试使用 AWS Lambda 连接到 AWS RDS。我将 Pymysql 安装到该目录并使用下面的代码和库构建了包

import sys
import pymysql

def lambda_handler(event, context):
    string=""
    try:
            connection = pymysql.connect(host='',
                                            user='',
                                            password='',
                                            db='',
                                            charset='',
                                            cursorclass=pymysql.cursors.DictCursor)
            cur = connection.cursor(pymysql.cursors.DictCursor)
            cur.execute("select * from table")
            for row in cur:
                    print(row['col'])
                    string+=row['col']
    except Exception as e:
            print("MySQL error: %s" % (e.args[0]))

    return string

print(lambda_handler("",""))

在我的机器上,上面的代码有效,但在 AWS 中,它显示

MySQL 错误:模块 'pymysql' 没有属性 'connect'

我检查了pymysql只在有代码的目录中可用,所以我不知道为什么我无法使用connect方法。 两个 Python 版本都是一样的。

编辑:

Traceback (most recent call last):
  File "/var/task/lambda.py", line 7, in lambda_handler
    connection = pymysql.connect(host='',
AttributeError: module 'pymysql' has no attribute 'connect'

【问题讨论】:

请包含完整的回溯 @roganjosh 完成 :(我希望它可能对这个问题有更多的了解,但我没有从中得到任何东西 @roganjosh 是的,当你问我有一个“当然”的时刻,但也很失望...... 你从print(dir(pymysql))得到什么?我怀疑您在 PATH 上的某个位置命名了另一个脚本 pymysql.py。你在dir 中认出了你创造的东西吗? 【参考方案1】:

试试zip -r package.zip *

我怀疑你只压缩了 pymysql 模块的顶层,而不是其子目录的内容

上传到 lambda 的 AWS 文档很差。

【讨论】:

存在子目录和文件。我也面临同样的问题。【参考方案2】:

    首先在本地机器上创建一个目录,例如:“package-dir”

    现在将 pymlsql 安装到您创建的目录路径“pip install pymlsql -t path/to/package-dir”

    将你的python脚本粘贴到同一个目录

    选择目录中的所有项目并创建一个 zip 文件。不要压缩目录本身,这很重要

    在 lambda 中上传 zip 文件,它应该可以工作

    还可以看到处理程序名称是“python_script_name.lambda_handler”。 例如:如果您的脚本文件名是“lambda_function.py”,那么您的处理程序应该是“lambda_function.lambda_handler”

【讨论】:

以上是关于AWS Lambda python库函数错误的主要内容,如果未能解决你的问题,请参考以下文章

在多个 AWS Lambda 中处理相同的函数名称

使用 AWS Lambda 连接到 Oracle RDS 时出现错误 (DPI-1047)

适用于 postgreSQL 的 AWS Lambda 函数 NodeJs - 超时错误

在 AWS Lambda 中导入 Paramiko 的问题

如何在 AWS Lambda 中使用 Python 自定义包

AWS Lambda 函数帮助