Terraform: инфраструктура на уровне кода | страница 73
Внутри каждой из этих рабочих областей Terraform использует значение key, которое вы указали в конфигурации хранилища, поэтому вы должны найти файлы example1/workspaces-example/terraform.tfstate и example2/workspaces-example/terraform.tfstate. Иными словами, переключение на другую рабочую область равнозначно изменению пути хранения вашего файла состояния.
Рис. 3.6. Terraform создает по одной папке для каждой рабочей области
Это удобно, когда вы уже развернули модуль Terraform и хотите с ним поэкспериментировать (например, попробовать изменить структуру кода), но так, чтобы ваши эксперименты не отразились на состоянии уже развернутой инфраструктуры. Вы можете выполнить команду terraformworkspacenew и развернуть новую копию той же инфраструктуры, но с отдельным файлом состояния.
Вы можете даже сделать так, чтобы этот модуль менял свое поведение в зависимости от того, в какой рабочей области вы находитесь. Для этого он может считывать имя рабочей области с помощью выражения terraform.workspace. Например, в рабочей области по умолчанию можно указать тип сервера EC2 t2.medium, а во всех остальных областях — t2.micro (чтобы, скажем, сделать свои эксперименты более экономными):
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = terraform.workspace == "default" ? "t2.medium" : "t2.micro"
}
Этот код использует тернарный синтаксис, чтобы присвоить параметру instance_type значение t2.medium либо t2.micro в зависимости от значения terraform.workspace. Все подробности о тернарном синтаксисе и условной логике в Terraform изложены в главе 5.
Рабочие области Terraform отлично подходят для быстрого развертывания и удаления разных версий вашего кода, но у них есть несколько недостатков.
• Файлы состояния всех ваших рабочих областей находятся в одном и том же хранилище (например, в одном бакете S3). Это означает, что все они используют аналогичные механизмы аутентификации и управления доступом, что является одной из основных причин, почему они не подходят для изоляции разных окружений, таких как среды для финального тестирования и промышленного применения.
• Рабочие области не видны в коде или терминале без использования команд terraformworkspace. При чтении кода невозможно сказать, в скольких рабочих областях развернут модуль: в одной или десяти, так как выглядят они идентично. Это усложняет обслуживание, поскольку у вас нет полноценного представления о вашей инфраструктуре.