【发布时间】:2020-09-26 09:55:42
【问题描述】:
我正在尝试通过 CloudWatch 中的规则集以 JSON 格式将自定义输入传递给我的 lambda 函数(Python 3.7 运行时)。 但是,我在正确访问输入中的元素时遇到了困难。
这是 lambda 函数的作用。
import sqlalchemy # Package for accessing SQL databases via Python
import psycopg2
def lambda_handler(event,context):
today = date.today()
engine = sqlalchemy.create_engine("postgresql://some_user:userpassword@som_host/some_db")
con = engine.connect()
dest_table = "dest_table"
print(event)
s={'upload_date': today,'data':'Daily Ingestion Data','status':event["data"]} # Error points here
ingestion = pd.DataFrame(data = [s])
ingestion.to_sql(dest_table, con, schema = "some_schema", if_exists = "append",index = False, method = "multi")
当我使用默认测试事件值测试事件时,print(event) 语句会打印默认测试值 ("key1":"value1"),但用于将数据添加到数据库 ingestion.to_sql() 的语法即来自输入的有效负载"Testing Input Data" 已成功插入数据库。
但是 lambda 函数在运行 event["data"] 处的函数时仍然显示错误作为 Key 错误。
1) 我是否以正确的方式访问常量 JSON 输入?
2) 如果不是,那么为什么尽管在该行代码中抛出了错误,但数据仍然按照预期的方式被摄取
3) 当函数按照调度表达式触发时,数据被摄取。当我测试事件时,它显示密钥错误。是不是与导致此错误的实际输入不相似的测试事件?
有很多关于如何获取输入的文档和文章,但我找不到任何显示如何访问函数内部输入的内容。我在这一点上被困了一段时间,这让我很沮丧,为什么没有记录在任何地方。 如果有人能让我清楚地了解这个过程,我将不胜感激。 提前致谢
编辑: 监控日志图片:
[ERROR] KeyError: 'data' Traceback(最近一次调用最后一次):文件“/var/task/test.py”
【问题讨论】:
-
对我来说看起来是正确的。确切的错误信息是什么
-
event["data"]是访问Test Input Data的正确方式。您指向的行不应该有任何错误,除非您的屏幕截图显示传递给函数的Constant字符串不正确。 -
我在编辑中添加了日志中的图片
-
您是使用 Lambda 控制台中的 Test 按钮运行该函数,还是由 CloudWatch 计划触发?
-
在您的屏幕截图中没有像 `KeyError: 'data' ` 这样的错误。您还增加了 lambda 的超时时间吗?似乎您正在达到 3 秒的默认时间。
标签: python amazon-web-services aws-lambda