这就是我的目录的结构:
├── directory
├── vpc
│ └── main.tf
├── eks
└── main.tf
里面
vpc/main.tf
,我有:
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
name = "other-tools-vpc"
cidr = "10.0.0.0/16"
# inside 2 azs, create two private subnets and two public subnets each
azs = ["us-east-1a", "us-east-1b"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24"]
// remaining code
}
内部
eks/main.tf
:
module "eks" {
source = "terraform-aws-modules/eks/aws"
version = "18.29.0"
cluster_name = "other-tools-eks"
cluster_version = "1.23"
cluster_endpoint_private_access = true
cluster_endpoint_public_access = true
vpc_id = module.vpc.vpc_id
subnet_ids = module.vpc.private_subnets
// remaining code
}
我想将上面创建的 vpc 分配给我的 eks 集群。我已经尝试了上面的以下方法
vpc_id = module.vpc.vpc_id
但它产生了以下错误:
引用未声明的模块。根模块中未声明名为
"vpc"
的模块调用。
错误是正确的。您不能跨不同模块引用变量或输出。相反,你应该有 parent
main.tf
文件夹:
├── directory
|-- parent_main.tf
├── vpc
│ └── main.tf
├── eks
└── main.tf
并且在
parent_main.tf
中,您必须实例化两个模块:
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
name = "other-tools-vpc"
cidr = "10.0.0.0/16"
# inside 2 azs, create two private subnets and two public subnets each
azs = ["us-east-1a", "us-east-1b"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24"]
// remaining code
}
module "eks" {
source = "terraform-aws-modules/eks/aws"
version = "18.29.0"
cluster_name = "other-tools-eks"
cluster_version = "1.23"
cluster_endpoint_private_access = true
cluster_endpoint_public_access = true
vpc_id = module.vpc.vpc_id
subnet_ids = module.vpc.private_subnets
// remaining code
}
一旦你这样做了,
vpc_id = module.vpc.vpc_id
就会起作用。
或者
先部署
vpc
模块,然后部署eks
模块并将vpc_id
作为输入变量传入eks/main.tf
:
variable "vpc_id" {}
variable "private_subnets" {}
module "eks" {
source = "terraform-aws-modules/eks/aws"
version = "18.29.0"
cluster_name = "other-tools-eks"
cluster_version = "1.23"
cluster_endpoint_private_access = true
cluster_endpoint_public_access = true
vpc_id = var.vpc_id
subnet_ids = var.private_subnets
// remaining code
}