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.