将特定事件附加到cloudwatch事件规则

时间:2019-11-21 15:14:36

标签: amazon-web-services aws-lambda amazon-cloudwatch

因此,假设我有一个cloudwatch规则,该规则每个星期一都会触发lambda函数lambdaName。它工作正常,但现在我想自定义事件,该事件将发送到该lambda函数以添加所需的数据。

换句话说,将一个JSON对象与触发lambdaName函数的事件一起发送。那可能吗?我敢肯定这一定是一件事情,但是我很难找到合适的文档。我目前正在使用适用于Node.js的AWS开发工具包进行开发。预先谢谢你。

2 个答案:

答案 0 :(得分:1)

如果发送给Lambda的对象是由另一个AWS服务触发的,则无法对其进行任何修改,例如,如果您有S3事件触发该函数。

如果您使用CloudWatch规则触发事件,则可以拆开并仅传递可能需要的对象部分,但是AFAIK不能将任何新东西注入到对象中。

我知道要在函数中获取其他数据的唯一方法是将Environment变量添加到函数中,或者让函数从Parameter存储中获取值。

如果您只想按计划手动触发函数,则可以指定在CloudWatch规则中发送的自定义json对象,但这听起来并不是您想要的。

编辑:如果要通过计划启动启动JSON,请执行以下操作:

  1. 打开CloudWatch,在左侧选择“事件”,在左侧选择规则。
  2. 点击创建规则
  3. 事件源下,选择时间表”。
  4. 选择固定利率 Cron表达式以触发该功能。
  5. 在“目标”下,单击“ 添加目标”。
  6. 选择要启动的功能
  7. 配置输入下,选择常量(JSON文本),然后输入要发送给函数的任何JSON。

执行该函数时,应将您指定的JSON作为“事件”对象发送。

请注意,对于#3,您还可以选择一个事件模式并在几乎所有API事件中触发它,但是您不能修改Event对象。您既可以发送完整的对象,也可以仅发送对象的特定片段,也可以发送完全不同的对象。

另请参阅:Use constant values in Cloudwatch event triggered Lambda functions

编辑2 :再次查看此内容,似乎您可以 修改事件。在上面的第7步中,还有一个 Input Transformer 选项,它看起来像您可以使用事件对象并将其变成一个新对象,包括您想要的任何新json。搜索“ aws cloudwatch规则输入转换器”,或查看此以获得更多信息:Tutorial: Input Transformer

答案 1 :(得分:0)

因此,正如JeffR所说,您不能将其添加到触发器BUT

您可以做的是在处理程序中调用Lambda函数之前,将需要的数据添加到事件中,然后将其传递给主处理程序,如下所示:

const yourFunction = require('yourFunction.js')

const funcHandler = (func) => {
    return (event, context, callback) => {

       // Query your data sources here ie event.whatever(body?) = ....
       func(event, context, callback)

    }
}

export const yourFunctionHandler = funcHandler(yourFunction)