首页 > 解决方案 > AWS CloudWatch 事件未触发

问题描述

我尝试使用以下代码创建 cloudwatch 事件规则。但是,它似乎不起作用。我检查了 AWS CloudWatch Events,我附加了 lambda 函数,规则就在那里。但是,该事件永远不会被触发。我该如何解决这个问题?

async function createCloudWatchEvent(zip){
    if(zip){
        try{
            await putRule(zip);
            await putTarget(zip);
        } catch (e) {
            console.log(`Can't create [${zip}] cloudwatch event`);
        }
    }
}

function putRule (ruleName) {
    let cloudWatchParams = {
      Name: ruleName, // required
      ScheduleExpression: 'rate(1 minute)',
      State: 'ENABLED'
    };

    return new Promise(resolve => {
        cloudwatchevent.putRule(cloudWatchParams, async function(err, data) {
          if(err){
            console.log(err);
            resolve(err);
          }else{
            console.log('Successfully created rule: ' + ruleName);
            resolve();
          }
        });
    });
}

function putTarget (ruleName) {
    let cloudWatchParams = {
      Rule: ruleName, // required
      Targets: [ // required
        {
          Arn: 'xxxxxxxxxx',
          Id: 'Determine_State',
          Input: JSON.stringify({zip: ruleName})
        }
      ]
    };

    return new Promise(resolve => {
        // Attach "Determine_State" target to cloudwatch event
        cloudwatchevent.putTargets(cloudWatchParams, function(err, data) {
          if(err){
            console.log(err);
            resolve(err);
          }else{
            console.log('Successfully attached target [' + cloudWatchParams.Targets[0].Id + '] to rule: ' + ruleName);
            resolve();
          }
        });
    });
}

标签: amazon-web-servicesamazon-cloudwatch

解决方案


我不确定您是否已经知道,您为 lambda 函数设置的 cron 计划是 UTC 时间。例如,如果您指定下午 5 点,则为 UTC 时间下午 5 点。也许您在执行之前正在检查日志。

登录到 cloudwatch 的 Lambda 权限

lambda 应该有权登录到 cloudwatch。否则 lambda 函数不会将日志添加到 cloudwatch。这是您可以参考的政策。

{
    "Statement": [
        {
            "Action": [
                "logs:CreateLogGroup",
                 "logs:CreateLogStream",
                 "logs:PutLogEvents"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:logs:*:*:*"
        }
    ]
} 

参考:

无法让 AWS Lambda 函数记录(文本输出)到 CloudWatch

希望这可以帮助。


推荐阅读