升级Terraform至1.3.5后EKS节点安全组数据源查找失败求助
问题:Terraform升级后无法获取EKS托管节点组自动生成的安全组
背景
将Terraform从1.1.4升级到1.3.5、AWS Provider升级到4.40.0后,原配置中通过data "aws_security_group"查询EKS托管节点组自动生成的安全组时,出现如下错误:
Error: no matching EC2 Security Group found with module.eks-cluster.data.aws_security_group.worker-node-security-group, on eks-cluster/main.tf line 221, in data "aws_security_group" "worker-node-security-group": 221: data "aws_security_group" "worker-node-security-group" {
原配置依赖标签名称过滤安全组,且不希望通过remote_access为Worker节点开放SSH权限。
原因
AWS Provider 4.x版本后,EKS托管节点组自动生成的安全组Name标签格式发生了变化,原过滤规则eks-cluster-sg-${var.prefix}-eks-cluster-${var.active_cluster}-*不再匹配新的命名;同时,Provider新增了直接获取安全组ID的资源属性,无需再通过数据源查询。
解决方案
方案1:直接引用aws_eks_node_group的内置属性(推荐)
AWS Provider 4.x及以上版本中,aws_eks_node_group资源新增了node_security_group_id属性,可直接返回托管节点组自动创建的安全组ID,无需依赖标签查询,这是最可靠的方式。
- 删除原
data "aws_security_group" "worker-node-security-group"块 - 所有需要引用该安全组ID的地方,替换为:
aws_eks_node_group.worker-node-grp.node_security_group_id
方案2:修改数据源过滤规则(兼容原有查询方式)
如果需要保留数据源查询,可改用更稳定的标签过滤条件(基于EKS集群和节点组的官方标签),避免依赖Name标签的格式变化:
data "aws_security_group" "worker-node-security-group" { filter { name = "tag:aws:eks:cluster-name" values = [aws_eks_cluster.eks-cluster.name] } filter { name = "tag:aws:eks:nodegroup-name" values = [aws_eks_node_group.worker-node-grp.node_group_name] } depends_on = [aws_eks_node_group.worker-node-grp] }
这种方式通过EKS自动添加的aws:eks:cluster-name和aws:eks:nodegroup-name标签过滤,不受Name标签格式变更影响,查询结果更稳定。
内容的提问来源于stack exchange,提问作者win
相关产品推荐
相关产品推荐

