Terraform: инфраструктура на уровне кода | страница 72



Рис. 3.4. Бакет S3 после сохранения состояния в рабочей области по умолчанию

Создадим новую рабочую область над названием example1, используя команду terraformworkspacenew:

$ terraform workspace new example1

Created and switched to workspace "example1"!

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.

Теперь посмотрите, что получится, если мы попытаемся выполнить terraformplan:

$ terraform plan

Terraform will perform the following actions:

# aws_instance.example will be created

    + resource "aws_instance" "example" {

    + ami                    = "ami-0c55b159cbfafe1f0"

    + instance_type          = "t2.micro"

    (...)

  }

Plan: 1 to add, 0 to change, 0 to destroy.

Terraform хочет создать с нуля совершенно новый сервер EC2! Дело в том, что файлы состояния в каждой рабочей области изолированы друг от друга и, поскольку вы теперь в рабочей области example1, Terraform больше не использует файл состояния из рабочей области по умолчанию. Следовательно, не видит сервер EC2, который был там создан.

Попробуйте выполнить команду terraformapply, чтобы развернуть этот второй сервер EC2 в новой рабочей области:

$ terraform apply

(...)

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Повторим этот пример еще один раз и создадим новую рабочую область под названием example2:

$ terraform workspace new example2

Created and switched to workspace "example2"!

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.

Снова выполните terraformapply, чтобы развернуть третий сервер EC2:

$ terraform apply

(...)

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Теперь у вас есть три рабочие области; в этом можно убедиться с помощью команды terraformworkspacelist:

$ terraform workspace list

  default

  example1

* example2

Вы можете переключиться между ними в любой момент, используя команду terraformworkspaceselect:

$ terraform workspace select example1

Switched to workspace "example1".

Чтобы понять, как это работает внутри, еще раз загляните в свой бакет. Вы должны увидеть новую папку под названием env:, как показано на рис. 3.5.

Рис. 3.5. Бакет S3 после того, как вы начали использовать собственные рабочие области

Внутри env: вы найдете по одной папке для каждой из ваших рабочих областей (рис. 3.6).