如何用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
相关产品推荐
相关产品推荐

