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

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

2
0
1 773
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

Создать модуль в терраформе

Ответ принят как подходящий

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

Рабочие области Terraform

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

Модули Terraform

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

Я уже использую модули для создания ресурсов aws, я решил проблему с помощью рабочей области, как вы упомянули. Я создал отдельное рабочее пространство для каждого виртуального компьютера и связанных с ним ресурсов. Теперь я могу выполнить свой сценарий terraform без каких-либо конфликтов между файлами tfstate.

Hajas 31.10.2018 07:58

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

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

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

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

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