AWS Событие CloudWatch не запускается - PullRequest
0 голосов
/ 22 января 2020

Я попытался создать правило события cloudwatch с помощью приведенного ниже кода. Тем не менее, это не похоже на работу. Я проверил AWS События CloudWatch, и там есть правило с моей прикрепленной лямбда-функцией Однако событие никогда не запускается так, как должно. Как я могу решить эту проблему?

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();
          }
        });
    });
}

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Полагаю, вам нужно дать разрешение на запуск лямбда-функции из событий CloudWatch (ваше правило). Взгляните на этот учебник.

Вы должны сделать это либо через CLI, либо из AWS API языка. Например:

aws lambda add-permission \
--function-name LogScheduledEvent \
--statement-id my-scheduled-event \
--action 'lambda:InvokeFunction' \
--principal events.amazonaws.com \
--source-arn arn:aws:events:us-east-1:123456789012:rule/my-scheduled-rule
0 голосов
/ 22 января 2020

Я не уверен, если вы уже знаете, расписание cron, которое вы устанавливаете для своих лямбда-функций, выполняется в UT C время. Например, если вы укажете 17:00, это будет 17:00 UT C время. Возможно, вы проверяете журналы до того, как он запустится.

Лямбда-разрешения для входа в cloudwatch

Лямбда должна иметь разрешение для входа в cloudwatch. в противном случае лямбда-функция не будет добавлять логи в cloudwatch. вот политика, к которой вы можете обратиться.

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

Ссылка:

Невозможно получить AWS Лямбда-функция для регистрации (вывода текста) в CloudWatch

надеюсь, это поможет.

...