Terraform для создания нескольких виртуальных процессоров путем повторного выполнения одного и того же main.tf - PullRequest
0 голосов
/ 26 октября 2018

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

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

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

Рабочие пространства Terraform

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

Модули Terraform

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

0 голосов
/ 29 октября 2018

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

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

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

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

0 голосов
/ 26 октября 2018

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

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

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

Создание модуля в terraform

...