无法从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能自动转换类型,但容易引发解析异常。
修复步骤
修正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"] } ] }统一类型(二选一即可)
选项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"]) } ] }验证修复
执行terragrunt plan,确认错误消失,变量传递正常。
关于错误中提到的TF_VAR_access_policies:这是Terragrunt自动将inputs中的变量转换为环境变量传递给Terraform的机制,属于正常行为,并非你手动定义的环境变量。
内容的提问来源于stack exchange,提问作者Ashraf Baig
相关产品推荐
相关产品推荐

