Встроенная функция AWS Cloudformation не оценивается - PullRequest
0 голосов
/ 03 мая 2018

Это часть шаблона облачной информации, который я пишу и получаю сообщения об ошибках, используя функцию Fn::FindInMap:

Parameters:
  VpcStackName:
    Description: >-
      Name of an active CloudFormation VPC stack that contains the networking
      resources, such as the subnet and security group, that will be used in
      this stack.
    Type: String
    MinLength: 1
    MaxLength: 255
    AllowedPattern: '^[a-zA-Z][-a-zA-Z0-9]*$'
    Default: wordpress-dev-vpc

Mappings:
  Instance:
    development:
      AllocatedStorage: 20
      DBInstanceClass: db.t2.micro
    production:
      AllocatedStorage: 25
      DBInstanceClass: db.m3.medium

Resources:
  DBInstance:
      Type: AWS::RDS::DBInstance
      DeletionPolicy: Snapshot
      Properties:
        Engine: MariaDB
        StorageType: gp2
        MasterUsername: !Ref MasterUsername
        MasterUserPassword: !Ref MasterUserPassword
        AllocatedStorage:
          Fn::FindInMap:
            - Instance
            - Fn::ImportValue:
                Fn::Sub: '${VpcStackName}-Environment'
            - AllocatedStorage
        DBInstanceClass:
          Fn::FindInMap:
            - Instance
            - Fn::ImportValue:
                Fn::Sub: '${VpcStackName}-Environment'
            - DBInstanceClass

В другой стек я экспортирую ${VpcStackName}-Environment так:

Outputs:
  Environment:
    Description: Environment type of this stack
    Value: !Ref Environment
    Export:
      Name: !Sub '${AWS::StackName}-Environment'

При попытке использовать функцию Fn::FindInMap я получаю эту ошибку:

An error occurred (ValidationError) when calling the ValidateTemplate operation: Template error: every Fn::FindInMap object requires three parameters, the map name, map key and the attribute for return value

Любой совет?

На основании документации по https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-findinmap.html поддерживаемые функции внутри функции Fn::FindInMap: Fn::FindInMap и Ref. Так есть ли другой способ сделать это? Например, сохранить значение Fn::ImportValue: !Sub '${VpcStackName}-Environment' во временной переменной?

1 Ответ

0 голосов
/ 05 августа 2019

Согласно этому документу, функция Fn::FindInMap может использоваться только с этими:

  • Fn::FindInMap
  • Ref

То есть Fn::ImportValue и Fn::Sub не будут оцениваться.

...