在控制台上进行测试时,AWS Lambda Function可以工作,但在CloudWatch事件触发它时则无法工作

时间:2019-01-23 18:30:27

标签: node.js amazon-web-services aws-lambda bots amazon-cloudwatch

我在node中编写了一个Twitter机器人,它转发了一些搜索返回的推文。我将其与Webpack捆绑在一起,并使用AWS Lambda进行了部署。我已将cloudWatch事件设置为每小时触发一次该功能。 我已经记录了该函数的开始和结束,以及每次该函数成功/未成功转发时都记录了日志。

当我在本地运行它时,它可以工作。当我在Lambda管理控制台上对其进行测试时,它可以工作。但是,在我的CloudWatch Logs中,开始日志和结束日志之间没有很长时间。有趣的是,如果我将事件触发的速率降低到<5分钟,它将再次起作用。我很困惑知道我该如何解决此问题吗?

这是测试日志。该功能可以正常工作。

START RequestId: 8f2a4423-5aca-447e-9d24-a18b8c5ff510 Version: $LATEST
2019-01-23T18:18:42.111Z    8f2a4423-5aca-447e-9d24-a18b8c5ff510    Start
2019-01-23T18:18:42.312Z    8f2a4423-5aca-447e-9d24-a18b8c5ff510    Error retweeting
2019-01-23T18:18:42.312Z    8f2a4423-5aca-447e-9d24-a18b8c5ff510    You have already retweeted this Tweet.
2019-01-23T18:18:42.352Z    8f2a4423-5aca-447e-9d24-a18b8c5ff510    Error retweeting
2019-01-23T18:18:42.352Z    8f2a4423-5aca-447e-9d24-a18b8c5ff510    You have already retweeted this Tweet.
2019-01-23T18:18:42.352Z    8f2a4423-5aca-447e-9d24-a18b8c5ff510    Error retweeting
2019-01-23T18:18:42.352Z    8f2a4423-5aca-447e-9d24-a18b8c5ff510    You have already retweeted this Tweet.
2019-01-23T18:18:42.352Z    8f2a4423-5aca-447e-9d24-a18b8c5ff510    End
END RequestId: 8f2a4423-5aca-447e-9d24-a18b8c5ff510
REPORT RequestId: 8f2a4423-5aca-447e-9d24-a18b8c5ff510  Duration: 881.20 ms Billed Duration: 900 ms     Memory Size: 128 MB Max Memory Used: 64 MB  

这是我的代码。

const learnInPublicRetweet = async () => {
  const query = '#SomeHashtag';
  const params = {
    q: query,
    result_type: 'recent',
    lang: 'en'
  };
  console.log('Start');
  let data = await T.get('search/tweets', params);
  const { statuses } = data.data;
  statuses.forEach(async ({ id_str: id, user }) => {
    if (user.id_str !== '1032750379597946880') {
      try {
        await T.post('statuses/retweet/:id', { id });
        console.log(`Retweeted tweet with id ${id}`);
      } catch (err) {
        console.log('Error retweeting');
        console.log(err.message);
      }
    }
  });
  console.log('End');
};

exports.retweet = learnInPublicRetweet;

这是我的cloudwatch日志


16:44:13 START RequestId: 34df836d-c9b3-4b9a-9547-8f3be7ed5297 Version: $LATEST
16:44:14 2019-01-23T16:44:14.159Z   34df836d-c9b3-4b9a-9547-8f3be7ed5297    Start
16:44:14 2019-01-23T16:44:14.938Z   34df836d-c9b3-4b9a-9547-8f3be7ed5297    End
16:44:14 END RequestId: 34df836d-c9b3-4b9a-9547-8f3be7ed5297

1 个答案:

答案 0 :(得分:0)

您的代码中可能有几处错误。

  1. 全局变量缓存,有关best practices的更多信息

    尝试更改它:async function learnInPublicRetweet() { ... }

  2. 您正在使用forEach循环,我确定它不适用于异步调用。它将触发所有异步调用并立即返回。如果要遍历对象的可枚举属性,则需要使用for .. offor .. in