我有一个尝试创建VPC的cloudformation脚本,每个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 "AvailabilityZone" : {
"Fn::Select" : [ "0", { "Fn::GetAZs" : "" } ]
},
有没有办法检查AZ是否真的可用于创建子网?
答案 0 :(得分:8)
这可能对CLI方法或您的确切方案没有帮助 - 但使用AWS管理控制台,这可以顺利进行。
通过CloudFormation参数的最新更新,您可以精确定位与指定AZ相关的AZ。
在DR / DR演练期间以及使CFN模板区域独立时,这将非常方便。
"Parameters": {
"SubnetAZ": {
"Description": "Availability Zone of the Subnet",
"Type": "AWS::EC2::AvailabilityZone::Name"
}
}
有关CloudFormation参数
的更多信息答案 1 :(得分:6)
不幸的是我遇到了同样的问题。 CloudFormation中没有方法可以执行此操作,并且每个AWS账户的区域可以不同。这是VPC基础设施的限制,可能不会改变。您唯一的选择是硬编码您在CloudFOrmation模板中找到的区域而不是Fn :: Select,例如:
“AvailabilityZone”:“us-east-1b”
或者,如果您将AvailabilityZone留空,则默认行为将是AWS将自动为您选择一个。
答案 2 :(得分:5)
答案 3 :(得分:-3)
我通过避免使用json作为表达媒介来克服限制。我使用对流层来构建我的cloudformation模板。(https://github.com/cloudtools/troposphere)
然而,您需要在将云信息模板部署到各个区域时部署某种工具。