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

如何通过Python argparse传递指定Region过滤Secrets列表?

问题:如何基于指定Region过滤Secrets列表?

现有Python代码通过argparse定义了-r/--regions参数,支持传入单个或多个Region选项,但执行命令python -m file -a list -r 'us-east-1'时,无法按输入的Region过滤Secrets列表。需要添加逻辑获取并应用指定Region,实现过滤效果。

原代码片段:

parser.add_argument('-r', '--regions', nargs="*", choices=["us-east-1", "us-west-2"], default=["us-east-1"], type=str)
args = parser.parse_args()

if args.action == 'list':
    list_response = secrets_session.list_secrets()
    print(json.dumps(list_response, indent=4, default=str))

解决方案

根据使用场景,分两种情况处理:

情况1:针对每个Region单独拉取Secrets(常见于AWS SDK场景)

AWS Secrets Manager的list_secrets()接口只能返回当前会话绑定Region的结果,因此需要为每个指定的Region创建独立会话并拉取数据:

parser.add_argument('-r', '--regions', nargs="*", choices=["us-east-1", "us-west-2"], default=["us-east-1"], type=str)
args = parser.parse_args()

if args.action == 'list':
    # 遍历用户指定的所有Region
    for region in args.regions:
        # 重新初始化对应Region的会话(以boto3为例)
        import boto3
        secrets_session = boto3.client('secretsmanager', region_name=region)
        
        # 拉取当前Region的Secrets列表
        list_response = secrets_session.list_secrets()
        
        # 输出时标记Region,方便区分结果
        print(f"--- Region: {region} ---")
        print(json.dumps(list_response, indent=4, default=str))

关键说明:

  • 通过args.regions直接获取用户传入的Region列表(支持多个值,比如-r us-east-1 us-west-2)
  • 每个Region需要单独创建会话,因为AWS SDK的client是与Region绑定的
  • 输出时添加Region标识,避免多Region结果混淆

情况2:从全局结果中过滤指定Region的Secrets

如果你的secrets_session.list_secrets()返回的是跨Region的聚合结果,可以通过Secret的属性(比如ARN中的Region段)进行过滤:

parser.add_argument('-r', '--regions', nargs="*", choices=["us-east-1", "us-west-2"], default=["us-east-1"], type=str)
args = parser.parse_args()

if args.action == 'list':
    # 获取全部Secrets列表
    list_response = secrets_session.list_secrets()
    
    # 过滤出属于指定Region的Secrets(以ARN解析为例)
    filtered_secrets = []
    for secret in list_response.get('SecretList', []):
        # 从ARN中提取Region(ARN格式:arn:aws:secretsmanager:us-east-1:account-id:secret:name)
        secret_region = secret['ARN'].split(':')[3]
        if secret_region in args.regions:
            filtered_secrets.append(secret)
    
    # 替换原响应中的SecretList为过滤后的结果
    list_response['SecretList'] = filtered_secrets
    print(json.dumps(list_response, indent=4, default=str))

关键说明:

  • 从Secret对象的ARN中解析出Region,或者根据实际存在的Region属性判断
  • 用循环筛选出符合条件的Secrets,替换原响应中的结果集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:35:35