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