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



Рис. 3.3. Добавление «переборок» в архитектуру Terraform

Как проиллюстрировано на рис. 3.3, мы описываем все наши среды не в одном наборе конфигурационных файлов (вверху), а в разных наборах (внизу), поэтому проблема в одной среде полностью изолирована от других. Файлы состояния можно изолировать двумя способами.

Изоляция через рабочие области. Подходит для быстрых изолированных проверок с одной и той же конфигурацией.

• Изоляция с помощью описания структуры файлов. Подходит для промышленного использования, когда требуется строгая изоляция между средами.


Изоляция через рабочие области

Вы можете хранить свое состояние Terraform в нескольких отдельных именованных рабочих областях. У Terraform изначально одна рабочая область, которая используется по умолчанию. Чтобы создать новую рабочую область или переключиться между областями, нужно выполнить команду terraformworkspace. Поэкспериментируем с неким кодом Terraform, который развертывает сервер EC2:

resource "aws_instance" "example" {

  ami           = "ami-0c55b159cbfafe1f0"

  instance_type = "t2.micro"

}

Сконфигурируйте для этого сервера хранилище на основе бакета S3 и таблицы DynamoDB, которые вы создали ранее в этой главе, но в качестве значения для key укажите workspaces-example/terraform.tfstate:

terraform {

  backend "s3" {

    # Поменяйте это на имя своего бакета!

    bucket = "terraform-up-and-running-state"

    key    = "workspaces-example/terraform.tfstate"

    region = "us-east-2"

    # Замените это именем своей таблицы DynamoDB!

    dynamodb_table = "terraform-up-and-running-locks"

    encrypt        = true

  }

}

Выполните команды terraforminit и terraformapply, чтобы развернуть этот код:

$ terraform init

Initializing the backend...

Successfully configured the backend "s3"! Terraform will automatically use this backend unless the backend configuration changes.

Initializing provider plugins...

(...)

Terraform has been successfully initialized!

$ terraform apply

(...)

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

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

$ terraform workspace show

default

Рабочая область по умолчанию хранит ваше состояние именно в том месте, которое вы указали в параметре key. Как видно на рис. 3.4, взглянув на свой бакет S3, вы увидите файл terraform.tfstate и папку workspaces-example.