代码之家  ›  专栏  ›  技术社区  ›  MacUsers

Boto3:如何在创建专有网络之前检查它是否已经存在

  •  3
  • MacUsers  · 技术社区  · 7 年前

    import boto3 as boto
    
    inst = boto.Session(profile_name='myprofile').resource('ec2')
    
    def createVpc(nid,az='us-west-2'):
        '''Create the VPC'''
        vpc = inst.create_vpc(CidrBlock = '10.'+str(nid)+'.0.0/16')
        vpc.create_tags(
            Tags = [ { 'Key': 'Name', 'Value': 'VPC-'+nid }, ]
        )
        vpc.wait_until_available()
    
    createVpc('111')
    

    如何使用CidrBlock检查专有网络: 10.111.0.0/16 或名称: VPC-111 在创建之前已经存在?实际上,我想在创建任何AWS资源之前做同样的检查,但VPC是一个开始。最好的


    编辑: 发现了 vpcs.filter 可以用来查询给定的专有网络标签;例如。:

    fltr = [{'Name':'tag:Name', 'Values':['VPC-'+str(nid)]}]
    list(inst.vpcs.filter(Filters=fltr))
    

    返回如下列表对象: [ec2.Vpc(id='vpc-43e56b3b')] . 长度为0(零)的列表很好地表明不存在专有网络,但想知道是否有更多的boto/aws方法来检测。

    1 回复  |  直到 7 年前
        1
  •  8
  •   Madhukar Mohanraju    7 年前

    是的,您需要使用过滤器 describe_vpcs 应用程序编程接口。

    下面的代码将列出与这两个匹配的所有专有网络 名称 标记值和 CIDR

    import boto3
    
    client = boto3.client('ec2',region_name='us-east-1')
    response = client.describe_vpcs(
        Filters=[
            {
                'Name': 'tag:Name',
                'Values': [
                    '<Enter you VPC name here>',
                ]
            },
            {
                'Name': 'cidr-block-association.cidr-block',
                'Values': [
                    '10.0.0.0/16', #Enter you cidr block here
                ]
            },        
        ]
    )
    resp = response['Vpcs']
    if resp:
        print(resp)
    else:
        print('No vpcs found')
    

    CIDR 块是VPC的主要检查。我建议只使用 仅CIDR过滤器 而不是用 名称 标记为,这样就可以防止创建具有相同属性的专有网络 CIDR块 .