Может ли запуск Terraform применяться параллельно для нескольких инфраструктур / рабочих пространств?

У нас есть один экземпляр terraform и скрипт, который может создавать инфраструктуру в лазурном цвете. Мы хотели бы использовать одни и те же сценарии для создания / обновления / уничтожения изолированной инфраструктуры для каждого из наших клиентов на Azure. Мы достигли этого, назначив одно рабочее пространство для каждого клиента, разные файлы var и используя файлы удаленного состояния серверной части на Azure.

Наша цель - создать программу-оболочку на Python, которая могла бы создавать несколько потоков и запускать терраформирование параллельно для всех рабочих областей. Кажется, это не работает, поскольку terraform запускается для одной рабочей области за раз. Любые предложения / советы о том, как мы можем добиться параллельного выполнения terraform, применяемого для разных рабочих пространств?


person karas27    schedule 28.05.2020    source источник


Ответы (1)


Одновременно запускать несколько процессов Terraform безопасно, если:

  • Все они имеют совершенно разные конфигурации серверной части, как с точки зрения хранения состояний, так и с точки зрения конфигурации блокировки. (Если у них есть перекрывающаяся конфигурация блокировки, они будут мьютексировать друг друга, эффективно сериализуя операции, несмотря на то, что вы запускаете несколько копий.)
  • Они работают с совершенно непересекающимся набором удаленных объектов, включая объекты, представленные как управляемыми ресурсами (resource блоки), так и ресурсами данных (data блоки).

Большинство удаленных API-интерфейсов сами по себе не поддерживают никаких транзакций или мьютексов, поэтому Terraform, как правило, не может предложить детализированное взаимное исключение для отдельных объектов. Однако несколько запусков, которые работают с полностью отдельными удаленными объектами, не будут взаимодействовать друг с другом.

Удаление рабочего пространства (с использованием terraform workspace delete) одновременно с операцией над этим рабочим пространством вызовет неопределенное поведение, потому что, вероятно, будут удалены те самые объекты, которые Terraform использует для отслеживания операции.

Нет встроенной команды Terraform для одновременного выполнения нескольких операций, поэтому для этого потребуется настраиваемая автоматизация, которая обертывает Terraform.

person Martin Atkins    schedule 28.05.2020