17

我有一个cloudformation脚本,试图创建一个VPC,每个AZ有一个子网。有没有办法让云信息查询可用区域以创建子网?

当我运行:

aws ec2 describe-availablity-zones 

我得到4个区返回:

"AvailabilityZones": [ 
    { 
     "State": "available", 
     "RegionName": "us-east-1", 
     "Messages": [], 
     "ZoneName": "us-east-1a" 
    }, 
    { 
     "State": "available", 
     "RegionName": "us-east-1", 
     "Messages": [], 
     "ZoneName": "us-east-1b" 
    }, 
    { 
     "State": "available", 
     "RegionName": "us-east-1", 
     "Messages": [], 
     "ZoneName": "us-east-1c" 
    }, 
    { 
     "State": "available", 
     "RegionName": "us-east-1", 
     "Messages": [], 
     "ZoneName": "us-east-1d" 
    } 
] 

然而,当我尝试创建我的筹码,我得到一个错误:

"ResourceStatusReason": "Value (us-east-1a) for parameter availabilityZone 
    is invalid. Subnets can currently only be created in the following 
    availability zones: us-east-1c, us-east-1b, us-east-1d.", 

我用

指定AZ

有没有办法检查AZ是否真的可用于创建子网?

回答

6

不幸的是我有同样的问题。 CloudFormation中无法执行此操作,并且每个AWS账户的区域可能不同。这是VPC基础设施的限制,并且很可能不会改变。你唯一的选择将是硬编码您在CloudFOrmation模板而不是FN ::选择已经找到了区,例如:

“AvailabilityZone”:“我们东-1B”

或者,如果你离开AvailabilityZone空白,默认行为是AWS将自动为您选择一个。

+0

不能让它们留空,因为我们在每个AZ中创建一个带有子网的VPC - 问题并不是每个返回的AZ都允许子网! – chris

+0

因此,如果一个区域不允许使用VPC子网,那么您使用它在VPC中托管的是什么?简单地忽略该区域并处理支持它的3个区域。 – Arya

+0

这是一个手动过程 - 如果我使用索引0,1和2创建基于Fn :: Select的子网,它有时会失败,因为实际上有4个AZ,但不是每个都允许子网 – chris

6

这可能对CLI方法或您确切的方案没有帮助 - 但通过AWS管理控制台,这可以顺利进行。

随着CloudFormation参数的最新更新,您将能够针对与指定的AZ相关的AZ进行指定。

在DR/DR演习和使CFN模板区域独立的过程中,这将会非常方便。

enter image description here

"Parameters": { 
    "SubnetAZ": { 
     "Description": "Availability Zone of the Subnet", 
     "Type": "AWS::EC2::AvailabilityZone::Name" 
    } 
} 

更多信息关于CloudFormation参数

+0

Fn :: GetAZs将提供可用和可用的可用区域,只要您在每个AZ中有一个子网默认的vpc!顺便说一下,只要你不手动删除它们,所有新的aws帐户都有。 – hellomichibye

+0

@Naveen我认为在你的代码段中,你的意思是:'List '而不是'AWS :: EC2 :: AvailabilityZone :: Name' – Somar

2

FN :: GetAZs会,只要你有每个AZ子网默认VPC提供可用的和可用的可用性区域!顺便说一下,只要你不手动删除它们,所有新的aws帐户都有。

+0

我已经看到Fn :: GetAZs返回不可用区域。 –

+0

那么你没有默认子网 – hellomichibye

+0

这是一个非常有趣的_“功能”_。 AWS文档中的任何地方都记录了这一点吗? –

相关问题