我可以像这样快速创建一个VPC:
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检查VPC:10.111.0.0/16
或名称:VPC-111
在创建之前已经存在?我实际上想在创建任何AWS资源之前进行相同的检查,但VPC是一个开始。最好!
修改
发现vpcs.filter
可用于查询给定的VPC标签; e.g:
fltr = [{'Name':'tag:Name', 'Values':['VPC-'+str(nid)]}]
list(inst.vpcs.filter(Filters=fltr))
返回如下列表对象:[ec2.Vpc(id='vpc-43e56b3b')]
。长度为0(零)的列表很好地表明了不存在的VPC,但是想知道是否有更多的boto / aws检测方法。
答案 0 :(得分:4)
是的,您需要使用describe_vpcs
API过滤器。
以下代码将列出所有与名称标记值和 CIDR 块匹配的VPC:
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过滤器而不是使用 Name 标签进行俱乐部,因为这样可以防止使用相同的 CIDR块创建VPC。 / p>