我有多个事件时间表附加到一个 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-myfunction2months-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 的整个事件。所以在函数中(如果是python)可以像event["Key"]
这样访问。
另一件让我困惑的事情是,Input 似乎直接连接到它在其下创建的特定 lambda。在测试中,我部署了带有配置了输入的事件的堆栈,然后为了进行快速测试,我将其中一个事件(CloudWatch 规则)附加到不同 lambda,以尝试读取它创建的事件。这样做不起作用,另一个 lambda 在计划上被触发,但发送给它的事件对象没有输入 - 它是一个常规的 CloudWatch 计划事件对象。
最佳答案
您似乎想知道哪个计划触发了 Lambda 函数。好吧,您实际上要求的是费率,但希望知道哪个时间表触发了它也同样好。
添加 Lambda 触发器时,您可以指定一个常量,该常量将通过事件
传递。您可以使用它来触发所需的行为。
关于amazon-web-services - 如何获取触发 lambda 的计划的速率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62055332/