【问题标题】:How to pass input json along with event data in AWS lambda如何在 AWS lambda 中传递输入 json 和事件数据
【发布时间】:2017-11-19 03:23:05
【问题描述】:

我想将一些输入 json 连同事件触发数据一起传递给 AWS lambda 函数。

因此,当我使用 Cloudwatch 事件配置 AWS lambda 并将输入目标添加为常量时,即 {"job_name":"job1"}

现在当我在 lambda 事件数据中执行以下代码时

print(str(event))

output:{"job_name":"job1"}

if i say event['Records'] lambda throws error as Keyerror 

那么如何将输入与实际事件数据一起传递

【问题讨论】:

  • 为什么不访问这样的事件对象:event['job_name']?如果您已使用常量 JSON 事件输入配置 CloudWatch 规则,则此常量数据将用作事件数据。如果您只提供{ "job_name":"job1"} 作为事件数据,那么事件数据中的唯一键是event['job_name']
  • @shesse 您的评论就是答案。您应该将其更改为答案。

标签: python-3.x aws-lambda


【解决方案1】:

如果您使用 CloudWatch 规则并提供常量 JSON 作为目标的事件输入,它将覆盖实际的 CloudWatch 事件。来自cli documentation for put-target

如果 Input 以有效 JSON 的形式指定,则匹配的事件将被此常量覆盖

这意味着在您的情况下,您应该能够使用event['job_name'] 访问它。

This question 和你的很相似。

【讨论】:

  • 但我的问题是我能够访问 lambda 中的输入 json,但我丢失了实际的事件数据,即..我想验证 lambda 中的事件是什么,比如 s3 或 cron..所以当我说lambda 中的 event['Records'] 它抛出 Keyerror,因为常量 json 替换了匹配的事件。我需要同时获取匹配的事件数据和 inoput json
  • 在这种情况下,您应该使用 InputTransformer 并使用 JSON 字符串作为模板。从我上面链接的文档中:“如果指定了 InputTransformer,则从事件中提取一个或多个指定的 JSONPath,并将其用作模板中的值,您将其指定为目标的输入。” (这也可以在 CloudWatch 控制台 UI 中设置和使用)
  • 我也可以将它用于 S3 事件吗?我的意思是我也想在 s3 事件上传递输入 JSON
  • 您可以通过添加CloudWatch rule to match event patterns 对事件做出反应。如需更多 detailed list of supported events see here 或查看 CloudWatch 规则的 AWS 控制台。但是 afaik,这与注册可以直接调用 Lambda 函数的事件源不同,因此据我所知,它可能不支持相同的事件类型。
猜你喜欢
  • 1970-01-01
  • 2023-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多