繁体   English   中英

Cloudwatch 自定义事件即使在经过预定时间 AWS 后也会立即触发

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM