[英]How can I programmatically schedule an AWS lambda function to run X amount of time after an event?
[英]Cloudwatch custom event triggered instantly even after passing schedule time AWS
我正在尝试在 Node js 中使用 aws cloudwatch 事件进行任务调度,因此,我为此创建了一个 cloudwatch 事件规则,然后我添加了一个 lambda function 作为目标。 我在这里使用事件模式来创建 cloudwatch 事件规则,而不是预定表达式。 现在我试图在预定的时间向它添加事件,但是一旦将事件放在 cloudwatch 上,事件就会立即触发。 我不知道为什么会这样,我研究了很多,但没有找到任何相关的东西。
我使用这些官方文档作为参考:- https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudWatchEvents.html#putEvents-property https://docs.aws.amazon.com/sdk-for- javascript/v2/developer-guide/cloudwatch-examples-sending-events.html
我是 AWS 新手,请在这里帮助我。
这是执行上述操作的代码。
var params = {
Name: 'DEMO_EVENT',
RoleArn: 'iamroleArn',
EventPattern: JSON.stringify({
source: ['myapp.events'],
}),
State: 'ENABLED'
};
cwevents.putRule(params, function(err, rule) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", rule.RuleArn);
var params = {
Rule: 'DEMO_EVENT',
Targets: [
{
Arn: 'lambda function arn',
Id: "default"
}
]
};
cwevents.putTargets(params, function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
var params = {
Entries: [
{
Detail: JSON.stringify({
"meetingNo": "82565852285"
}),
DetailType: 'meeting',
Resources: [
rule.RuleArn
],
Source: 'myapp.events',
Time: new Date("2022-01-07T08:00:00Z"), // here I am sending the schedule time in utc
}
]
};
cwevents.putEvents(params, function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data.Entries);
}
});
}
});
}
});
这是预期的行为。 PutEvents
立即放置事件。 Time
参数不是一种调度机制,而是调用者的一个选项,用于提供不同于PutEvents
调用时间的时间戳。
EventBridge(以前称为 CloudWatch Events)通过PutRule Command 支持 cron 表达式和 rate 表达式。
EventBridge PutRule计划与定期重复计划一起使用。 例如,带有0/15 * * *? *
的规则 0/15 * * *? *
只要启用规则, cron 表达式将每天以每小时 4 次的速度生成具有通用负载的事件。
如果您希望在任意时间引发具有自定义详细信息的事件(例如,在 5 天内对此订单记录执行某些操作;或在每个用户的生日发送事件),那么预定的 EventBridge 规则是不够的。 对于此类“延迟交付”场景,您可以使用计划的事件规则来定期轮询数据存储以获取到期交付。 例如, PollingLambda
可以反过来为每个即将到来的生日引发一个带有{type:"HappyBirthday", name:"Zaphod", email:...}
有效负载的自定义事件,第二个规则将发送到SendBirthdayGreetingLambda
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.