:[!Ref TestRedisSubnetAZ1,!Ref TestRedisSubnetAZ2]中的某些输入子网无效

时间:2019-03-05 18:03:21

标签: amazon-web-services amazon-cloudformation

我尝试为Redis实例创建以下CloudFormation堆栈(Redis被省略,因此仅子网和缓存子网组)。 如标题所述,创建TestRedisSubnetGroup确实失败。我可以使用控制台手动创建子网组,也可以在使用子网ID代替ref函数时创建子网组。我已经有子网,因为首先仅使用子网创建了堆栈,现在我想更新堆栈并添加子网组。 (第一种方法是同时创建子网,组和Redis,但失败并出现相同的错误。)

TL; TR:ref函数无法按预期运行,我怎么了?

vpc-1743447c是具有CIDR 172.31.0.0/16的默认VPC

---
AWSTemplateFormatVersion: '2010-09-09'
Description: RedisStack
Resources:
  TestRedisSubnetAZ1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: vpc-1743447c
      AvailabilityZone: eu-central-1a
      CidrBlock: 172.31.64.0/24
      MapPublicIpOnLaunch: false
      Tags:
      - Key: Name
        Value: TestDeletionPolicyStack-AZ1
  TestRedisSubnetAZ2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: vpc-1743447c
      AvailabilityZone: eu-central-1b
      CidrBlock: 172.31.65.0/24
      MapPublicIpOnLaunch: false
      Tags:
      - Key: Name
        Value: TestDeletionPolicyStack-AZ2
  TestRedisSubnetGroup:
    Type: AWS::ElastiCache::SubnetGroup
    Properties:
      Description: Test Redis Subnet Group
      SubnetIds:
      - "!Ref TestRedisSubnetAZ1"
      - "!Ref TestRedisSubnetAZ2"

1 个答案:

答案 0 :(得分:0)

原因是- "!Ref TestRedisSubnetAZ2"作为CloudFormation模板无效,而- !Ref TestRedisSubnetAZ2不是有效的YAML。因此,使用引用的另一种方法是- Ref: TestRedisSubnetAZ2。但是- Ref: TestRedisSubnetAZ2- "Ref: TestRedisSubnetAZ2"不相同是不明显的。

- Ref: TestRedisSubnetAZ2是数组中的嵌套键值。

{
  'SubnetIds' => [
    { 'Ref' => 'TestRedisSubnetAZ1' },
    { 'Ref' => 'TestRedisSubnetAZ2' }
  ]
}

PS:DependsOn也需要一次性创建堆栈。