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

如何用Terraform向Azure Key Vault添加多个密钥?报错求助

解决Terraform批量向Azure Key Vault添加多个密钥的问题

错误原因分析

你遇到的括号不匹配错误,根源是YAML流水线中secrets变量的JSON格式错误:

  • JSON键值对必须用冒号:分隔,你误用了等号=
  • 变量引用的引号包裹方式不符合JSON规范

错误信息翻译:

预期有一个右括号来终止表达式。
##[错误]Terraform命令'plan'执行失败,退出代码为'1':括号不匹配
##[错误]
错误:括号不匹配

修复步骤

1. 修正YAML流水线中的secrets变量格式

将YAML里的secrets值改为标准JSON格式,键值对用冒号分隔,字符串用双引号包裹:

displayName: DEV
variables: 
  - group: 'Environment - Dev' 
  - name: secrets
    value: '{"testAPIKey1": "$(testAPIKey1)", "testAPIKey2": "$(testAPIKey2)"}'

2. 优化Terraform代码(推荐用for_each替代count)

相比count,用for_each遍历map类型变量更直观,避免索引越界问题,代码可读性更强:

module "keyvault_secret" {
  source = "../../modules/keyvault_secret"

  for_each            = var.secrets
  keyVaultSecretName  = each.key
  keyVaultSecretValue = each.value
  keyVaultId          = data.azurerm_key_vault.key_vault.id
}

variable "secrets" {
  type        = map(string)
  description = "存储要添加到Key Vault的密钥名称和值的映射"
}

3. 确认变量传递逻辑

如果通过variables.tfvars引用流水线变量,需确保正确解析JSON:

secrets = jsondecode(var.secrets)

或者在Terraform命令行中直接传递变量:

terraform plan -var secrets='{"testAPIKey1":"xxx", "testAPIKey2":"yyy"}'

验证模块正确性

确保你的keyvault_secret模块正确定义输入变量,示例模块代码参考:

# modules/keyvault_secret/main.tf
resource "azurerm_key_vault_secret" "secret" {
  name         = var.keyVaultSecretName
  value        = var.keyVaultSecretValue
  key_vault_id = var.keyVaultId
}

# modules/keyvault_secret/variables.tf
variable "keyVaultSecretName" {
  type        = string
  description = "密钥名称"
}

variable "keyVaultSecretValue" {
  type        = string
  description = "密钥值"
}

variable "keyVaultId" {
  type        = string
  description = "Key Vault的ID"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:35:21