Хобрук: Ваш путь к мастерству в программировании

Как назначить и экспортировать переменную с помощью Terraform

Я хочу получить пароль со стороннего сервера с помощью API, а затем назначить его в хранилище параметров:

Первоначально я думаю, что могу использовать $TF_VAR_password в качестве моста для достижения этого:

шаг 1: создайте файл .env:

cat test.env 
export TF_VAR_password=< 3rd party API to get the password, say 123456 >

Шаг 2: используйте Terraform null_resource для выполнения test.env, чтобы экспортировать TF_VAR_password:

resource "null_resource" "get_password" {
  triggers = {
    always_run = "${timestamp()}"
  }

  provisioner "local-exec" {
    command = "source ./${path.module}/test.env"
  }
}

шаг 3: назначьте TF_VAR_password (т.е. var.password) для хранилища параметров:

resource "aws_ssm_parameter" "abc" {
  value             = var.password  <---------
  ...
}

когда я запускаю вышеупомянутый Terraform, он показывает: Выполнение: [/bin/sh -c source ./../../../../aws/modules/test.env]

Но когда я запускаю echo $TF_VAR_password, он не показывает $TF_VAR_password как 123456.

Если я запускаю source ./../../../../aws/modules/test.env напрямую, я вижу, что $TF_VAR_password становится 123456, что означает, что сам скрипт правильный.

Как я могу получить и назначить пароль со стороннего сервера для хранилища параметров?


  • Дочерние процессы (terraform) не могут изменять родительскую среду. 16.01.2021
  • @John Hanley: можно ли тогда как-нибудь назначить TF_VAR_password? Спасибо. моя первоначальная цель - получить откуда-то пароль и назначить его серверу RDS, который запускается с помощью Terraform. Для этого я использую TF_VAR_password в качестве переменной для получения пароля, а затем назначаю его атрибуту пароля RDS, и при запуске terraform apply эти действия выполняются автоматически. 16.01.2021
  • В таком случае мой комментарий не применим. Я думал, вы пытаетесь установить переменную среды внутри Terraform, а затем использовать эту переменную позже в родительской оболочке. Если ваша цель - передать переменную среды процессу, выполняемому terraform (пример local-exec), то ответ @Marcin хорош. 16.01.2021
  • Джон Хэнли, я хочу получить пароль с другого сервера с помощью API (здесь я установил его как 123456, просто чтобы упростить объяснение) и назначить его ресурсу aws_db_instance.default.password с помощью terraform, и я думаю, что TF_VAR_password — это способ добиться этого. но я не знаю, как заставить его работать. если это не решение и есть другой хороший способ. пожалуйста, не стесняйтесь поделиться 16.01.2021
  • Я рекомендую обновить ваш вопрос, чтобы точно показать, что вам нужно сделать. Ваш текущий вопрос довольно беспорядочный. 16.01.2021
  • @John Hanley: я обновил вопрос. это яснее? 16.01.2021

Ответы:


1

У HashiCorp есть выделенный источник данных под названием внешний. позволит вам вызвать свой API, получить пароль, а затем вернуть его в сценарий TF для последующего использования.

Это потребует от вас возврата результатов в формате JSON, как показано в документы.

16.01.2021
  • Марчин: что такое ПАРОЛЬ = var.password? Я хочу экспортировать TF_VAR_password, чтобы var.password, потому что 123456, но что будет, если вы установите PASSWORD = var.password? 16.01.2021
  • PASSWORD — это имя переменной ENV, которая будет присутствовать в вашем скрипте. Вы можете переименовать его, как хотите. 16.01.2021
  • Марчин: Я не понял. Я запускаю вашу команду, echo $TF_VAR_tdb_password не показывает 123456, а echo $PASSWORD ничего не показывает 16.01.2021
  • @user389955 user389955 Где и как вы его запускали? Ваша текущая команда source ./${path.module}/test.env не делает ничего echo. 16.01.2021
  • зачем мне эхо? если я source ../../../../aws/modules/test.env напрямую, я увижу, что echo $TF_VAR_tdb_password становится 123456. Я не получаю того же значения, потому что дочерние процессы (терраформирование) не могут изменить родительскую среду, согласно тому, что сказал @John Hanley 16.01.2021
  • Я запускаю его с помощью модуля, я запускаю применение terraform 16.01.2021
  • @ user389955 environment действителен только в вашем command. Не вне его. Я не уверен, чего вы хотите достичь? 16.01.2021
  • Я обновил вопрос. это яснее? 16.01.2021
  • @user389955 user389955 И вы не можете сделать это таким образом. Если вы хотите взаимодействовать с внешним API, вы должны использовать и возвращать результаты в TF, лучше всего использовать Внешний источник данных. Я обновлю ответ этим. 16.01.2021
  • Спасибо, я тестирую и буду обновлять, если это будет полезно. 18.01.2021
  • @ user389955 Нет проблем. Подскажите пожалуйста как будет :-) 18.01.2021
  • @ Марчин: Большое спасибо. оно работает! С удовольствием осваиваю новые знания. будет хорошо для автоматизации. 20.01.2021
  • @ user389955 Нет проблем. Рад, что получилось :-) 20.01.2021
  • Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..