@ user4109728 Это тоже работает, я думаю. Я думаю, до тех пор, пока репо, не содержит кодов модулей, должно быть в порядке. Потому что, если это произойдет, то каждое обновление модулей в каждой ветви будет болезненным. В вашем подходе лучше всего иметь модули в отдельных репозиториях git.

ужно создать и управлять несколькими средами клиентов в AWS, и я хочу использовать Terraform для развертывания всех необходимых ресурсов. Каждая клиентская среда в основном одинакова, за исключением URL-адреса, который они используют для доступа к одному из серверов.

Я собрал конфигурацию Terraform, которая развертывает все ресурсы для данного клиента. НО ... Как мне взять ту же конфигурацию и применить ее к следующему клиенту, не копируя весь каталог Terraform и не дублируя его для каждого клиента. (Я мог бы иметь 100 из них)

Я слышал рабочие пространства и модули или оба. Кто-нибудь видел лучшую статью об этом?

Спасибо

 Davos05 нояб. 2018 г., 16:45
Неworkspacesопределенно модули согласно ответу Фарида. Документы особенно рекомендуют не использовать рабочие пространства для сред или декомпозиции системы. Они для экспериментов или подобных вещей.

Ответы на вопрос(1)

Решение Вопроса

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

Для каждого клиента есть один каталог с файлом terraform, который загружает модуль (модули) и настраивает его. Если вы используетеterraform apply в этом каталоге состояние также будет в этом каталоге. Чтобы ваша команда также могла развернуть и внести изменения, предлагается использоватьбэкенд например, S3, поэтому там будет записано состояние. Обратите внимание, что вы должны настроить бэкэнд для каждого клиента в соответствующем каталоге. Убедитесь, что сервер для каждого клиента не конфликтует (например, используйте другой путь в S3).

Ники Ватт дала хорошую презентацию по этому вопросу. Вы можете посмотреть видеоВот и скользит вВот.

 user410972819 сент. 2017 г., 18:16
Итак, есть определенные метаданные, связанные с конкретным клиентом, которые уникальны, и я могу видеть, как модульный код моего кода облегчит управление этими данными, но как мне управлять состоянием каждого клиента? Вручную построить файловую систему для обслуживания всех клиентов?
 Farid Nouri Neshat06 окт. 2017 г., 23:14
@ user4109728 Это тоже работает, я думаю. Я думаю, до тех пор, пока репо, не содержит кодов модулей, должно быть в порядке. Потому что, если это произойдет, то каждое обновление модулей в каждой ветви будет болезненным. В вашем подходе лучше всего иметь модули в отдельных репозиториях git.
 user410972820 сент. 2017 г., 00:46
Это помогает прояснить ситуацию. Я работал над этим сегодня и пришел к такому же "не очень хорошему" выводу. Похоже, что, хотя S3 помогает с состоянием, он ничего не делает для конкретной конфигурации клиента. Это все еще нуждается в репо, чтобы поддержать. :( Спасибо хоть!
 user410972806 окт. 2017 г., 22:28
У меня был шанс поработать над этим немного больше, и я думаю, что получил его. Все теперь является модулем, и я могу использовать этот модуль для нескольких клиентов. Вот что я сделал ... Создайте конфигурацию "master" terraform и проверьте ее в git (Master). Затем для каждого клиента я проверяю master и создаю ветвь для каждого клиента, изменяю конфигурацию terraform и проверяю ее снова. Видите какие-нибудь дыры в этом подходе? Спасибо! Ваши комментарии очень помогли!
 Farid Nouri Neshat19 сент. 2017 г., 20:41
@ user4109728 Я обновил ответ. Надеюсь, я ответил на ваши вопросы.

Ваш ответ на вопрос