我正在尝试使用aws cli从头开始设置一个新的VPC。 我需要的VPC基础结构需要各种子网和与之关联的网络ACL。我创建的网络ACL默认情况下不与任何子网关联,因为它是非默认VPC,因此默认关联不到位。这种情况给我带来两种情况:
在创建网络ACL时将网络ACL与子网关联 - create-network-acl aws cli命令不支持它。
替换旧的子网关联 - 要替换子网关联,我需要有一个旧的关联ID。如前所述,没有子网关联已存在,因此没有过去的关联可以替换为。
是否有解决此问题的工作,或者是否支持案例1,是否有任何命令。
答案 0 :(得分:2)
我是AWS的新手,我也有完成任务的任务。我是如何实现的:
# get both resource and client
ec2 = boto3.resource( 'ec2' )
ec2_client = boto3.client('ec2' )
# associating an ACL with a subnet is a mess:
# 1) create your own ACL
# 2) all subnets are connected to a default ACL - find this ACL
# 3) get all the association IDs of this connection
# 4) call replace_network_acl_association with your own ACL ID
# create the ACL in your vpc
networkACL = ec2.create_network_acl( VpcId = vpc.id )
# get default ACL
response = ec2_client.describe_network_acls( NetworkAclIds=[], Filters=[] )
# get association IDs
myAssociations = []
for acl in response['NetworkAcls']:
if( acl["VpcId"] == vpc.id and len( acl['Associations'] ) > 0 ):
myAssociations = acl['Associations']
break
# replace them to our ACL
for a in myAssociations:
ec2_client.replace_network_acl_association(
AssociationId = a['NetworkAclAssociationId'],
NetworkAclId = networkACL.id
)
答案 1 :(得分:1)
使用CLI构建复杂的堆栈是一个非常低级别的解决方案,我不建议这样做。 我会创建一个cloudformation堆栈。它可以是修复堆栈,也可以是具有输入参数的更通用堆栈。您可以轻松地手动测试它,如果它运行良好,那么您可以通过CLI调用create Cloudformation将其集成到您的应用程序中。
答案 2 :(得分:1)
我看到CLI或API(例如BOTO3)的最佳方式是重新关联子网。最初创建子网时,它与默认的VPC ACL相关联。然后您可以自己将其重新关联到正确的ACL。