gpt4 book ai didi

python-3.x - Boto3:如何在创建之前检查 VPC 是否已经存在

转载 作者:行者123 更新时间:2023-12-05 01:01:00 28 4
gpt4 key购买 nike

我可以像这样快速创建一个 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: 10.111.0.0/16 或名称:VPC-111 的 VPC 在创建之前已经存在?我实际上想在创建任何 AWS 资源之前进行相同的检查,但 VPC 是一个开始。最好的!


编辑:发现vpcs.filter可以用来查询给定的VPC标签;例如:

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

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

最佳答案

是的,您需要使用带有 describe_vpcs API 的过滤器。

以下代码将列出同时匹配 Name 标签值和 CIDR block 的所有 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 block 是 VPC 的主要检查。我建议仅使用 CIDR 过滤器 而不是使用 Name 标签进行俱乐部,因为这样您可以防止创建具有相同 CIDR block 的 VPC。

关于python-3.x - Boto3:如何在创建之前检查 VPC 是否已经存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47329675/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com