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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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, а затем вызовите его из отдельного каталога.

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