我如何获得触发 lambda 的计划的速率?

How do I get the rate of the schedule that triggered a lambda?

我有多个事件时间表附加到一个 lambda:

  Events:
    1minute:
      Type: Schedule
      Properties:
        Schedule: rate(1 minute)
    2minute:
      Type: Schedule
      Properties:
        Schedule: rate(2 minutes)
    etc...

lambda 根据时间表做不同的事情。逻辑非常简单,因此将多个计划附加到同一个函数比创建多个单独的函数要简单得多。

我可以从事件中解析事件名称并使用它来确定日程安排。

虽然使用 sam 模板创建它们意味着它们最终的名称如下:

myapp-myfunction2minutes-ABC123XDJXKDF

我仍然希望它们是动态创建的。我不想设置静态名称,因为这会阻止多个堆栈同时存在,我希望它们完全命名空间和隔离。

我当然可以解析 myapp-myfunction2minutes-ABC123XDJXKDF,因为它足够可预测,但如果我可以添加一些具有任意元数据的其他字段就更好了,这样我就不必进行任何字符串解析了。支持吗?

编辑

在模板中配置如下:

  Events:
    1minute:
      Type: Schedule
      Input: '{"Key": "Value1"}'
      Properties:
        Schedule: rate(1 minute)
    2minute:
      Type: Schedule
      Input: '{"Key": "Value2"}'
      Properties:
        Schedule: rate(2 minutes)
    etc...

然后“输入”替换了发送到 lambda 的 整个 事件。所以在函数中(if python)可以访问像event["Key"].

另一件让我感到困惑的事情是 Input 似乎直接连接到它在其下创建的特定 lambda。在测试中,我部署了堆栈,这些事件配置了输入,然后为了进行快速测试,我将其中一个事件(CloudWatch 规则)附加到 different lambda 以尝试读取事件它创造了。这样做没有用,另一个 lambda 在计划中被触发,但发送给它的事件对象没有输入 - 它是一个常规的 CloudWatch 计划事件对象。

您似乎想知道哪个计划触发了 Lambda 函数。好吧,您实际上询问了费率,但希望知道哪个时间表触发了它也一样好。

添加 Lambda 触发器时,您可以指定一个 常量,它将通过 event 传递。您可以使用它来触发所需的行为。