使用Terraform EKS模块创建集群时遇name参数缺失错误求助
Terraform EKS集群创建:解决"name参数必填但未找到定义"错误
错误原因
- 参数取值错误:
data "aws_eks_cluster"和data "aws_eks_cluster_auth"的name参数需要传入集群名称,但你使用的module.eks.cluster_id是该版本EKS模块输出的集群ARN,不符合参数要求。 - 代码顺序问题:data资源定义在EKS模块之前,Terraform初始解析时无法识别后续模块的输出变量,导致判定
name参数未赋值。 - 冗余操作:terraform-aws-modules/eks/aws模块已直接输出配置Kubernetes Provider所需的所有信息,无需额外通过data资源重复获取。
解决方案(推荐):直接使用模块输出配置Kubernetes Provider
删除冗余的data资源,直接引用EKS模块的输出参数配置Kubernetes Provider,同时调整代码顺序将模块放在前面:
# 先定义EKS模块,确保Terraform先识别其输出变量 module "eks" { source = "terraform-aws-modules/eks/aws" version = "19.16.0" cluster_name = "myapp-eks-cluster" cluster_version = "1.27" subnet_ids = module.myapp-vpc.private_subnets vpc_id = module.myapp-vpc.vpc_id tags = { environment = "development" application = "myapp" } eks_managed_node_groups = [ { instance_type = "t2.small" name = "worker-group-1" asg_desired_capacity = 2 }, { instance_type = "t2.medium" name = "worker-group-2" asg_desired_capacity = 1 }, ] } # 直接使用模块输出配置Kubernetes Provider provider "kubernetes" { host = module.eks.cluster_endpoint token = module.eks.cluster_auth_token cluster_ca_certificate = base64decode(module.eks.cluster_certificate_authority_data) } output "cc-name" { value = module.eks.cluster_name # 如需输出集群名称,使用cluster_name而非cluster_id }
备选方案:修正data资源的使用
如果确实需要保留data资源,需调整代码顺序并修正参数取值:
module "eks" { source = "terraform-aws-modules/eks/aws" version = "19.16.0" cluster_name = "myapp-eks-cluster" cluster_version = "1.27" subnet_ids = module.myapp-vpc.private_subnets vpc_id = module.myapp-vpc.vpc_id tags = { environment = "development" application = "myapp" } eks_managed_node_groups = [ { instance_type = "t2.small" name = "worker-group-1" asg_desired_capacity = 2 }, { instance_type = "t2.medium" name = "worker-group-2" asg_desired_capacity = 1 }, ] } data "aws_eks_cluster" "myapp-cluster"{ name = module.eks.cluster_name # 使用集群名称而非ARN } data "aws_eks_cluster_auth" "myapp-cluster" { name = module.eks.cluster_name # 使用集群名称而非ARN } provider "kubernetes" { host = data.aws_eks_cluster.myapp-cluster.endpoint token = data.aws_eks_cluster_auth.myapp-cluster.token cluster_ca_certificate = base64decode(data.aws_eks_cluster.myapp-cluster.certificate_authority.0.data) } output "cc-name" { value = module.eks.cluster_name }
内容的提问来源于stack exchange,提问作者Fatima
相关产品推荐
相关产品推荐

