【问题标题】:Fn::GetAZs + Fn::Select not co-operatingFn::GetAZs + Fn::Select 不合作
【发布时间】:2017-08-04 04:48:09
【问题描述】:

所以我的网络模板中有这个 CloudFormation 资源:

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 个可用区。

【问题讨论】:

    标签: yaml amazon-cloudformation


    【解决方案1】:

    Fn::GetAZs 文档显示了如下示例:

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

    它有一个空的Region,显然相当于指定AWS::Region

    它还显示了一个使用完整格式的示例:

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

    尝试其中一些格式,看看它们是否有效。

    【讨论】:

      【解决方案2】:

      以下模板成功在us-west-2 中跨多个子网部署了VPC:

      ---
      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 语句,然后使用 json2yaml.com 转换为 YAML。

      【讨论】:

      • 非常适合我!不知道我做了什么不同,但删除 !Ref "AWS:Region" 并替换为 "" 就可以了。谢谢约翰!
      【解决方案3】:

      我第二次在做 AWS Mysfits 示例演示时遇到了类似的错误。我发现我需要列出我希望使用的可用区以及成功创建的堆栈。

        PrivateSubnetTwo:
          Type: AWS::EC2::Subnet
          Properties:
            AvailabilityZone: us-east-2b
            VpcId: !Ref 'VPC'
            CidrBlock: !FindInMap ['SubnetConfig', 'PrivateTwo', 'CIDR']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-02
        • 2019-02-13
        • 2012-10-19
        • 1970-01-01
        • 2014-07-29
        • 1970-01-01
        相关资源
        最近更新 更多