Прочитайте оригинальную статью в codethat.today
Terraform является де-факто инструментом в арсенале DevOps, и он помогает с использованием развертывания инфраструктуры как кода. Он может управлять и предоставлять программные ресурсы или поставщики через комбинацию файлов и плагинов, удобных для человека и плагинов, которые расширяют платформу, чтобы различные поставщики активировали свои API.
Эта конфигурация инфраструктуры управляется Terraform в файле штата, который является ключевым источником правды о любой топологии ИТ -службы или облачной архитектуре.
Одна конкретная особенность, которую Terraform поддерживает и продвигает, — это сотрудничество. Terraform поддерживает рабочие процессы на основе команды с функцией, известной как удаленные бэкэнды. Бэкэнды — это места, где мы можем хранить этот файл штата Terraform (или TFSTATE на короткое время) в удаленном, но общем пространстве, чтобы любой член команды мог использовать его для управления инфраструктурой.
В этой статье мы увидим, как мы можем обеспечить эту полезную функциональность и использовать ее, чтобы позволить командам сотрудничать друг с другом, чтобы обеспечить надежную инфраструктуру, которая отвечает потребностям бизнеса.
Включение удаленного состояния
Чтобы совместно работать, каждый член команды должен иметь доступ к одному и тому же файлу штата Terraform в общем месте.
Обеспечить это легко. Вы должны иметь подходящий бэкэнд, который поддерживает блокировку файла состояния. Наиболее удобным прямо сейчас является бэкэнд S3, но вы также можете использовать HTTP, ETCD или консул. Вот глобальная конфигурация, предполагая, что мы настроили политику ковша S3:
terraform { backend "s3" { encrypt = true bucket = "terraform-remote-state-storage" region = "us-east-1" key = terraform/state dynamo_table = "terraform-state-lock" } }
Где:
- ведро : Имя ведра S3
- ключ : Имя файла TFState
- шифровать : шифры данные
- Dynamo_Table : Таблица DynamoDB для состояния блокировка
Чтобы включить блокировку с S3, вам необходимо объединить это с таблицей DynamoDB, которая будет использоваться для блокировки файла состояния. Причина, по которой мы нуждаемся в этом, заключается в предотвращении запуска Terraform одновременно, что приводит к конфликтам. Предполагая, что вы установили политики DynamoDB, вам нужно добавить следующий ресурс:
resource "aws_dynamodb_table" "dynamodb-terraform-state-locking" { name = "terraform-state-lock" hash_key = "LockID" read_capacity = 10 write_capacity = 10 attribute { name = "LockID" type = "S" } tags { Name = "DynamoDB Terraform State Locking" } }
Название таблицы должно соответствовать тому, что на бэкэнд S3.
Используя удаленное состояние
Включение удаленного состояния — это только половина работы. Чтобы фактически включить его в практическом примере, вам необходимо использовать его в качестве источника данных. Например, когда у вас есть инфраструктурные команды, которые работают с определенным доменом (настройка сети, зоны доступности, VPCS или DNS), имеет смысл иметь их в качестве отдельных состояний.
Например, когда мы выставляем идентификаторы VPC в выходной переменной:
output "vpc_id" { value = "${aws_vpc.main.id}" }
С удаленными государственными бэкэндами другая команда может просто сделать это:
data "terraform_remote_state" "vpc" { backend = "s3" config { bucket = "terraform-remote-state-storage" key = "terraform/state" region = "eu-east-1" } } module "app" { source = "./child" name = "app" vpc_id = "${data.terraform_remote_state.vpc.vpc_id}" }
Другая команда может предоставить базы данных и учетные данные для хранения приложений:
output "address" { value = "${aws_db_instance.mysql.address}" } output "port" { value = "${aws_db_instance.mysql.port}" }
Тогда другая команда может поглотить это так:
data "terraform_remote_state" "db" { backend = "s3" config { bucket = "terraform-remote-state-storage" key = "terraform/state/mysql" region = "us-east-1" } } module "app" { source = "./child" name = "app" mysql_address = "${data.terraform_remote_state.db.address}" mysql_port = "${data.terraform_remote_state.db.port}" }
Преимущества этого подхода многочисленны; Мы хотим иметь чистую, многократно используемую кодовую базу, которая отображает инфраструктуру и может быть обмен между средами.
Время для сотрудничества DevOps
Момент инфраструктуры определяется с точки зрения кода, который разделяется между командами, она может стать артефактом, который необходимо поддерживать.
Независимо от типа кодовой базы, команды должны определять руководящие принципы и обзоры качества кода. Конечная цель состоит в том, чтобы сделать развертывание до производства легким и максимально без трения. Команды по разработке и операциям могут работать вместе творческими способами, которые уменьшают операционные задержки и улучшают общение.
Оригинал: «https://dev.to/theodesp/using-terraform-remote-state-for-collaboration-4661»