如何在当前模块中引用从不同模块创建的资源?

问题描述 投票:0回答:1

这就是我的目录的结构:

├── 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"
的模块调用。

amazon-web-services terraform terraform-provider-aws
1个回答
2
投票

错误是正确的。您不能跨不同模块引用变量或输出。相反,你应该有 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
}
© www.soinside.com 2019 - 2024. All rights reserved.