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

无法从Terragrunt输入文件向Terraform传递数组参数问题(Azure Key Vault)

问题原因及解决方案

核心问题1:Terragrunt输入语法错误

你的terragrunt.hcl中,access_policies列表的两个策略对象之间缺少逗号,导致HCL解析异常,最终传递给Terraform的变量结构错乱,触发object_id需要字符串的错误。

核心问题2:类型不匹配

Terraform变量access_policies定义的是set(object({ object_id = set(string), ... })),但Terragrunt传递的object_id既有列表(["xyz", "abc"])又有集合(toset(["3db"])),虽然Terraform能自动转换类型,但容易引发解析异常。


修复步骤

  1. 修正Terragrunt的语法错误
    在terragrunt.hcl的两个策略对象之间添加逗号:

    inputs = {    
      access_policies = [    
        { object_id = ["xyz", "abc"], secret_permissions = ["Get", "Set"], key_permissions = ["Get"] },
        { object_id = include.env.locals.env_vars.locals.object_id1, secret_permissions = ["Get"], key_permissions = ["Get"] }    
      ]    
    }
    
  2. 统一类型(二选一即可)
    选项A:修改Terraform变量定义,将object_id改为list(string)(更兼容Terragrunt的列表输入)

    variable "access_policies" {    
      type = set(object({    
        object_id = list(string),    
        secret_permissions = set(string),    
        key_permissions = set(string)    
      }))
    }
    

    选项B:在Terragrunt中统一将object_id转为集合

    inputs = {    
      access_policies = [    
        { object_id = toset(["xyz", "abc"]), secret_permissions = toset(["Get", "Set"]), key_permissions = toset(["Get"]) },
        { object_id = include.env.locals.env_vars.locals.object_id1, secret_permissions = toset(["Get"]), key_permissions = toset(["Get"]) }    
      ]    
    }
    
  3. 验证修复
    执行terragrunt plan,确认错误消失,变量传递正常。


关于错误中提到的TF_VAR_access_policies:这是Terragrunt自动将inputs中的变量转换为环境变量传递给Terraform的机制,属于正常行为,并非你手动定义的环境变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 05:50:54