如何通过JavaScript SDK获取指定时间范围各AWS Lambda的调用次数?
解决AWS Lambda调用次数数据获取问题
你用listMetrics接口只拿到指标元数据是正常的——这个接口的作用就是返回存在的指标列表(包含命名空间、维度等元信息),并不返回实际的时间序列数值数据。要获取指定时间范围内每个Lambda函数的调用次数,需要使用CloudWatch的getMetricData或getMetricStatistics接口,其中getMetricData支持批量查询,效率更高,更适合你的场景。
方法一:使用getMetricData批量查询(推荐)
步骤如下:
- 先用
listMetrics获取所有Lambda的Invocations指标元数据; - 遍历这些元数据,提取每个函数的
FunctionName维度; - 构造
getMetricData的查询参数,批量请求所有函数的调用次数数据。
示例代码:
// 初始化CloudWatch客户端(假设你已经完成这一步) const AWS = require('aws-sdk'); const cloudWatch = new AWS.CloudWatch({ region: 'us-east-1' }); async function getLambdaInvocationCounts() { // 1. 获取所有Lambda的Invocations指标元数据 const listParams = { Namespace: "AWS/Lambda", MetricName: "Invocations", }; const metricList = await cloudWatch.listMetrics(listParams).promise(); // 2. 提取每个函数的FunctionName维度,去重(避免重复查询同一函数) const functionNames = [...new Set(metricList.Metrics.map(metric => { const funcDim = metric.Dimensions.find(d => d.Name === 'FunctionName'); return funcDim ? funcDim.Value : null; }).filter(Boolean))]; // 3. 构造getMetricData的查询参数 const metricDataQueries = functionNames.map((name, index) => ({ Id: `m${index}`, MetricStat: { Metric: { Namespace: "AWS/Lambda", MetricName: "Invocations", Dimensions: [{ Name: 'FunctionName', Value: name }] }, Period: 3600, // 统计周期,单位秒,这里设为1小时,可根据需求调整 Stat: "Sum", // 调用次数用Sum统计,得到总调用量 Unit: "Count" }, ReturnData: true })); const getParams = { MetricDataQueries: metricDataQueries, StartTime: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000), // 7天前 EndTime: new Date() // 当前时间 }; // 4. 调用getMetricData获取实际数据 const result = await cloudWatch.getMetricData(getParams).promise(); console.log("Lambda调用次数数据:", result.MetricDataResults); } getLambdaInvocationCounts();
方法二:使用getMetricStatistics单函数查询
如果只需要查询单个函数的调用次数,可以用这个接口,示例:
async function getSingleLambdaInvocationCount(functionName) { const params = { Namespace: "AWS/Lambda", MetricName: "Invocations", Dimensions: [{ Name: 'FunctionName', Value: functionName }], StartTime: new Date(Date.now() - 24 * 60 * 60 * 1000), // 24小时前 EndTime: new Date(), Period: 3600, Statistics: ["Sum"], Unit: "Count" }; const result = await cloudWatch.getMetricStatistics(params).promise(); console.log(`${functionName}的调用次数:`, result.Datapoints); } getSingleLambdaInvocationCount('us-east-1.xxxx-xxxx');
关键说明
- Stat参数选择:Invocations是计数型指标,用
Sum可以得到指定时间范围内的总调用次数;如果需要平均每分钟调用数,可以用Average。 - Period参数:根据你的时间范围调整,比如时间范围是1天,Period设为3600(1小时)会得到24个数据点;如果设为86400(1天)则得到1个总数据点。
- 去重处理:因为同一个Lambda函数可能有多个维度组合(比如带Resource维度),所以需要提取FunctionName后去重,避免重复查询。
内容的提问来源于stack exchange,提问作者Tapu Das
相关产品推荐
相关产品推荐

