Terraform хранит свою конфигурацию и информацию об инфраструктуре, которой он управляет, в файле, называемом state file.
Этот файл используется для отслеживания метаданных и для сопоставления фактических ресурсов с конфигурацией.
По умолчанию этот файл состояния будет находиться локально в папке ваших проектов с именем terraform.tfstate.
Рекомендуется хранить состояния Terraform в высокодоступном удаленном хранилище данных.
Удаленный файл состояния позволяет делиться им между членами команды.
Terraform поддерживает сохранение состояния в:
- Terraform Cloud
- HashiCorp Consul
- Amazon S3
- Google Cloud Storage (GCS)
- Alibaba Cloud OSS
- Swift
- Etcd
- http
- И остальные
Шаг 1: Настройте кластер Consul
Вам нужно иметь работающий кластер Consul, прежде чем вы сможете продолжить настройку.
У нас есть целая статья, посвященные только установке:
☸️ Как установить Cosnul в Kubernetes
Шаг 2: Настройте Terraform для использования Consul
Отредактируйте ваш файл Terraform main.tf и настройте внутреннее хранилище Consul.
# Backend
#terraform {
# backend "local" {
# path = "terraform.tfstate"
# }
#}
terraform {
backend "consul" {
address = "consul.example.com:8500"
scheme = "http"
path = "tf/terraform.tfstate"
lock = true
gzip = false
}
}
Где:
- http://consul.example.com:8500 это URL вашего кластера
- tf/terraform.tfstate это путь к хранилищу consul KV.
- lock – Блокирует ваше состояние для всех операций, которые могли бы записать что-то
- gzip – Используется для сжатия данных о состоянии с помощью gzip
- access_token / CONSUL_HTTP_TOKEN – (Required) Access token
$ terraform init -upgrade=true
Upgrading modules...
....
Initializing the backend...
Successfully configured the backend "consul"! Terraform will automatically
use this backend unless the backend configuration changes.
Initializing provider plugins...
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
$ terraform apply