我有3套AWS lambda功能(卷备份监控功能)。我创建了3个函数,这样每个函数只有1个循环,这样执行时间(和计费)就更少了。每个lambda函数都会在SQS中调用下一个lambda函数。我还有一个lambda函数,它从队列中获取消息并执行请求的lambda函数。
我的问题是关于日程安排。我可以安排Lambda1以所需频率运行(比如说每10分钟一次)。如何安排读取队列的lambda?我可以安排每n分钟运行一次,但是一旦队列为空,就不需要执行它直到一天结束。我可以以某种方式从lambda函数中禁用AWS lambda计划吗?如果不是 - 还有什么选择?
答案 0 :(得分:1)
您需要队列(SQS)功能吗?如果不是,我建议你使用SNS(与kinesis流相比它也更便宜),它可以直接触发lambdas。这样你就可以避免让lambda看到一个队列然后触发其他lambdas,这对我来说就像一个反模式。
注意:如果你应该使用SNS,你的lambda必须是幂等的,因为SNS在AWS内部至少有一次保证(你可能最终收到多次消息)。
答案 1 :(得分:0)
SQS无法直接触发Lambda。 Lambda必须使用Cloudwatch Timer轮询SQS。但我知道它并没有解决你的问题。您可以尝试一种选择,但我不能将其作为最佳选择,并且它不具有成本效益。
在将消息发布到SQS时,在SQS中添加将发布的触发器 消息给SNS。从SNS现在将触发lambda函数或 更好的是你可以直接将消息发布到SNS并触发 LAMBDA。
另一个更好的选择是你选择kinesis
。因为通过创建分片并且导致批处理它更具成本效益。它也有Lambda的触发器。
答案 2 :(得分:0)
是的,您必须使用AWS SDK,特别是enableRule()
类的方法disableRule()
和CloudWatchEvents
(您需要events:DisableRule
和{{1的IAM权限) }}。
停用规则的示例代码:
events:EnableRule
要查看规则列表,请转到https://console.aws.amazon.com/cloudwatch/home#rules。