AWS CloudFormation GetAtt не работает под Fn :: Sub - PullRequest
1 голос
/ 29 февраля 2020

У меня есть следующие пользовательские данные EC2:

UserData: !Base64
    Fn::Sub: |
      #PROVISIONER_PEER_PASSWORD_INPUT=${AWS::AccountId} ${AWS::StackId} ${AWS::Region}

      #PROVISIONER_PEER_PASSWORD=${pDatabasePassword}

      #PROVISIONER_SHARED_UNIQUE_ID_INPUT=${AWS::AccountId} ${AWS::StackId} ${AWS::Region}

      #PROVISIONER_CFN_RESOURCE=Machine

      #PROVISIONER_CFN_STACK=${AWS::StackName}

      #PROVISIONER_CFN_REGION=${AWS::Region}

      #PROVISIONER_DATA_DISK=/dev/xvdc

      #PROVISIONER_TIER=frontend

      #PROVISIONER_PEER_ADDRESS=
      Fn::GetAtt:
        - rDatabaseCluster
        - Endpoint.Address

      #PROVISIONER_APP_PASSWORD=${pApplicationPassword}

Точка, где код данных пользователя нарушается, находится здесь.

#PROVISIONER_PEER_ADDRESS=
      Fn::GetAtt:
        - rDatabaseCluster
        - Endpoint.Address

Fn :: GetAtt не выполняется / не разрешается. Результат кода пользовательских данных после того, как стек успешно создан, выглядит следующим образом:

#PROVISIONER_PEER_PASSWORD_INPUT=11111333393 arn:aws:cloudformation:us-east-1:171602812093:stack/daxz/16085e70-5b2b-11ea-91e9-122e54527a47 us-east-1

#PROVISIONER_PEER_PASSWORD=Jane85

#PROVISIONER_SHARED_UNIQUE_ID_INPUT=11111333393 arn:aws:cloudformation:us-east-1:171602812093:stack/daxz/16085e70-5b2b-11ea-91e9-122e54527a47 us-east-1

#PROVISIONER_CFN_RESOURCE=Machine

#PROVISIONER_CFN_STACK=daxz

#PROVISIONER_CFN_REGION=us-east-1

#PROVISIONER_DATA_DISK=/dev/xvdc

#PROVISIONER_TIER=frontend

#PROVISIONER_PEER_ADDRESS=
Fn::GetAtt:
- rDatabaseCluster
- Endpoint.Address

#PROVISIONER_APP_PASSWORD=Jane85

Как вы можете видеть, код для Fn::GetAtt вошел в пользовательские данные без изменений до фактического значения. .

#PROVISIONER_PEER_ADDRESS=
    Fn::GetAtt:
    - rDatabaseCluster
    - Endpoint.Address

Как мне заставить Fn::GetAtt работать под Fn::Sub? Или каков наилучший способ получить правильное значение ???

Ответы [ 2 ]

2 голосов
/ 01 марта 2020

вы также можете использовать встроенный GetAtt следующим образом:

!Sub "... ${rDatabaseCluster.Endpoint.Address}"

см. Здесь: Как одновременно использовать функции Sub и GetAtt в шаблоне CloudFormation?

0 голосов
/ 29 февраля 2020

Проблема в том, что у вас есть GetAtt внутри строки. Чтобы делать то, что вы хотите, вам нужно использовать более подробную версию Fn::Sub. Простой пример будет выглядеть так:

Fun::Sub:
  - 'some string ${ValueToReplace}'
  - ValueToReplace: !GetAtt SomeResource.Attribute
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...