2017-03-14 61 views
2

所以我在我的網絡模板這CloudFormation資源:FN :: GetAZs + FN ::選擇不協同操作

Resources: 
    ... 

    PubSubnetAz2: 
     Type: AWS::EC2::Subnet 
     Properties: 
      VpcId: !Ref Vpc 
      CidrBlock: !FindInMap [VpcCidrs, !Ref "AWS::Region", pubsubnet2] 
      AvailabilityZone: !Select 
      - 1 
      - Fn::GetAZs: !Ref "AWS::Region" 

當我試圖創建這個堆棧我得到這個錯誤:

17:40:06 UTC-0700 CREATE_FAILED AWS::EC2::Subnet PubSubnetAz2 Template error: Fn::Select cannot select nonexistent value at index 1 

該模板驗證,我有一個PubSubnetAz1塊是相同的,並通過,(它選擇index=0雖然)。

我使用的是Fn::GetAZs錯?

PS。據我所知,我使用的是us-west-2區域,有> 1個AZ。

回答

1

以下模板成功地部署了VPC跨多個子網中us-west-2

--- 
AWSTemplateFormatVersion: '2010-09-09' 
Resources: 
    vpc1: 
    Type: AWS::EC2::VPC 
    Properties: 
     CidrBlock: 10.0.0.0/16 
     InstanceTenancy: default 
     EnableDnsSupport: true 
     EnableDnsHostnames: false 
     Tags: 
     - Key: Name 
     Value: My-VPC 
    subnet1: 
    Type: AWS::EC2::Subnet 
    Properties: 
     AvailabilityZone: 
     Fn::Select: 
     - 0 
     - Fn::GetAZs: '' 
     CidrBlock: 10.0.0.0/24 
     VpcId: 
     Ref: vpc1 
     Tags: 
     - Key: Name 
     Value: Subnet-A 
    subnet2: 
    Type: AWS::EC2::Subnet 
    Properties: 
     AvailabilityZone: 
     Fn::Select: 
     - 1 
     - Fn::GetAZs: '' 
     CidrBlock: 10.0.1.0/24 
     VpcId: 
     Ref: vpc1 
     Tags: 
     - Key: Name 
     Value: Subnet-B 

我手動創建的VPC,用於Hava將其轉換爲一個JSON CloudFormation模板,手動插入的Select語句,然後轉化爲YAML使用json2yaml.com

+1

非常適合我!不知道我做了什麼不同,但刪除了'!Ref「AWS:Region」'並用'「」替換了這個工作。謝謝約翰! –

0

Fn::GetAZs文檔顯示像的實例:

mySubnet: 
    Type: "AWS::EC2::Subnet" 
    Properties: 
    VpcId: 
     !Ref VPC 
    CidrBlock: 10.0.0.0/24 
    AvailabilityZone: 
     Fn::Select: 
     - 0 
     - Fn::GetAZs: "" 

它有一個空的區域,這顯然是相當於指定AWS::Region

這也顯示了使用全格式爲例:

"Fn::GetAZs": "" 
"Fn::GetAZs": { Ref: "AWS::Region" } 
"Fn::GetAZs": "us-east-1" 

嘗試一些這些格式,看他們是否正常工作。

+0

剛試過'「」'和同樣的錯誤:/ –