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

使用AWS SDK for Python(boto3)列出Lambda函数及标签过滤问题

问题解答

一、为什么返回空的Functions列表?

你错误使用了MasterRegion参数:

  • 这个参数仅用于查询从指定区域复制到当前区域的Lambda函数,仅适配跨区域复制的场景。
  • 如果你要获取当前区域(us-west-2)原生创建的函数,添加该参数后,只会查找从us-west-2复制过来的函数(你的函数都是原生创建),因此返回空列表。

修复方法:直接去掉MasterRegion参数即可正常获取当前区域的Lambda函数。

二、修复后的基础获取代码

import boto3

# 初始化Lambda客户端(CloudWatch客户端当前暂时不需要,可后续获取指标时使用)
lambda_client = boto3.client('lambda', region_name='us-west-2')

# 获取当前区域所有Lambda函数(支持分页,避免MaxItems限制)
all_functions = []
paginator = lambda_client.get_paginator('list_functions')
for page in paginator.paginate(FunctionVersion='ALL'):
    all_functions.extend(page['Functions'])

print(all_functions)

注:FunctionVersion='ALL'会返回函数的所有版本(包括$LATEST和发布的版本),如果只需要最新版本,可去掉该参数使用默认值。

三、实现标签过滤(mygroup:env=dev)

Lambda的list_functions接口本身不支持直接按标签过滤,有两种实现方式:

方式1:先获取所有函数,再逐个校验标签

适合函数数量较少的场景:

import boto3

lambda_client = boto3.client('lambda', region_name='us-west-2')

# 获取所有函数
all_functions = []
paginator = lambda_client.get_paginator('list_functions')
for page in paginator.paginate(FunctionVersion='ALL'):
    all_functions.extend(page['Functions'])

# 过滤带有指定标签的函数
filtered_functions = []
target_tag_key = 'mygroup:env'
target_tag_value = 'dev'

for func in all_functions:
    # 获取当前函数的标签
    tags = lambda_client.list_tags(Resource=func['FunctionArn'])['Tags']
    if tags.get(target_tag_key) == target_tag_value:
        filtered_functions.append(func)

print(f"符合条件的函数数量:{len(filtered_functions)}")
print(filtered_functions)

方式2:用资源标签API直接过滤(更高效)

通过resourcegroupstaggingapi直接按标签筛选Lambda函数,无需遍历所有函数,适合函数数量多的场景:

import boto3

# 初始化标签API客户端和Lambda客户端
tagging_client = boto3.client('resourcegroupstaggingapi', region_name='us-west-2')
lambda_client = boto3.client('lambda', region_name='us-west-2')

# 按标签筛选Lambda资源
tag_filter_response = tagging_client.get_resources(
    ResourceTypeFilters=['lambda:function'],
    TagFilters=[
        {
            'Key': 'mygroup:env',
            'Values': ['dev']
        }
    ]
)

# 提取符合条件的函数ARN,再获取详细信息
filtered_function_arns = [item['ResourceARN'] for item in tag_filter_response['ResourceTagMappingList']]
filtered_functions = []

for arn in filtered_function_arns:
    func_detail = lambda_client.get_function(FunctionName=arn)
    filtered_functions.append(func_detail)

print(f"符合条件的函数数量:{len(filtered_functions)}")
print(filtered_functions)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:38:02