因此,假设我有一个cloudwatch规则,该规则每个星期一都会触发lambda函数lambdaName
。它工作正常,但现在我想自定义事件,该事件将发送到该lambda函数以添加所需的数据。
换句话说,将一个JSON对象与触发lambdaName
函数的事件一起发送。那可能吗?我敢肯定这一定是一件事情,但是我很难找到合适的文档。我目前正在使用适用于Node.js的AWS开发工具包进行开发。预先谢谢你。
答案 0 :(得分:1)
如果发送给Lambda的对象是由另一个AWS服务触发的,则无法对其进行任何修改,例如,如果您有S3事件触发该函数。
如果您使用CloudWatch规则触发事件,则可以拆开并仅传递可能需要的对象部分,但是AFAIK不能将任何新东西注入到对象中。
我知道要在函数中获取其他数据的唯一方法是将Environment变量添加到函数中,或者让函数从Parameter存储中获取值。
如果您只想按计划手动触发函数,则可以指定在CloudWatch规则中发送的自定义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)