Terraform: как использовать список или карту для предоставления нескольких контейнеров хранения в azurerm? - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь создать несколько контейнеров для хранения удаленного состояния для нескольких групп компонентов в Terraform.

В моей среде есть виртуальные машины инфраструктуры, внешнего интерфейса, серверной части и бастиона, каждая со своим собственным шаблоном .tf, так что я могу развернуть их по отдельности как функциональные единицы инфраструктуры.

Мне может потребоваться добавить другие типы позже, что говорит о том, что мне нужно сохранить список компонентов / сред как переменную, а затем просто разбить его, чтобы создать контейнеры внутреннего хранилища.

Основное предположение здесь заключается в том, что я могу использовать одну и ту же учетную запись хранения, но мне нужны отдельные контейнеры для каждого удаленного состояния, иначе они будут смешиваться.

  1. Верна ли эта оценка?
  2. Как мне выполнить sh это синтаксически, используя список или какое-либо другое устройство, которое минимизирует дублирование кода?

По общему признанию, я новичок в Terraform, поэтому я не схватывание какого-то базового c рудимента HCL. Вот отрывок из моего кода:

variable "component" {
  type    = list
  default = ["bastion", "frontproxy", "db", "infra"]
}

provider "azurerm" {
  version = "~> 2.8"
  features {}
    }

resource "azurerm_storage_account" "sa" {
  name                     = "${lower(var.naming_prefix)}${random_integer.sa_num.result}"
  resource_group_name      = azurerm_resource_group.setup.name
  location                 = var.location
  account_tier             = "Standard"
  account_replication_type = "LRS"

}

resource "azurerm_storage_container" "ct" {
  #count                = length(var.component)
  name                 = "terraform-state${var.component}"
  storage_account_name = azurerm_storage_account.sa.name

}

Я пробовал использовать различные обозначения, включая «count» (закомментировано в примере выше) и ссылки на элементы в azurerm_storage_container.ct.name, et c. и не получил никакой тяги. Что мне здесь не хватает?

1 Ответ

0 голосов
/ 08 мая 2020

Для оценки думаю не совсем правильно. Если вам нужен только один файл состояния для каждого компонента sperate. Думаю, достаточно одной емкости. Вы можете создать один файл состояния для каждого компонента sperate с разными именами, чтобы вы напрямую находили специальный файл со специальным именем. Если вы хотите сохранить все файлы состояния и установить разные имена для каждого развертывания одного компонента, тогда оценка правильная, вам нужно несколько контейнеров для компонента echo sperate.

А затем переходит к коду Terraform, большинство кодов верны, поэтому вам просто нужно изменить код для контейнера следующим образом:

resource "azurerm_storage_container" "ct" {
  count                = length(var.component)
  name                 = "terraform-state-${element(var.component, count.index)}"
  storage_account_name = azurerm_storage_account.sa.name

}
...