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

如何批量获取100+ AWS Lambda函数的最后执行时间?

批量获取AWS Lambda函数最后执行时间的解决思路

方法一:通过CloudWatch Metrics批量查询(推荐)

Lambda的Invocations指标会记录每次调用的时间,无需依赖日志流,直接通过CloudWatch Metrics即可获取最近一次调用的时间戳。

实现步骤:

  • 调用Lambda API获取所有函数列表
  • 对每个函数,构造CloudWatch Metrics查询,筛选AWS/Lambda命名空间下的Invocations指标,按FunctionName维度过滤,取最新的数据点时间
  • 对没有调用记录的函数,标记为「从未执行」

示例boto3脚本:

import boto3
from datetime import datetime

def get_lambda_last_invoked():
    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'])
    
    results = []
    for func in functions:
        func_name = func['FunctionName']
        try:
            # 查询最近365天的Invocations指标最新数据点
            response = cloudwatch_client.get_metric_data(
                MetricDataQueries=[
                    {
                        'Id': 'invocations',
                        'MetricStat': {
                            'Metric': {
                                'Namespace': 'AWS/Lambda',
                                'MetricName': 'Invocations',
                                'Dimensions': [
                                    {
                                        'Name': 'FunctionName',
                                        'Value': func_name
                                    }
                                ]
                            },
                            'Period': 86400,
                            'Stat': 'Sum'
                        },
                        'ReturnData': True
                    }
                ],
                StartTime=datetime.now() - datetime.timedelta(days=365),
                EndTime=datetime.now(),
                ScanBy='TimestampDescending'
            )
            
            last_invoked = response['MetricDataResults'][0]['Timestamps'][0].strftime('%Y-%m-%d %H:%M:%S') if response['MetricDataResults'][0]['Timestamps'] else '从未执行'
        except Exception as e:
            last_invoked = f'查询失败: {str(e)}'
        
        results.append({
            'FunctionName': func_name,
            'LastInvokedTime': last_invoked
        })
    
    # 输出结果
    for res in results:
        print(f"函数名: {res['FunctionName']}, 最后执行时间: {res['LastInvokedTime']}")

if __name__ == '__main__':
    get_lambda_last_invoked()

方法二:通过CloudTrail事件查询

如果你的AWS账号开启了CloudTrail,可以查询lambda.Invoke事件的最新记录,获取函数最后被调用的时间。注意CloudTrail日志默认保留90天,且可能存在一定延迟。

示例boto3脚本片段:

def get_last_invoke_from_cloudtrail(func_name):
    cloudtrail_client = boto3.client('cloudtrail')
    response = cloudtrail_client.lookup_events(
        LookupAttributes=[
            {
                'AttributeKey': 'EventName',
                'AttributeValue': 'Invoke'
            },
            {
                'AttributeKey': 'ResourceName',
                'AttributeValue': func_name
            }
        ],
        MaxResults=1,
        StartTime=datetime.now() - datetime.timedelta(days=90)
    )
    return response['Events'][0]['EventTime'].strftime('%Y-%m-%d %H:%M:%S') if response['Events'] else '90天内无调用记录或未开启CloudTrail'

注意事项

  • 确保执行脚本的IAM角色拥有对应权限:方法一需要lambda:ListFunctions、cloudwatch:GetMetricData;方法二需要cloudtrail:LookupEvents
  • 若函数调用频率极低,可将CloudWatch Metrics的Period值调小(比如60秒),避免遗漏最新调用
  • 从未执行过的函数,两种方法都会返回「无记录」标记

内容的提问来源于stack exchange,提问作者Naxxio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:40:33