如何通过Boto3获取AWS Lambda函数的最近执行时间?
AWS Lambda调用指标查询返回空数据点问题排查
问题描述
我希望获取AWS Lambda函数的最近执行时间(过去6天内的),编写了以下Boto3代码,但未得到任何数据点:
metric = cw_client.get_metric_statistics( Namespace = 'AWS/Lambda', MetricName = 'Invocations', Dimensions = [ { 'Name': 'FunctionaName', 'Value': 'B2B-Masters-Aggregate' } ], StartTime = datetime.utcnow() - timedelta(days=6), EndTime = datetime.utcnow(), Period = 300, Statistics = ['SampleCount'], Unit = 'Count' )
返回结果:
{'Label': 'Invocations', 'Datapoints': [], 'ResponseMetadata': {'RequestId': '2209b9fd-b11a-4f54-aeef9f4853fb', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '2209b9fd-b11a-4f54-aeef9f4853fb', 'content-type': 'text/xml', 'content-length': '334', 'date': 'Fri, 27 Oct 2023 15:39:54 GMT'}, 'RetryAttempts': 0}}
从控制台可见该函数半小时前刚执行过,尝试get_metric_data()方法后结果仍为空。
问题原因及解决方案
1. 核心错误:维度名称拼写错误
代码中维度名称写成了FunctionaName,正确的CloudWatch Lambda维度名称是FunctionName(少了一个字母l)。维度名称是严格大小写敏感且必须完全匹配的,拼写错误会导致无法定位到目标函数的指标数据。
2. 修正后的代码
metric = cw_client.get_metric_statistics( Namespace='AWS/Lambda', MetricName='Invocations', Dimensions=[ { 'Name': 'FunctionName', # 修正拼写错误 'Value': 'B2B-Masters-Aggregate' } ], StartTime=datetime.utcnow() - timedelta(days=6), EndTime=datetime.utcnow(), Period=300, Statistics=['SampleCount'], Unit='Count' )
3. 额外排查点
- 版本/别名维度:如果你的Lambda函数使用了别名或特定版本,需要添加
Resource维度,值格式为函数名:别名或函数名:版本号,否则只能查询到未指定版本的默认指标。 - 指标延迟:CloudWatch指标存在最多15分钟的生成延迟,若函数刚执行完成,需等待片刻再查询。
- 区域一致性:确认
cw_client初始化时指定的区域与Lambda函数所在区域完全一致,跨区域查询会返回空数据点。
内容的提问来源于stack exchange,提问作者Sarat Kota
相关产品推荐
相关产品推荐

