如何找出调用DynamoDB次数最多的AWS Lambda函数
排查Lambda调用DynamoDB资源消耗的方法
方法1:用AWS CloudTrail追踪API调用
- 确保CloudTrail处于开启状态,它会记录所有DynamoDB的API请求,包括来自Lambda的调用。
- 进入CloudTrail控制台的事件历史页面,筛选事件源为
dynamodb.amazonaws.com,查看userIdentity字段里的invokedBy,就能定位到发起调用的Lambda函数ARN。 - 可以进一步统计每个Lambda发起的不同DynamoDB操作(如
PutItem、Query、Scan)的频次,不同操作对应不同的RCU/WCU消耗,以此判断资源消耗大户。
方法2:给Lambda添加自定义CloudWatch指标
- 在Lambda代码中集成CloudWatch自定义指标,每次调用DynamoDB操作后,上报操作类型、消耗的RCU和WCU数值。
- Python示例代码:
import boto3 from botocore.client import Config cloudwatch = boto3.client('cloudwatch', config=Config(region_name='你的区域')) def report_dynamodb_metrics(func_name, operation, consumed_rcu, consumed_wcu): cloudwatch.put_metric_data( Namespace='Lambda-DynamoDB-Cost', MetricData=[ { 'MetricName': 'RequestCount', 'Dimensions': [{'Name': 'FunctionName', 'Value': func_name}], 'Value': 1, 'Unit': 'Count' }, { 'MetricName': 'ConsumedRCU', 'Dimensions': [{'Name': 'FunctionName', 'Value': func_name}], 'Value': consumed_rcu, 'Unit': 'Count' }, { 'MetricName': 'ConsumedWCU', 'Dimensions': [{'Name': 'FunctionName', 'Value': func_name}], 'Value': consumed_wcu, 'Unit': 'Count' } ] ) # 调用DynamoDB后上报指标 dynamodb = boto3.resource('dynamodb') table = dynamodb.Table('你的表名') response = table.put_item(Item={'id': 'test', 'data': 'content'}) consumed_cap = response['ConsumedCapacity'] report_dynamodb_metrics( func_name='你的Lambda函数名', operation='PutItem', consumed_rcu=consumed_cap['CapacityUnits'], consumed_wcu=consumed_cap['CapacityUnits'] ) - 之后在CloudWatch控制台就能按Lambda函数维度,查看各函数的DynamoDB资源消耗数据。
方法3:用AWS X-Ray追踪请求链路
- 给所有Lambda开启X-Ray追踪,AWS SDK默认支持捕获DynamoDB调用链路。
- 进入X-Ray控制台的服务地图,可以直观看到Lambda与DynamoDB的调用关系,点击具体Lambda节点,就能查看它对DynamoDB的调用次数、延迟及资源消耗统计。
- 还能通过X-Ray查询编辑器编写查询语句,统计每个Lambda发起的DynamoDB请求总量和资源消耗。
方法4:结合DynamoDB标签与CloudWatch指标
- 在Lambda调用DynamoDB时,给请求添加
RequestTag标签(比如FunctionName=你的Lambda函数名)。 - 进入DynamoDB的CloudWatch指标页面,选择
ConsumedReadCapacityUnits或ConsumedWriteCapacityUnits指标,按FunctionName标签维度分组统计,直接查看各Lambda对应的资源消耗。
内容的提问来源于stack exchange,提问作者Mitsukk
相关产品推荐
相关产品推荐

