Добавление CloudWatchEvents к лямбда-функции AWS - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть 2 лямбда-функции AWS, принадлежащие одному и тому же производителю счета и функции потребителя.Я хочу, чтобы производитель планировал запуск потребителя в указанное время.Когда я проверяю в CloudWatch Events, события создаются, но потребитель не запускается.Я использую эту ссылку

Код производителя

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

var cwevents = new AWS.CloudWatchEvents({apiVersion: '2015-10-07'});

var params_for_rule = {
  Name: 'DEMO_EVENT',
  ScheduleExpression: 'cron(0/3 * * * ? *)',
  State: 'ENABLED'  
};

var params_for_target = {
  Rule: 'DEMO_EVENT',
  Targets: [
    {
      Arn: 'consumer',
      Id: 'default',
    }
  ]
};

exports.handler = async (event, context, callback) => {

  const response = {
    statusCode: 200,
    body: JSON.stringify('Hello from Lambda!'),
  };

  cwevents.putRule(params_for_rule, function(err, data){
    if(err){
      console.log("Not Working");
    }
    else{
      console.log("Working");
      cwevents.putTargets(params_for_target, function(err, data){
        if(err){
          console.log("Not Working");
        }
        else{
          console.log("Working");
        }
      });
    }
  });
};

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Чтобы добавить событие облачного наблюдения, нам нужно добавить определенные разрешения, используя метод addPermission .Вот документ .

Вот пример кода.

cwevents.putRule(params_for_rule, function(err, data){
    if(err){
      console.log("Not Working",data);
    }
    else{
      console.log("Working",data);
      lambda.addPermission(lambdaPermission, function(err, data){
        if(err){
          console.log(err);
        }
        else{
          console.log(data);
          cwevents.putTargets(params_for_target, function(err, data){
            if(err){
              console.log("Not Working",data);
            }
            else{
              console.log("Working",data);
            }
          });
        }
      }); 
    }
  });
0 голосов
/ 22 февраля 2019

Вы звоните callback до того, как функция putTargets вернется.
Ваш код callback должен быть выполнен после успешного возврата putTargets.

cwevents.putRule(params_for_rule, function(err, data){
    if(err){
      console.log("Not Working");
    }
    else{
      console.log("Working");
      cwevents.putTargets(params_for_target, function(err, data){
        if(err){
          console.log("Not Working");
          callback(err, null);
        }
        else{
          console.log("Working");
          callback(null, response);
        }
      });
    }
  });
...