【问题标题】:Unable to pass custom values to AWS Lambda function无法将自定义值传递给 AWS Lambda 函数
【发布时间】:2020-09-26 09:55:42
【问题描述】:

我正在尝试通过 CloudWatch 中的规则集以 JSON 格式将自定义输入传递给我的 lambda 函数(Python 3.7 运行时)。 但是,我在正确访问输入中的元素时遇到了困难。

CW 规则如下所示。

这是 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


【解决方案1】:

我正在根据 cmets 写这个答案。 最初编写的语法是有效的,我能够正确访问数据。需要实现超时,因为函数不断达到该阈值,随后迭代发生了一些变化。

【讨论】:

    猜你喜欢
    • 2017-12-30
    • 1970-01-01
    • 2016-04-10
    • 2017-12-23
    • 2021-12-13
    • 2019-04-03
    • 2017-10-06
    • 2019-08-30
    • 2019-11-25
    相关资源
    最近更新 更多