Зачем мне нужен дополнительный элемент в AWS CloudFormation для интерполяции переменных - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь передать пользовательские данные в экземпляр EC2, созданный в Cloudformation, используя следующее:

      UserData: !Base64
        'Fn::Join':
          - ''
          - - |
              #!/bin/bash -xe
              echo '
            - !Ref 'someVar'
            - |
              ' > /tmp/some-content

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

#!/bin/bash -xe
echo '
some string passed as parameter' > /tmp/some-content

Но если я удалю - из части! Ref, он обрабатывает! Ref как строку:

      UserData: !Base64
        'Fn::Join':
          - ''
          - - |
              #!/bin/bash -xe
              echo '
              !Ref 'License'
              ' > /tmp/some-content

Вот расширенные пользовательские данные.

#!/bin/bash -xe
echo '
!Ref 'someVar'
' > /tmp/some-content

Почему это происходит? Является ли это облачной информацией внутренней вещью, которая расширяется! Ссылочные переменные, только если они одни в качестве элемента в списке?

1 Ответ

4 голосов
/ 19 марта 2020

Не было бы проще сделать это следующим образом:

  UserData: 
    Fn::Base64: !Sub |
          #!/bin/bash -xe 
          echo "${someVar}" > /tmp/some-content

В принципе, нет необходимости использовать Join и страдать. используйте !Sub |, с которым гораздо менее болезненно работать. Код намного удобнее для чтения и более прост в управлении.

...