有没有办法让cloudformation查询可用区域以创建子网?

时间:2014-01-27 19:58:44

标签: amazon-web-services amazon-cloudformation availability-zone

我有一个尝试创建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是否真的可用于创建子网?

4 个答案:

答案 0 :(得分:8)

这可能对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参数

的更多信息

答案 1 :(得分:6)

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

“AvailabilityZone”:“us-east-1b”

或者,如果您将AvailabilityZone留空,则默认行为将是AWS将自动为您选择一个。

答案 2 :(得分:5)

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

答案 3 :(得分:-3)

我通过避免使用json作为表达媒介来克服限制。我使用对流层来构建我的cloudformation模板。(https://github.com/cloudtools/troposphere

然而,您需要在将云信息模板部署到各个区域时部署某种工具。