【问题标题】:Attach a specific event to a cloudwatch events rule将特定事件附加到 cloudwatch 事件规则
【发布时间】:2019-11-23 03:04:35
【问题描述】:

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

换句话说,附加一个 JSON 对象来触发lambdaName 函数的事件。那可能吗?我确信它必须是一件事,但我很难找到合适的文档。我目前正在使用适用于 Node.js 的 AWS 开发工具包进行开发。提前谢谢你。

【问题讨论】:

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


    【解决方案1】:

    如果发送到 Lambda 的对象是由其他 AWS 服务触发的,您不能对它进行任何修改,例如您有一个 S3 事件触发该函数。

    如果您使用 CloudWatch 规则触发事件,则可以分离并仅传递您可能需要的对象部分,但 AFAIK 您无法向对象注入任何新内容。

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

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

    编辑:如果您想通过按计划启动它来发送 json,请执行以下操作:

    1. 打开 CloudWatch,在左侧选择事件、规则。
    2. 点击创建规则
    3. 事件源下选择计划"。
    4. 选择 Fixed RateCron 表达式,了解触发函数的频率。
    5. 在目标下点击添加目标
    6. 选择您要启动的功能
    7. Configure input 下选择 Constant (JSON text) 并输入您想要发送到函数的任何 JSON。

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

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

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

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

    【讨论】:

    • 这可能正是我真正需要的。你能告诉我更多关于最后一点的信息吗?
    • 你是我的英雄。谢谢。
    【解决方案2】:

    所以正如 JeffR 所说,你不能将它添加到触发器中,但是

    在调用 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)
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-15
      • 2020-02-04
      • 1970-01-01
      • 2019-02-04
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多