Когда вы пишете код Terraform, у вас есть состояние, которое находится в файле tfstate. Состояние сообщает среде, независимо от того, выполняете ли вы развертывание в облаке или локально, как оно должно выглядеть. Когда вы, скажем, хотите обновить среду, tfstate сообщает среде, что есть в данный момент и что можно изменить.

Это отлично подходит для одной среды, но что если у вас несколько сред? Например; разработка, постановка и производство. Вы не хотите всегда менять код для каждой среды. Вместо этого вам нужно разделить среды для разработки, подготовки и производства. В Terraform вы делаете это с помощью Workspaces.

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

Когда вы думаете о данных, будь то несколько файлов на Google Диске или несколько изображений, вы обычно разделяете эти данные. Может быть, вы взяли отпуск и поместили сделанные фотографии в альбом на своем телефоне. Несмотря на то, что изображения остаются изображениями, вы хотите, чтобы они были разделены, чтобы вы могли объединить и упорядочить их.

Рабочие пространства Terraform мало чем отличаются от этих картинок. Когда вы пишете код Terraform, скорее всего, у вас более одной среды. Скорее всего, у вас есть среда разработки, промежуточная среда и производственная среда. При всем хорошем коде языка конфигурации сам код не должен меняться в каждой среде. Основной код, например создаваемые ресурсы, всегда должен быть одинаковым во всех средах. Таким образом, вы будете знать, что код работает на протяжении всего жизненного цикла разработки программного обеспечения (SDLC).

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

Чем полезны рабочие пространства Terraform

Когда вы пишете код Terraform, вы, скорее всего, создаете модуль. Этот модуль может быть чем угодно: от создания корзины S3 в AWS до создания виртуальной машины в Azure. Код для создания этих двух частей облачной инфраструктуры не требует особых изменений. Независимо от того, развертываете ли вы виртуальную машину в процессе разработки, подготовки или производства, скорее всего, вам не нужны разные конфигурации для каждой среды. Почему? Потому что цель всегда состоит в том, чтобы развернуть в рабочей среде то, что уже было протестировано в процессе разработки и подготовки.

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

Создание рабочей области Terraform

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

Создайте рабочее пространство Terraform

В терминале или в VS Code выполните следующую команду:

terraform workspace new dev

Вы увидите вывод, похожий на скриншот ниже.

Обратите внимание, как он говорит, что вы работаете в пустой рабочей области, и он собирается изолировать ваши данные. Это означает, что Terraform не увидит существующую команду tfstate и будет обрабатывать все команды terraform plan и terraform apply так, как если бы вы работали в новой среде.

Попробуйте создать другую рабочую область под названием staging

terraform workspace new staging

Выбор рабочей области Terraform

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

Если вы следовали инструкциям из предыдущего раздела, рабочее пространство, в котором вы сейчас находитесь, должно быть staging. Чтобы переключиться на рабочую область dev, выполните следующую команду:

terraform workspace select dev

Вывод должен быть похож на скриншот ниже.

Поздравляю! Вы успешно создали новое рабочее пространство и научились переключаться между рабочими пространствами.