You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform如何跨模块引用Key Vault模块输出的对象映射类型密钥

解决方案

核心问题:当前Key Vault模块的key-vault-secrets输出使用values() + splat运算符返回的是所有密钥值的无序列表,无法通过密钥名称精准定位到指定密钥,是无法正确引用的核心原因。你的整体实现思路没问题,仅需要调整输出结构即可。


步骤1:修改Key Vault模块的输出定义

将原输出调整为map(string)类型,通过遍历密钥实例生成以密钥名称为键、密钥值为值的映射结构,方便按名称查询:

output "key-vault-secrets" {
  type        = map(string)
  description = "Key Vault密钥映射,键为自定义的密钥名称,值为对应的密钥明文"
  value       = { for secret_name, secret_obj in azurerm_key_vault_secret.secret : secret_name => secret_obj.value }
}

步骤2:跨模块引用指定密钥

调整输出后,直接以密钥名称为键即可提取对应值,例如使用secret-x作为PSQL管理员密码的写法如下:

module "psql" {
  source              = "./modules/psql"
  psql_server_name    = var.psql_server_name
  location            = var.location
  prefix              = var.prefix
  environment         = var.environment
  resource_group_name = azurerm_resource_group.rg.name

  administrator_login          = var.administrator_login
  administrator_login_password = module.keyvault.key-vault-secrets["secret-x"]
  # 其余参数省略
}

不推荐的兼容方案

如果坚持不修改原输出定义,只能通过列表下标取值:

administrator_login_password = module.keyvault.key-vault-secrets[0]

注意:该方式风险极高,Terraform中map的values()返回顺序不固定,一旦修改var.secrets的键值对,下标对应的密钥会发生变化,大概率会导致密码被意外修改,引发服务故障。

内容的提问来源于stack exchange,提问作者Winston Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:18:03