首页 文章

AWS Lambda计划 - 我们可以在lambda中禁用/启用计划吗?

提问于
浏览
0

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

我的问题是关于安排 . 我可以安排Lambda1以所需频率运行(比如说每10分钟一次) . 如何安排读取队列的lambda?我可以安排每n分钟运行一次,但是一旦队列为空,就不需要执行它直到一天结束 . 我可以以某种方式从lambda函数中禁用AWS lambda计划吗?如果不是 - 还有什么选择?

3 回答

  • 0

    您需要队列(SQS)功能吗?如果不是,我建议你使用SNS(与kinesis流相比它也更便宜),它可以直接触发lambdas . 这样你就可以避免让lambda看到队列然后触发其他lambdas,这对我来说就像是一个反模式 .

    注意:如果您应该使用SNS,那么您的lambdas必须是幂等的,因为SNS在AWS内部至少有一次保证(您可能最终收到多次消息) .

  • 1

    SQS无法直接触发Lambda . Lambda必须使用Cloudwatch Timer轮询SQS . 但我知道这并不能解决你的问题 . 您可以尝试一种选择,但我不能将其视为最佳选择,并且它不具有成本效益 .

    将消息发布到SQS时,在SQS中添加触发器,将消息发布到SNS . 从SNS开始,lambda函数将被触发或更好,您可以直接将消息发布到SNS并触发Lambda .

    另一个更好的选择是你使用 kinesis . 因为通过创建分片并导致批处理更具成本效益 . 它也有Lambda的触发器 .

  • 0

    是的,您必须使用AWS SDK,特别是 CloudWatchEvents 类的方法 enableRule()disableRule() (您将需要 events:DisableRuleevents:EnableRule 的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
      });
    };
    

    要查看规则列表,请转至https://console.aws.amazon.com/cloudwatch/home#rules .

相关问题