能否通过API列出单个Lambda应用下的所有Lambda函数?
检索指定Lambda应用下所有函数的实现方法
Lambda.Client.list_functions 确实没有直接提供按应用名过滤的入参,但可以通过官方API实现指定应用下Lambda函数的检索,有两种稳定可用的方案:
- 方案1:基于Lambda系统标签过滤
所有在Lambda控制台创建的应用、通过SAM/Serverless Application Repository/CloudFormation部署的Lambda应用,其下的所有函数都会被自动注入固定格式的系统标签:- 标签键
lambda:application的值直接对应当前函数所属的Lambda应用名 - 标签键
aws:cloudformation:stack-name的值对应该应用关联的CloudFormation栈名
你可以直接在调用list_functions时传入标签过滤条件,不需要拉取全量函数本地过滤,示例代码:
如果你的boto3版本低于1.26.0,Filters参数不可用,可以遍历分页返回的函数列表,判断函数import boto3 lambda_client = boto3.client('lambda') target_app_name = "替换为你的目标应用名" paginator = lambda_client.get_paginator('list_functions') app_functions = [] for page in paginator.paginate( FunctionVersion='ALL', Filters={ 'Key': 'lambda:application', 'Values': [target_app_name] } ): app_functions.extend(page['Functions'])Tags字段中lambda:application对应的值是否匹配目标应用名即可。 - 标签键
- 方案2:通过Resource Groups API查询
Lambda控制台的应用视图底层就是对接AWS Resource Groups服务实现的资源聚合,每个Lambda应用对应一个专属资源组,直接查询该资源组下的Lambda类型资源,返回结果和控制台展示完全一致:- 调用
list_groups接口找到目标应用对应的资源组ARN - 调用
list_group_resources接口,传入资源组ARN,同时指定资源类型筛选为AWS::Lambda::Function,返回结果就是该应用下的所有Lambda函数
- 调用
注意:不建议直接拉取全区域所有Lambda函数再本地匹配,账号下函数数量较多时很容易触发API限流,优先使用服务端过滤参数或者Resource Groups查询能力,查询效率更高。
内容的提问来源于stack exchange,提问作者Mark Mishyn
相关产品推荐
相关产品推荐

