如何查找AWS账户中成本最高的Lambda函数以优先完成arm64迁移
AWS Lambda 按成本排序迁移实现方案
Lambda的计算成本和 调用次数、单次运行时长、配置内存 三者强相关,你提到的「调用次数*运行时长」再乘以内存对应的单位费率,就是该函数的实际计算成本,aws lambda list-functions 本身只返回函数配置数据,确实不包含运行时统计数据,你可以通过以下三种可行方案实现按成本排序:
方案1:Cost Explorer 直接导出(零代码门槛)
- 打开AWS控制台的Cost Explorer服务,筛选服务类型为「Lambda」,分组维度选择「Lambda 函数名称」
- 时间范围调整为你需要的统计周期(比如过去30天、过去90天),直接导出按实际账单成本从高到低排序的函数列表
- 优势:导出的成本包含所有费用项,除了计算费用外还包含请求费、跨服务调用等额外成本,和实际账单数据完全一致
方案2:CloudWatch 指标自定义统计(灵活度最高)
- 你可以调用CloudWatch的
get-metric-data接口,批量拉取指定时间段所有Lambda的Invocations(总调用次数)、Duration(总运行时长,单位毫秒)两个核心指标 - 再搭配每个函数的配置内存参数,计算出精确的计算成本权重:
成本权重 = 内存大小(MB) * 总运行时长(ms),权重数值和实际计算成本成正比 - 优势:可以灵活自定义统计时间粒度,支持分钟级的成本统计,适合需要精细化分析的场景
方案3:一键自动化统计脚本
提前配置好AWS CLI的访问权限后,直接运行以下shell脚本,即可输出按计算成本从高到低排序的函数列表:
# 统计过去30天的Lambda成本排序 START_TIME=$(date -u -d "30 days ago" +%Y-%m-%dT%H:%M:%SZ) END_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ) # 拉取所有Lambda函数列表并批量统计 aws lambda list-functions --query 'Functions[*].FunctionName' --output text | tr '\t' '\n' | while read func; do # 拉取总调用次数 invocations=$(aws cloudwatch get-metric-statistics --namespace AWS/Lambda --metric-name Invocations --start-time $START_TIME --end-time $END_TIME --period 2592000 --statistics Sum --dimensions Name=FunctionName,Value=$func --query 'Datapoints[0].Sum' --output text | sed 's/None/0/') # 拉取总运行时长(单位:毫秒) duration=$(aws cloudwatch get-metric-statistics --namespace AWS/Lambda --metric-name Duration --start-time $START_TIME --end-time $END_TIME --period 2592000 --statistics Sum --dimensions Name=FunctionName,Value=$func --query 'Datapoints[0].Sum' --output text | sed 's/None/0/') # 拉取函数配置内存 memory=$(aws lambda get-function-configuration --function-name $func --query 'MemorySize' --output text) # 计算成本权重 cost_weight=$(echo "$memory * $duration" | bc) echo "$cost_weight $func 调用次数:$invocations 总运行时长(ms):$duration 内存(MB):$memory" done | sort -nr | column -t
注:输出结果第一列为成本权重,数值越高代表该函数的计算成本越高,优先迁移排名靠前的函数即可。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

