Terraform输出EKS托管插件名称与版本报错求助
Terraform EKS Addon 输出格式错误修复
问题背景
现有Terraform配置用于部署EKS托管插件:
variable "managed_addons" { description = "EKS managed addons" type = map(string) } resource "aws_eks_addon" "this" { for_each = var.managed_addons cluster_name = aws_eks_cluster.this.name addon_name = each.key addon_version = each.value resolve_conflicts_on_update = "OVERWRITE" } # 变量值示例 managed_addons = { vpc-cni = "v1.19.2-eksbuild.1" coredns = "v1.11.4-eksbuild.2" kube-proxy = "v1.29.11-eksbuild.2" }
期望输出格式为key=addon_name,value=addon_version:
vpc-cni = "v1.19.2-eksbuild.1" coredns = "v1.11.4-eksbuild.2" kube-proxy = "v1.29.11-eksbuild.2"
尝试以下output配置时抛出错误:
output "managed_addons" { # value = { aws_eks_addon.this[*].addon_name = values(aws_eks_addon.this).*.addon_version } value = { for k, v in aws_eks_addon.this : k.addon_name => v.addon_version } }
错误信息:Can't access attributes on a primitive-typed value (string)
错误原因
使用for_each遍历aws_eks_addon.this时,k是字符串类型的循环键(对应var.managed_addons的key,也就是插件名称),并非资源对象,因此无法通过k.addon_name访问属性——字符串不存在该属性,这就是报错的核心原因。
解决方案
直接使用循环键k作为输出的key(它本身就是插件名称),资源对象v的addon_version作为value即可:
output "managed_addons" { description = "已部署的EKS托管插件及其版本" value = { for k, v in aws_eks_addon.this : k => v.addon_version } }
验证结果
执行terraform apply完成部署后,运行terraform output managed_addons,将得到与期望完全一致的输出格式:
vpc-cni = "v1.19.2-eksbuild.1" coredns = "v1.11.4-eksbuild.2" kube-proxy = "v1.29.11-eksbuild.2"
内容的提问来源于stack exchange,提问作者psaikia
相关产品推荐
相关产品推荐

