4

我正在测试我的 api 网关来调用 lambda 函数。我考试成功了。

然后我试图通过同一个 lambda 连接到 postgresql

   import json
   import psycopg2
    
    db_host = "hostname"
    db_port = 5432
    db_name ="db name"
    db_user ="user"
    db_pass ="password"
    
    def connect():
        conn = None
        try :
            conn = psycopg2.connect("dbname={} user={} host={} password={}".format(db_name,db_user,db_host,db_pass))
    except :
        print("connetion error")
    return conn


print("Loading function")
def lambda_handler(event, context):
    # paring query from the string 
    name = event['queryStringParameters']['name']
    action = event['queryStringParameters']['action']

print('name = '+name )
print('action = '+action)

# body of the response object 

transactionResponse = {}
transactionResponse['name'] = name
transactionResponse['action'] = action
transactionResponse['message'] = 'Lambda called from api_gateway'

# construting Http response

responseObject = {}
responseObject['statusCode'] = 200
responseObject['headers'] {}
responseObject['headers']['Content-Type'] = 'application/json'
responseObject['body'] = json.dumps(transactionResponse)

#  return the response object 

return responseObject

当我试图通过我得到的 API 端点触发它时

 Unable to import module 'lambda_function': No module named 'psycopg2'

然后我继续通过下载所需的包然后上传一个 zip 文件来构建我的 lambda 函数。

当我尝试调用相同的方法来触发我得到的 lambda

 Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'lambda_function'

不知道 lamda_function 是什么。

有人能建议我摆脱这种低迷吗?或为我提供一种通过 API 网关触发器中的 lambda 连接到 RDS 的方法

这是我的构建包 在此处输入图像描述

4

3 回答 3

1

问题不再存在。从https://github.com/jkehler/awslambda-psycopg2获取 psycopg2 构建库是为 python 3.6 构建的,并确保在将代码上传到 AWS lambda 时将名称更改为 psycopg2,选择 Python 运行时环境为 3.6,然后应该管用。

于 2020-07-09T03:46:24.873 回答
1

您应该从控制台检查 lambda 处理程序名称。这很可能是由于处理程序名称所指的原因,lambda_function.foobar但 zip 中 Lambda 的文件名不会被命名lambda_function.py

确保名称采用filename.function_name.

在此示例中,如果文件已命名lambda_function,则处理程序值应为lambda_function.lambda_handler.

目录结构当前不包含该psycopg2模块,因此仍然无法加载。

为了解决这个问题,以下解决方案适用:

  • 通过 pip install 添加依赖,然后再次压缩部署
  • 添加已安装此依赖项的 Lambda 层
于 2020-07-08T11:25:58.163 回答
0

您能否检查lambda_handler设置并确保它们已正确设置为代表您的函数:

在此处输入图像描述

于 2020-07-08T11:29:53.440 回答