求助:为Python脚本添加分页器以批量清理AWS Lambda旧版本
修复Lambda版本清理脚本以获取全部函数
你的脚本当前仅能获取第一页Lambda函数(默认最多返回50个),当账号内函数数量超过这个限制时会遗漏大量函数。核心问题是list_functions接口未做分页处理,需要补充对应逻辑来遍历所有函数结果。
修改后的完整代码
import boto3 def clean_old_lambda_versions(client): # 使用boto3分页器获取所有Lambda函数 paginator = client.get_paginator('list_functions') function_pages = paginator.paginate() for page in function_pages: for function in page['Functions']: arn = function['FunctionArn'] print(arn) all_versions = [] # 版本分页逻辑保持原有逻辑不变 versions = client.list_versions_by_function( FunctionName=arn) while True: page_versions = [int(v['Version']) for v in versions['Versions'] if v['Version'] != '$LATEST'] all_versions.extend(page_versions) try: marker = versions['NextMarker'] except KeyError: break versions = client.list_versions_by_function( FunctionName=arn, Marker=marker) # 排序并保留最新5个版本 all_versions.sort() print('待删除版本:') print(all_versions[:-5]) print('保留版本:') print(all_versions[-5:]) # 删除旧版本 for version_num in all_versions[:-5]: function_arn_with_version = f"{arn}:{version_num}" client.delete_function(FunctionName=function_arn_with_version) if __name__ == '__main__': client = boto3.client('lambda', region_name='us-east-1') clean_old_lambda_versions(client)
关键修改说明
- 新增函数分页逻辑:用
get_paginator('list_functions')替代直接调用list_functions(),由boto3自动处理分页标记,确保遍历账号内所有Lambda函数 - 优化异常捕获:将通用
except改为except KeyError,仅捕获NextMarker不存在的预期情况,避免屏蔽其他错误 - 简化代码写法:用f-string替代
format()进行字符串拼接,提升代码可读性
修改后脚本可正常遍历所有Lambda函数,同时保留原有的版本清理逻辑,确保只保留$LATEST和最新5个版本。
内容的提问来源于stack exchange,提问作者user3303441
相关产品推荐
相关产品推荐

