首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >亚马逊网络服务Boto3 -如何使用多个过滤器和迭代标签名称/值?

亚马逊网络服务Boto3 -如何使用多个过滤器和迭代标签名称/值?
EN

Stack Overflow用户
提问于 2020-08-17 07:38:19
回答 1查看 578关注 0票数 1

目前,我正在使用boto3对亚马逊网络服务ec2进行两次调用,以获取以标记名org-production-*org-non-production-*开头的子网I。我如何在python中组合这两个函数,并且仍然能够访问子网I的all_prod_subnets和all_non_prod_subnets?我可能想避免代码重复,只需调用一次aws ec2,获取所有子网并迭代它们,然后根据标签名称过滤响应。

代码语言:javascript
复制
def get_all_production_subnets_from_accounts():
    subnet = vpc_client.describe_subnets(
        Filters=[{'Name': 'tag:Name', 'Values': ['org-production-*']}])['Subnets']
    if len(subnet) > 0:
        # print([s['SubnetId'] for s in subnet])
        all_prod_subnets =  [ s['SubnetId'] for s in subnet ]
        print("[DEBUG]Queried Subnet ID's of Production are: {}".format(all_prod_subnets))
        return all_prod_subnets
    else:
        return None

def get_all_nonproduction_subnets_from_acccounts():
    subnet = vpc_client.describe_subnets(
        Filters=[{'Name': 'tag:Name', 'Values': ['org-non-production-*']}])['Subnets']
    if len(subnet) > 0:
        # print([s['SubnetId'] for s in subnet])
        all_non_prod_subnets =  [ s['SubnetId'] for s in subnet ]
        print("[DEBUG]Queried Subnet ID's of Non-Production are: {}".format(all_non_prod_subnets))
        return all_non_prod_subnets
    else:
        return None
EN

回答 1

Stack Overflow用户

发布于 2020-08-17 08:01:09

一种方法如下:

代码语言:javascript
复制
def get_all_subnets_from_connectivity():

    subnets_found = {}
    
    # define subnet types of interest
    subnets_found['org-production'] = []
    subnets_found['org-non-production'] = []
    
    results = vpc_client.describe_subnets() 

    for subnet in results['Subnets']:

        if 'Tags' not in subnet:
            continue

        for tag in subnet['Tags']:

            if tag['Key'] != 'Name': continue
                
            for subnet_type in subnets_found:               
                if subnet_type in tag['Value']:
                    subnets_found[subnet_type].append(subnet['SubnetId'])

    return subnets_found



all_subnets = get_all_subnets_from_connectivity()


print(all_subnets)

示例输出:

代码语言:javascript
复制
{
'org-production': ['subnet-033bad31433b55e72', 'subnet-019879db91313d56a'], 
'org-non-production': ['subnet-06e3bc20a73b55283']
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63442904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档