Terraform Remote StateFile для нескольких экземпляров одной конфигурации и дизайна Terraform
У меня есть требование создать набор из одинакового количества экземпляров для каждого из наших клиентов. Предположим, мои клиенты - Walmart, Apple и eBay. У каждого клиента одинаковое количество экземпляров, но изменяется конфигурация (подсеть, количество дисков и их размеры, образы ОС). Поэтому я создал файл переменных для каждого клиента и использовал его для запуска экземпляров. До сих пор все работает как положено. Я могу запускать экземпляры для каждого клиента с их собственной конфигурацией, а также могу изменять экземпляры по мере необходимости.
Теперь я пытаюсь переместить файл состояния с моего локального на удаленный. В
backend.tf
как мне взять
key
как динамично? После расследования
backed.tf
не может принимать какие-либо интерполяции (переменные), так как он загружается намного раньше, чем может быть инициализировано ядро Terraform.
- Как мне решить эту проблему? Я попробовал описанный ниже подход, но мне нужно запустить
init
каждый раз, когда я переключаю клиентов.
terraform init --backend-config "key=apple.tfstate"
Есть ли какие-либо фундаментальные проблемы с подходом, который я использовал для создания экземпляров с использованием отдельного файла переменных?
Нужно ли мне использовать единый файл состояния для всех клиентов? если так, то у меня более 40 клиентов, и хранение всех клиентов в одном файле может быть рискованным / громоздким / медленным, верно?
Я не использую Terraform Enterprise или Terraform Cloud. Пожалуйста, дайте мне знать, как действовать. Спасибо!
Я использую команду ниже, чтобы применить изменения терраформ
terraform apply -var-file=customers/apple.tfvars -state=statefile/apple.tfstate
terraform apply -var-file=customers/walmart.tfvars -state=statefile/walmart.tfstate
Структура папки
├── main.tf
└── variables.tf
├── gcp_compute_disk
│ ├── gcp_compute_disk.tf
│ └── variables.tf
├── gcp_instance
│ ├── gcp_instance.tf
│ └── variables.tf
├── customers
│ ├── apple.tfvars
│ ├── ebay.tfvars
│ ├── walmart.tfvars
├── statefile
│ ├── apple.tfstate
│ ├── ebay.tfstate
│ ├── walmart.tfstate