gpt4 book ai didi

amazon-web-services - 您可以在动态计时器上触发 AWS Lambda 吗?

转载 作者:行者123 更新时间:2023-12-04 00:16:04 24 4
gpt4 key购买 nike

有没有办法在动态计时器上触发 AWS Lambda?目前,我正在利用预定事件来触发 lambda,但这是一个设置的计时器。有没有办法动态设置从 Lambda 内部触发 Lambda 的时间?

这里的想法是这个 Lambda 进行特定的检查并执行代码以知道它应该何时运行(因为我只希望这个 lambda 在它需要时运行)。我想 1) 确定下一次需要运行的时间和 2) 从 Lambda 代码中设置时间。

我看到有很多资源用于触发 Lambda 函数(SNS、Kinesis 等),但我似乎找不到动态启动的好方法。

最佳答案

这可以通过设置 CloudWatch 事件规则来触发您的 Lambda 函数来完成。每次调用 Lambda 函数时,函数都需要确定其下一次运行时间并适本地修改事件规则。

var AWS = require("aws-sdk");

exports.handler = function(event, context) {
var cloudwatchevents = new AWS.CloudWatchEvents();
var intervals = Array(3, 5, 7);
var nextInterval = intervals[Math.floor(Math.random()*intervals.length)];
var currentTime = new Date().getTime(); // UTC Time
var nextTime = dateAdd(currentTime, "minute", nextInterval);
var nextMinutes = nextTime.getMinutes();
var nextHours = nextTime.getHours();

// =================================
// DO YOUR WORK HERE
// =================================

var scheduleExpression = "cron(" + nextMinutes + " " + nextHours + " * * ? *)";
var params = {
Name: "YOUR CLOUDWATCH EVENT RULE NAME",
ScheduleExpression: scheduleExpression
};
cloudwatchevents.putRule(params, function(err, data) {
if (err) {
console.log(err, err.stack);
}
else {
console.log(data);
}
})
};

var dateAdd = function(date, interval, units) {
var ret = new Date(date); // don't change original date
switch(interval.toLowerCase()) {
case 'year' : ret.setFullYear(ret.getFullYear() + units); break;
case 'quarter': ret.setMonth(ret.getMonth() + 3*units); break;
case 'month' : ret.setMonth(ret.getMonth() + units); break;
case 'week' : ret.setDate(ret.getDate() + 7*units); break;
case 'day' : ret.setDate(ret.getDate() + units); break;
case 'hour' : ret.setTime(ret.getTime() + units*3600000); break;
case 'minute' : ret.setTime(ret.getTime() + units*60000); break;
case 'second' : ret.setTime(ret.getTime() + units*1000); break;
default : ret = undefined; break;
}
return ret;
}

你应该能够用你自己的调度逻辑交换我的随机决定,并插入你需要的任何工作来代替我的评论。

您需要将事件规则的名称替换为我的代码段中的“YOUR CLOUDWATCH EVENT RULE NAME”。

博客的好问题: AWS Lambda Functions That Dynamically Schedule Their Next Runtime

关于amazon-web-services - 您可以在动态计时器上触发 AWS Lambda 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41557956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com