Terraform для создания нескольких виртуальных процессоров путем повторного выполнения одного и того же main.tf

Я пытаюсь создать скрипт terraform, который будет создавать виртуальный частный сервер и другие ресурсы. Я передаю параметры для скриптов из файла.tfvars. Я успешно создал vpc и ресурсы, выполнив скрипт. Теперь я хочу создать другой vpc с тем же набором ресурсов, но с другим набором значений параметров. Я создал новый файл.tfvars с новыми значениями и попытался выполнить его со старым файлом main.tf. Когда я выполняю команду "terraform plan", она показывает, что она удалит vpc, а ресурсы, созданные во время моего первого запуска, создадут новый vpc с новыми значениями. Есть ли способ создания ресурсов, используя тот же файл terraform main.tf и изменяя файл.tfvars.

3 ответа

Решение

Вы столкнулись с проблемой на основе состояния. Когда вы определяете ресурс, вы даете ему имя. Эти имена используются в файле состояния, и именно это заставляет Terraform думать, что вы пытаетесь изменить существующий ресурс. У вас есть несколько способов решить эту проблему, и это зависит от того, что вы действительно делаете.

Terraform Workspaces

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

Модули Terraform

Для меня это звучит так, что вы действительно хотите создать модуль terraform для вашей конфигурации VPC. Затем создайте каждый VPC, используя ваш модуль в том же файле main.tf. Таким образом, у вас будут уникальные имена ресурсов, которые не будут путать управление государством. Вы можете прочитать больше о модулях здесь. Хороший ресурс для информации об этом можно найти в этом блоге.

Это потому, что вы работаете с одним файлом tfstate.

Следующее, что вы можете сделать: 1. Если вы работаете с локальным состоянием: скопируйте весь код в другой каталог и с новым файлом tfvars и работайте там. Это запустит новый чистый tfstate

  1. Если вы работаете с удаленным состоянием: a. Настройте другое удаленное состояние и затем используйте новый файл tfvars, илиb. Создайте другой каталог, вставьте символьный код в этот каталог и замените старый файл конфигурации config и tfvars на новый. У меня есть пример кода работы с несколькими env https://github.com/pradeepbhadani/tf-course/tree/master/Lesson5

  2. Создайте модуль Terraform вашего кода VPC и затем вызовите его из отдельного каталога.

Способ сделать это - создать модуль. Вы должны быть в состоянии вырезать / вставить ваш текущий код в ваш модуль. Вам может понадобиться только удалить определение провайдера из вашего модуля. Затем в вашем новом основном коде (корневом модуле) укажите модуль для каждого набора ресурсов, который вы хотите создать.

Ах, причина, по которой TF пытается удалить ресурсы, которые вы уже создали, заключается в том, что они были захвачены в своем состоянии.

Когда вы создаете модуль, добавьте в него уже созданные ресурсы. TF всегда будет пытаться настроить его в соответствии с кодом, если ресурсы будут удалены, он попытается уничтожить их.

Создать модуль в terraform

Другие вопросы по тегам