如何排查AWS中半年未使用的Lambda及查询其依赖对象
获取并清理AWS半年未使用的Lambda函数
一、筛选过去180天未被调用的Lambda函数
方法1:使用AWS CLI批量检测
结合Lambda与CloudWatch的CLI命令,批量标记无调用记录的函数:
# 导出所有Lambda函数ARN到文件 aws lambda list-functions --query 'Functions[*].FunctionArn' --output text | tr '\t' '\n' > lambda_arns.txt # 遍历每个ARN,检查过去180天的调用次数 for arn in $(cat lambda_arns.txt); do func_name=$(basename "$arn") # 查询CloudWatch调用统计 invocations=$(aws cloudwatch get-metric-statistics \ --namespace AWS/Lambda \ --metric-name Invocations \ --dimensions Name=FunctionName,Value="$func_name" \ --start-time $(date -d "-180 days" --utc +%Y-%m-%dT%H:%M:%SZ) \ --end-time $(date --utc +%Y-%m-%dT%H:%M:%SZ) \ --period 86400 \ --statistics Sum \ --query 'Datapoints[*].Sum' --output text) # 无数据或调用次数为0则标记为未使用 if [ -z "$invocations" ] || [ "$invocations" == "0" ]; then echo "$arn" >> unused_lambdas.txt fi done
执行完成后,unused_lambdas.txt会列出所有半年未使用的Lambda ARN。
方法2:通过AWS控制台可视化筛选
- 打开CloudWatch控制台,进入指标 > 所有指标 > AWS/Lambda > 按函数名称
- 勾选所有函数的
Invocations指标,将时间范围设置为「过去180天」 - 在图表中筛选出数值始终为0的函数,记录名称或ARN即可
二、批量删除未使用的Lambda函数
CLI批量删除
读取之前生成的unused_lambdas.txt,批量删除函数:
while read arn; do aws lambda delete-function --function-name "$arn" done < unused_lambdas.txt
控制台手动删除
- 进入Lambda控制台,在函数列表中找到标记的未使用函数
- 选中函数后点击操作 > 删除,确认后完成删除
三、排查Lambda的关联依赖对象
Lambda可能关联多种AWS资源,以下是常用排查方式:
1. 触发器关联
触发器是最常见的依赖(如API Gateway、S3事件、SNS主题等):
- 控制台:进入函数详情页配置 > 触发器面板,查看所有关联触发器
- CLI命令:
aws lambda list-event-source-mappings --function-name <函数名/ARN>
2. 执行IAM角色
Lambda的执行角色关联权限与潜在资源依赖:
- 控制台:函数详情页配置 > 权限 > 执行角色,点击角色名查看权限策略与关联资源
- CLI命令:
aws lambda get-function --function-name <函数名/ARN> --query 'Configuration.Role'
3. 附加层(Layers)
若函数使用共享层,需确认层的依赖:
- 控制台:函数详情页代码 > 层面板,查看所有附加层
- CLI命令:
aws lambda get-function --function-name <函数名/ARN> --query 'Configuration.Layers[*].Arn'
4. VPC资源关联
若函数配置VPC,会关联子网与安全组:
- 控制台:函数详情页配置 > VPC,查看关联的子网和安全组ID
- CLI命令:
aws lambda get-function --function-name <函数名/ARN> --query 'Configuration.VpcConfig'
5. CloudWatch日志组
Lambda默认生成对应日志组,格式为/aws/lambda/<函数名>:
- 控制台:函数详情页监控 > 日志,直接跳转至对应日志组
- CLI命令:
aws logs describe-log-groups --log-group-name-prefix /aws/lambda/<函数名>
6. 代码中的资源依赖
排查代码内调用的AWS资源(如DynamoDB表、S3桶),可先下载代码包分析:
# 下载函数代码包 aws lambda get-function --function-name <函数名/ARN> --query 'Code.Location' | xargs curl -o function_code.zip # 解压后查看代码中的资源引用 unzip function_code.zip
内容的提问来源于stack exchange,提问作者PrakashS
相关产品推荐
相关产品推荐

