【发布时间】:2020-12-27 22:38:54
【问题描述】:
我正在尝试设置一个 lambda 来定期查询我们的队列服务并将消息计数报告回 Cloudwatch,以便我们可以监控队列大小。
当使用无服务器框架在本地调用代码时,所有代码都可以正常工作。但是,当从 Lambda 本身触发时,对 AWS Cloudwatch 的请求永远不会完成,并且 lambda 会超时。
import {Callback, Context, Handler} from 'aws-lambda';
import {CloudWatch} from 'aws-sdk';
const queueReporter: Handler = async (event: any, context: Context, callback: Callback) => {
// TRUNCATED - GET Queue counts
const cloudwatch = new CloudWatch({region: 'eu-west-1'})
const date = new Date();
// convert queue data into cloudwatch metrics
const metricData: CloudWatch.Types.MetricData = queues.map((queue): CloudWatch.Types.MetricDatum => ({
MetricName: queue.name,
Timestamp: date,
Unit: 'Count',
Value: queue.messages,
}));
console.log('add metrics'); // This prints out
return await cloudwatch.putMetricData(
{
MetricData: metricData,
Namespace: 'Queue_Messages'
}).promise().then((response) => {
const result = JSON.stringify(response);
console.log(result); // this does not print out
callback(null, result);
return result;
}
);
};
我怀疑这是某种权限问题,因为当我没有在笔记本电脑上配置访问密钥时,我在本地看到了类似的问题。
但是该政策包括我认为应该足够的声明
{
"Action": [
"cloudwatch:PutMetricData"
],
"Resource": "*",
"Effect": "Allow"
}
为了访问队列的 API,此 lambda 已添加到 VPC 和安全组。然而,这个安全组没有传出限制,只有传入。
任何帮助将不胜感激
【问题讨论】:
标签: node.js aws-lambda serverless-framework