如何在Lambda函数内获取AWS账号全量Lambda函数名列表
实现方案
步骤1:配置Lambda执行角色权限
首先需要给当前执行清理任务的Lambda函数的IAM执行角色添加lambda:ListFunctions权限,否则无法拉取账号内的Lambda函数列表,权限示例如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:ListFunctions", "Resource": "*" } ] }
如果你需要跨区域清理所有Lambda,还需要确保权限没有区域限制。
步骤2:修改代码动态拉取函数名
通过boto3调用Lambda的官方API拉取全量函数名,自动处理分页避免遗漏函数,修改后的完整代码如下:
from argparse import Namespace import boto3 from clear_lambda_storage import remove_old_lambda_versions def get_all_lambda_names(region_name=None): """拉取指定区域所有Lambda函数名称,自动处理分页""" lambda_client = boto3.client('lambda', region_name=region_name) function_names = [] paginator = lambda_client.get_paginator('list_functions') for page in paginator.paginate(): for func in page['Functions']: function_names.append(func['FunctionName']) return function_names def clear_lambda_storage(event, context): # 拉取当前区域所有Lambda函数名,如需指定区域可传入region_name参数 all_func_names = get_all_lambda_names() remove_old_lambda_versions(Namespace( token_key_id=None, token_secret=None, regions=None, profile=None, num_to_keep=3, function_names=all_func_names )) return "Successful clean! 🗑 ✅"
可选:跨区域全账号清理
如果需要拉取账号内所有区域的Lambda函数,只需要新增拉取可用区域的逻辑即可,修改get_all_lambda_names方法如下:
def get_all_region_lambda_names(): """拉取全账号所有区域的Lambda函数名称""" # 先获取所有支持Lambda的区域 ec2_client = boto3.client('ec2', region_name='us-east-1') regions = [region['RegionName'] for region in ec2_client.describe_regions()['Regions']] all_func_names = [] for region in regions: lambda_client = boto3.client('lambda', region_name=region) paginator = lambda_client.get_paginator('list_functions') for page in paginator.paginate(): for func in page['Functions']: all_func_names.append(func['FunctionName']) return all_func_names
调用时把regions参数也设置为对应的区域列表,即可实现全区域自动清理。
内容的提问来源于stack exchange,提问作者Sabo Boz
相关产品推荐
相关产品推荐

