我正在尝试通过 Terraform 设置从 Key Vault 到 SQL 服务器的用户名和密码的数据查找。我有 3 个环境:Dev、UAT 和 Prod,并且每个环境都有不同的信用。 var.environment 的每个环境都有一个变量,它在环境 .tfvars 文件中设置。我已经将机密添加到 Key Vault 中并可以通过数据源访问。
我考虑过使用 If OR 但我只能通过它设置 2 个值。
我还研究过使用带有 tomap 的当地人,使用类似的东西
locals{
username = tomap({
devusername = data.azurerm_key_vault_secret.username.value
devpassword = data.azurerm_key_vault_secret.password.value
})
}
administrator_login = local.username[var.environment]
data "azurerm_key_vault_secret" "dev-username" {
name = "sql-username"
key_vault_id = data.azurerm_key_vault.kv.id
}
环境变量设置在 tfvars 级别(每个 env 有一个)
variable "environment" {
type = string
}
但是,您似乎无法将数据值放入地图中,只是想知道是否还有其他方法可以为每个环境设置用户名/密码。
使用 terraform 时根据变量设置 Key Vault 的数据源
感谢 Marko E 的意见。您不需要像提到的那样将名称传递给映射,只是因为您有不同的环境。为了在具有多个环境时传递用户名和密码的输入。
我尝试了一种配置,可能不需要根据要求再次定义本地配置。在创建机密之前,请遵循包含环境名称的命名约定
ex: dev-sql-password & dev-sql-username
这将同时实现下面提到的配置
演示配置:
variable "environment" {
type = string
default = "dev"
}
data "azurerm_key_vault_secret" "sql_username" {
name = "${var.environment}-sql-username"
key_vault_id = data.azurerm_key_vault.example.id
}
data "azurerm_key_vault_secret" "sql_password" {
name = "${var.environment}-sql-password"
key_vault_id = data.azurerm_key_vault.example.id
}
locals {
sql_username = data.azurerm_key_vault_secret.sql_username.value
sql_password = data.azurerm_key_vault_secret.sql_password.value
}
resource "azurerm_mssql_server" "example" {
name = "vksbbsqlserver-${var.environment}"
resource_group_name = data.azurerm_resource_group.example.name
location = data.azurerm_resource_group.example.location
version = "12.0"
administrator_login = local.sql_username
administrator_login_password = local.sql_password
minimum_tls_version = "1.2"
}
部署:
参考:
azurerm_mssql_server |资源 | Hashicorp/azurerm |地形 | Terraform 注册表