0

我正在尝试创建多个存储容器来存储 Terraform 中多个组件组的远程状态。

我的环境中有基础设施、前端、后端和堡垒 vm,每个都有自己的 .tf 模板,因此我可以将它们单独部署为基础设施的功能单元。

稍后我可能需要添加更多类型,这表明我需要将组件/环境列表存储为变量,然后将其分块以创建后端存储容器。

这里的主要假设是我可以使用相同的存储帐户,但我需要为每个远程状态提供单独的容器,否则它们会混合在一起。

  1. 那个评价是真的吗?
  2. 如何使用列表或其他可以最大限度地减少代码重复的设备在语法上完成它?

诚然,我是 Terraform 初学者,所以我希望我没有掌握 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

}

我尝试了各种符号,包括“计数”(在上面的示例中注释掉)和引用 azurerm_storage_container.ct.name 中的元素等,但没有得到任何牵引力。我在这里想念什么?

4

1 回答 1

0

对于评估,我认为它并不完全正确。如果您只需要每个独立组件的一个状态文件。我认为只有一个容器就足够了。您可以为每个单独的组件创建一个具有不同名称的状态文件,以便您直接找到具有特殊名称的特殊文件。如果要保留所有状态文件并为每个部署的一个组件设置不同的名称,那么评估是对的,您需要多个容器用于 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

}
于 2020-05-08T01:58:06.147 回答