Amazon web services AWS Lambda计划-我们可以从Lambda中禁用/启用计划吗?

Amazon web services AWS Lambda计划-我们可以从Lambda中禁用/启用计划吗?,amazon-web-services,aws-lambda,scheduling,Amazon Web Services,Aws Lambda,Scheduling,我有3套AWS lambda功能(卷备份监控功能)。我创建了3个函数,这样每个函数只有1个循环,这样执行时间(和计费)就更少了。每个lambda函数调用SQS中的下一个lambda函数。我还有一个lambda函数,它从队列中提取消息并执行请求的lambda函数 我的问题是关于日程安排的。我可以安排Lambda1以所需的频率运行(比如每10分钟一次)。如何安排读取队列的lambda?我可以安排每n分钟运行一次,但一旦队列为空,就不需要在一天结束前执行它。我是否可以在lambda函数中禁用AWS l

我有3套AWS lambda功能(卷备份监控功能)。我创建了3个函数,这样每个函数只有1个循环,这样执行时间(和计费)就更少了。每个lambda函数调用SQS中的下一个lambda函数。我还有一个lambda函数,它从队列中提取消息并执行请求的lambda函数


我的问题是关于日程安排的。我可以安排Lambda1以所需的频率运行(比如每10分钟一次)。如何安排读取队列的lambda?我可以安排每n分钟运行一次,但一旦队列为空,就不需要在一天结束前执行它。我是否可以在lambda函数中禁用AWS lambda计划?如果没有-有什么替代方案?

SQS不能直接触发Lambda。Lambda必须使用Cloudwatch定时器轮询SQS。但我知道这不能解决你的问题。有一个选择你可以尝试,但我不能建议它是最好的选择,而且它不是一个成本效益高的选择

将消息发布到SQS时,在SQS中添加将发布消息的触发器 给SNS的消息。从SNS开始,lambda功能将被触发或 更好的是,你可以直接将消息发布到SNS并触发 拉姆达

另一个更好的选择是使用
kinesis
。因为通过创建碎片和成批处理更具成本效益。它还有Lambda的触发器。

您需要队列(SQS)功能吗?如果不是的话,我建议你使用SNS(与动觉流相比,它也便宜得多),它可以直接触发lambda。这样可以避免lambda查看队列,然后触发其他lambda,这对我来说就像是反模式


注意:如果你应该使用SNS,你的lambda必须是幂等的,因为SNS在AWS内部至少有一个保证(你可能会多次收到消息)。

是的,你必须使用AWS SDK,特别是
CloudWatchEvents
类的
enableRule()
disableRule()
(您需要对
事件:禁用规则
事件:启用规则
具有IAM权限)

停用规则的示例代码:

// rulename is the name of the CloudWatch Event rule, not the ARN
let deactivate_cloudwatch_rule = (rulename) => {
  let AWS = require('aws-sdk');
  let cwe = new AWS.CloudWatchEvents({ region: "us-east-1" });
  cwe.disableRule({ Name: rulename }, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else     console.log(data);           // successful response
  });
};
要查看规则列表,请转到