我尝试为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"
答案 0 :(得分:0)
原因是- "!Ref TestRedisSubnetAZ2"
作为CloudFormation模板无效,而- !Ref TestRedisSubnetAZ2
不是有效的YAML。因此,使用引用的另一种方法是- Ref: TestRedisSubnetAZ2
。但是- Ref: TestRedisSubnetAZ2
和- "Ref: TestRedisSubnetAZ2"
不相同是不明显的。
- Ref: TestRedisSubnetAZ2
是数组中的嵌套键值。
{
'SubnetIds' => [
{ 'Ref' => 'TestRedisSubnetAZ1' },
{ 'Ref' => 'TestRedisSubnetAZ2' }
]
}
PS:DependsOn
也需要一次性创建堆栈。