Предположим, в каталоге проекта у меня есть 2 файла .tf, и я хочу иметь одинаковый файл состояния для обоих файлов .tf. Теперь, если выполнить план для одного файла .tf, мой файл состояния был обновлен, но когда я пытаюсь выполнить план для другого файла .tf, мой файл состояния был обновлен с последним файлом, и он уничтожает ресурсы файла previous.tf
Непонятно, чего вы пытаетесь достичь - возможно, вы могли бы уточнить?
Если у вас есть несколько файлов в каталоге, Terraform должен спланировать и применить оба из них против того же файла состояния (используя объявление Backend). Как говорится в документе:
«Terraform загружает все файлы конфигурации в каталоге, указанном в алфавитном порядке. Конфигурации в загруженных файлах добавляются друг к другу. Это отличается от объединения».
Если вы хотите хранить файлы .tf отдельно, вы можете запускать Terraform из разных каталогов (таким образом создавая несколько файлов состояния) или, в качестве альтернативы, использовать Рабочие места.
Вы можете привязать несколько рабочих пространств к одному бэкэнду (или состоянию). Это позволяет развернуть несколько отдельных экземпляров этой конфигурации. Раньше они назывались «средами», но в версии 0.10 это было переименовано.
Из документа:
Именованные рабочие области позволяют удобно переключаться между несколькими экземплярами одной конфигурации в пределах единой серверной части. Обычно несколько рабочих пространств используются для создания параллельной отдельной копии набора инфраструктуры для проверки набора изменений перед изменением основной производственной инфраструктуры.
Чтобы использовать рабочее пространство, вы должны запустить такую команду:
$ terraform workspace new bar
Created and switched to workspace "bar"!
You're now on a new, empty workspace. Workspaces isolate their state,
so if you run "terraform plan" Terraform will not see any existing state
for this configuration.
Затем вы можете ссылаться на интерполяцию рабочей области в своих ресурсах, чтобы динамически изменять то, что развертывается:
resource "aws_instance" "example" {
count = "${terraform.workspace == "default" ? 5 : 1}"
# ... other arguments
}
Вы действительно ответили на свой вопрос: нет, вы не можете использовать один и тот же файл состояния для нескольких разрозненных операций управления терраформой, потому что файл состояния будет перезаписан, и все, черт возьми, выйдет из строя.