如何用Java代码查询指定AWS Lambda函数的运行实例数?
查询AWS Lambda当前运行实例数的方案
AWS没有提供直接返回当前运行Lambda实例数的公开API,但可以通过CloudWatch指标间接获取近似的并发执行数(每个并发执行对应一个运行中的实例)。
核心方案:查询CloudWatch的ConcurrentExecutions指标
Lambda会向CloudWatch上报ConcurrentExecutions指标,代表当前该函数的并发执行实例数量,这也是控制台图表展示的数据来源。
Java代码示例(使用AWS SDK for Java v2)
首先添加AWS CloudWatch Metrics SDK的Maven依赖:
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>cloudwatch</artifactId> <version>2.20.0</version> </dependency>
然后编写查询代码:
import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.cloudwatch.CloudWatchClient; import software.amazon.awssdk.services.cloudwatch.model.*; import java.time.Instant; import java.util.Collections; public class LambdaConcurrentExecutions { public static void main(String[] args) { String functionName = "your-lambda-function-name"; Region region = Region.US_EAST_1; // 替换为你的Lambda所在区域 try (CloudWatchClient cwClient = CloudWatchClient.builder().region(region).build()) { Instant endTime = Instant.now(); Instant startTime = endTime.minusSeconds(60); // 查询最近1分钟的数据 GetMetricStatisticsRequest request = GetMetricStatisticsRequest.builder() .namespace("AWS/Lambda") .metricName("ConcurrentExecutions") .dimensions(Collections.singletonList(Dimension.builder() .name("FunctionName") .value(functionName) .build())) .startTime(startTime) .endTime(endTime) .period(60) // 统计周期60秒 .statistics(Statistic.MAX) // 取周期内最大值,近似当前并发数 .build(); GetMetricStatisticsResponse response = cwClient.getMetricStatistics(request); if (!response.datapoints().isEmpty()) { Datapoint latestDatapoint = response.datapoints().stream() .max((d1, d2) -> d1.timestamp().compareTo(d2.timestamp())) .orElse(null); if (latestDatapoint != null) { System.out.printf("Lambda函数 %s 的当前近似并发实例数: %.0f%n", functionName, latestDatapoint.max()); } } else { System.out.println("未获取到并发执行数据,可能函数最近未运行或数据存在延迟"); } } catch (CloudWatchException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } } }
关键说明
- 数据延迟:CloudWatch指标通常有1-5分钟的延迟,无法获取完全实时的实例计数,目前AWS没有公开API支持实时查询。
- 指标含义:
ConcurrentExecutions统计的是函数的并发执行数量,每个并发执行对应一个运行中的Lambda实例(未启用预置并发的场景)。若启用了预置并发,可结合ProvisionedConcurrencyUtilization等指标补充分析,但核心运行实例数仍由ConcurrentExecutions反映。 - 权限要求:执行代码的IAM角色需要具备
cloudwatch:GetMetricStatistics权限。
AWS控制台展示的Lambda实例数图表正是基于该CloudWatch指标,不存在未公开的私有API可直接获取实时实例数。
内容的提问来源于stack exchange,提问作者Stormcloud
相关产品推荐
相关产品推荐

