Как использовать выходное значение CloudFormation в скрипте с Ansible - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь настроить автоматизацию для школьного проекта. Суть этого:

  • Установите экземпляр EC2 через CloudFormation. затем
    • Используйте cfn-init для
      • Установка очень простой конфигурации Ansible
      • Скачать сборник пьес Ansible с S3
      • Запустите указанную книгу воспроизведения, чтобы установить кластер Redshift через CloudFormation
      • Установите необходимые пакеты
      • Установите некоторые необходимые модули Python
      • Загрузите скрипт Python, который будет
      • Подключение к базе данных Redshift
      • Создать таблицу
      • Используйте команду COPY для импорта данных в таблицу

Все это работает до момента выполнения скрипта. Это позволяет работать вручную, но это потому, что я могу скопировать созданную конечную точку Redshift в сценарий для подключения к базе данных. У меня проблема в том, что я не знаю, как извлечь это выходное значение из CloudFormation, чтобы его можно было вставить в сценарий для полностью автоматизированного (за исключением первоначального развертывания EC2) решения.

Я вижу, что у Ansible есть по крайней мере один способ сделать это (например, cloudformation_facts), но я немного запутался, как его реализовать. Я посмотрел на примеры, но это не стало более понятным. Без контекста я потерян, и пока все, что я видел, это отдельные фрагменты.

1 Ответ

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

Чтобы убедиться, что ответ указан в списке:

Я выяснил подкоманды describe-stacks и describe-stack-resources для команды aws cloudformation cli. Используя их, я смог отследить необходимую информацию. В частности, мне нужно было получить доступ к роли. Это команда, которую я использовал:

aws cloudformation describe-stacks --stack-name=StackName --region=us-west-2 \ 
  --query 'Stacks[0].Outputs[?OutputKey==`RedshiftClusterEndpointAddress`].OutputValue' \
  --output text

Сначала я использовал подкоманду describe-stacks, чтобы получить список своих стеков. Соответствующий стек является первым в списке (массив), поэтому я использовал Stacks[0] в верхней части моего запроса для подкоманды describe-stack-recources. Затем я использовал Outputs, так как меня интересует значение из списка вывода CloudFormation. Я знаю имя ключа (RedshiftClusterEndpointAddress), поэтому я использовал его в качестве параметра. Затем я использовал OutputValue, чтобы вернуть значение RedshiftClusterEndpointAddress.

...