Сбой вызова функции AWS CloudFormation: Fn :: ImportValue не должен зависеть от каких-либо ресурсов, импортируемых значений или Fn :: GetAZs - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть шаблон формирования облака (mainVPC), который создает несколько подсетей в VPC и экспортирует подсети с именами "PrivateSubnetA", "PrivateSubnetB" ... У меня есть другой шаблон формирования облака, который создает DBSubnetGroup. Я хочу использовать «PrivateSubnetA», «PrivateSubnetB» в качестве значений по умолчанию, если пользователь не предоставляет данные. CloundFormation не поддерживает импортированные значения в параметрах. Поэтому я поставил некоторое значение по умолчанию (XXXX) и имел раздел условия, чтобы посмотреть, предоставил ли пользователь какой-либо ввод

Conditions:
  userNotProvidedSubnetA: !Equals 
    - !Ref PrivateSubnetA
    - XXXX
  userNotProvidedSubnetB: !Equals 
    - !Ref PrivateSubnetB
    - XXXX

Это помогает мне выяснить, предоставил ли пользователь данные. Теперь я хочу использовать значения по умолчанию, если пользователь не предоставил значения, иначе используйте предоставленные пользователем значения. ниже приведен код для этого

 DBSubnetGroup:
    Type: 'AWS::RDS::DBSubnetGroup'
    Properties:
      DBSubnetGroupDescription: RDS Aurora Cluster Subnet Group
      SubnetIds:
        - !If 
          - userNotProvidedSubnetA
          - Fn::ImportValue:
                !Sub  '${fmMainVpc}-PrivateSubnetA'
          - !Ref PrivateSubnetA
        - !If 
          - userNotProvidedSubnetB
          - Fn::ImportValue:
                !Sub '${fmMainVpc}-PrivateSubnetB'
          - !Ref PrivateSubnetB

Это происходит с ошибкой «Ошибка шаблона: атрибут в Fn :: ImportValue не должен зависеть от каких-либо ресурсов, импортируемых значений или Fn :: GetAZs». ImportValue больше нигде в шаблоне не используется.

Есть ли способ использовать экспортированные значения в качестве значений по умолчанию (значения по умолчанию не могут быть жестко закодированы, они приходят как экспортированные значения из прогона другого стека), в то же время предоставляя возможность пользователям предоставлять свои собственные значения (для создания ресурсы).

Спасибо.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Это также может быть вызвано наличием внутри Fn::ImportValue ссылки на параметр с неправильным именем. Например, если у меня определен следующий параметр NetworkStackName и я неверно ссылаюсь на него в операторе Fn::ImportValue (как NetworkName), я получу эту ошибку. Мне нужно изменить NetworkName, чтобы соответствовать значению в параметрах, NetworkStackName, чтобы исправить ошибку.

Parameters:
  NetworkStackName:
      Type: String
      Default: happy-network-topology
Resources:
  MySQLDatabase:
    Type: AWS::RDS::DBInstance
    Properties:
      Engine: MySQL
      DBSubnetGroupName:
        Fn::ImportValue:
          !Sub "${NetworkName}-DBSubnetGroup"
0 голосов
/ 09 сентября 2018

В настоящее время Cloudformation не поддерживает динамическое значение по умолчанию.Невозможно иметь динамическое значение по умолчанию для CloudFormation.Поскольку шаблон не был выполнен на момент сбора всех параметров.Однако вы можете использовать параметр SSM в качестве обходного пути, как показано ниже.

Parameters
    PagerDutyUrl:
        Type: AWS::SSM::Parameter::Value<String>
        Description: The Pagerduty url

Возвращаясь к вашей текущей облачной информации, я думаю, что значение $ {fmMainVpc} может быть неправильно инициализировано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...