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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:25:05