Некоторые входные подсети в: [!Ссылка на TestRedisSubnetAZ1, !Ссылка на TestRedisSubnetAZ2] недопустимы

#amazon-web-services #amazon-cloudformation

#amazon-web-services #aws-cloudformation

Вопрос:

Я пытаюсь создать следующий стек CloudFormation для экземпляра Redis (Redis не указан, поэтому просто подсеть и группа подсетей кэша). Как следует из названия, создание TestRedisSubnetGroup завершается неудачей. Я могу создать группу подсети вручную с помощью консоли, и я также могу создать группу подсети, когда я использую идентификатор подсети вместо ref функции. У меня уже есть подсети, потому что сначала стек был создан только с подсетями, и теперь я хочу обновить стек и добавить группу подсетей. (Первый подход состоял в том, чтобы создать подсеть, группу и redis одновременно, но это не удалось с той же ошибкой.)

TL; TR: ref функция работает не так, как ожидалось, в чем я ошибся?

vpc-1743447c является ли VPC по умолчанию с CIDR 172.31.0.0/16

 ---
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:

Причина в том, что - "!Ref TestRedisSubnetAZ2" недопустимо в качестве шаблона CloudFormation и - !Ref TestRedisSubnetAZ2 недопустимо YAML. Таким образом, альтернативный способ использования ссылки - Ref: TestRedisSubnetAZ2 . Но не очевидно, что - Ref: TestRedisSubnetAZ2 и - "Ref: TestRedisSubnetAZ2" это не одно и то же.

- Ref: TestRedisSubnetAZ2 является вложенным ключом-значением в массиве.

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

PS: DependsOn также требуется для создания стека за один раз.