list - Terraform:如何使用列表或地图在 azurerm 中配置多个存储容器?
问题描述
我正在尝试创建多个存储容器来存储 Terraform 中多个组件组的远程状态。
我的环境中有基础设施、前端、后端和堡垒 vm,每个都有自己的 .tf 模板,因此我可以将它们单独部署为基础设施的功能单元。
稍后我可能需要添加更多类型,这表明我需要将组件/环境列表存储为变量,然后将其分块以创建后端存储容器。
这里的主要假设是我可以使用相同的存储帐户,但我需要为每个远程状态提供单独的容器,否则它们会混合在一起。
- 那个评价是真的吗?
- 如何使用列表或其他可以最大限度地减少代码重复的设备在语法上完成它?
诚然,我是 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 中的元素等,但没有得到任何牵引力。我在这里想念什么?
解决方案
对于评估,我认为它并不完全正确。如果您只需要每个独立组件的一个状态文件。我认为只有一个容器就足够了。您可以为每个单独的组件创建一个具有不同名称的状态文件,以便您直接找到具有特殊名称的特殊文件。如果要保留所有状态文件并为每个部署的一个组件设置不同的名称,那么评估是对的,您需要多个容器用于 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
}
推荐阅读
- vue.js - Vue3 在哪里存储敏感的环境变量?
- c - 停止此 SUID 程序读取任何其他文件
- scala - 如何在 Spark 中获取数组列的所有组合?
- sorting - SAS 9.3 和 SAS 9.4 左连接排序顺序
- kubernetes - 无法通过 istio 使用浏览器从外部获取产品页面
- android - 在后台捕获屏幕截图
- oauth-2.0 - 对多个客户端的 Oauth2 权限
- java - Java:在已编译的 .jar 中读取图像/文件并抛出 NullPointerException
- python - 使用 chromedriver 和 selenium 时出现错误
- json - 如何在没有地图和for循环的情况下在反应中渲染每个属性值?