You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何找出AWS账号中近X天未被调用的Lambda函数?

筛选AWS Lambda中近X天未被调用的函数

针对1400个Lambda函数的批量筛选需求,以下是几个可行的方案:

方案一:AWS CLI 批量查询

通过CLI结合CloudWatch指标,逐个验证函数的调用情况:

  1. 先导出所有Lambda函数的名称列表:
aws lambda list-functions --query 'Functions[*].FunctionName' --output text > lambda_functions.txt
  1. 编写Shell循环脚本,遍历每个函数查询近X天的Invocations指标总和:
X=7  # 替换为你需要的天数
START_TIME=$(date -u -d "-$X days" +%Y-%m-%dT%H:%M:%SZ)
END_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)

while read -r func_name; do
    invocations=$(aws cloudwatch get-metric-statistics \
        --namespace AWS/Lambda \
        --metric-name Invocations \
        --dimensions Name=FunctionName,Value="$func_name" \
        --start-time "$START_TIME" \
        --end-time "$END_TIME" \
        --period $((X*86400)) \
        --statistics Sum \
        --query 'Datapoints[0].Sum' \
        --output text)
    
    if [ "$invocations" = "None" ]; then
        echo "$func_name" >> unused_lambdas.txt
    fi
done < lambda_functions.txt

执行完成后,unused_lambdas.txt文件中会列出所有近X天未被调用的函数。

注意:从未被调用过的新函数,CloudWatch不会生成Invocations指标,这类函数也会被归入结果列表。

方案二:Python + Boto3 批量查询(效率更高)

面对大量函数,用Python脚本并行查询能显著节省时间:

import boto3
from datetime import datetime, timedelta

def get_unused_lambdas(days):
    lambda_client = boto3.client('lambda')
    cloudwatch_client = boto3.client('cloudwatch')
    
    # 分页获取所有Lambda函数
    functions = []
    paginator = lambda_client.get_paginator('list_functions')
    for page in paginator.paginate():
        functions.extend(page['Functions'])
    
    start_time = datetime.utcnow() - timedelta(days=days)
    end_time = datetime.utcnow()
    unused_functions = []
    
    for func in functions:
        func_name = func['FunctionName']
        try:
            response = cloudwatch_client.get_metric_statistics(
                Namespace='AWS/Lambda',
                MetricName='Invocations',
                Dimensions=[{'Name': 'FunctionName', 'Value': func_name}],
                StartTime=start_time,
                EndTime=end_time,
                Period=days * 86400,
                Statistics=['Sum']
            )
            # 无数据点说明未被调用
            if not response['Datapoints']:
                unused_functions.append(func_name)
        except Exception as e:
            print(f"查询函数 {func_name} 出错: {str(e)}")
    
    return unused_functions

if __name__ == '__main__':
    X = 7  # 替换为目标天数
    unused = get_unused_lambdas(X)
    print(f"近{X}天未被调用的Lambda函数:")
    for func in unused:
        print(func)
    # 结果写入文件
    with open('unused_lambdas.txt', 'w') as f:
        f.write('\n'.join(unused))

运行前确保已配置AWS凭证(环境变量、~/.aws/credentials文件均可),并安装boto3库。

方案三:AWS Athena 查询CloudWatch Logs

若所有Lambda函数都开启了日志记录,可通过Athena反向筛选未生成日志的函数:

  1. 在Athena中创建CloudWatch Logs外部表(按AWS指引完成日志组映射配置)
  2. 执行查询获取近X天有调用日志的函数:
SELECT DISTINCT regexp_extract(log_stream, '/aws/lambda/(.+)', 1) AS function_name
FROM your_cloudwatch_logs_table
WHERE time >= current_timestamp - interval 'X' day

将查询结果与全量Lambda函数列表对比,不在结果中的即为未被调用的函数。

注意:此方法依赖日志开启状态,从未被调用的函数不会生成对应日志流,也会被纳入结果。


内容的提问来源于stack exchange,提问作者André Ferreira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 20:52:17