Terraform - 将输出变量引用到子模块之一

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

我在参考一个 Terraform 结构化项目时遇到了一些麻烦。 尝试在 EKS terraform 中使用两个子网 ID 的输出,但是当我尝试执行

terraform plan
terraform apply
时,我得到的结果是它将为我创建新的子网,但这不是真的,因为我已经在上一步中在 1-vpc/main.tf 中创建了一个

重要的是,我首先运行了

1-vpc
terraform,以便输出变量可用于
2-eks
目录的第二次运行。

文件夹结构:

terraform
└───1-vpc
│   │   main.tf
│   │   output.tf
└───2-eks
│   │   main.tf
│   │   output.tf

在 1-vpc output.tf 中我有以下内容:

output "subnet_a" {
  description = "Subnet A block"
  value = aws_subnet.subnet_a.id
}
output "subnet_b" {
  description = "Subnet B block"
  value = aws_subnet.subnet_b.id
}

以及我试图引用的 2-eks main.tf 文件:

module "vpc" {
  source = "../1-vpc" # Source all the output variables
}

resource "aws_eks_cluster" "my_cluster" {
  name     = "my-cluster"
  role_arn = aws_iam_role.eks_cluster_role.arn

  vpc_config {
    subnet_ids = [ module.vpc.subnet_a, module.vpc.subnet_b ]  
  }

我尝试遵循 terraform 的指南 https://developer.hashicorp.com/terraform/language/values/outputs#accessing-child-module-outputs 没有任何帮助。

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

我会这样做:

terraform
│   main.tf
│   
└─── vpc
│   │   vpc.tf
│   │   output.tf
│   
└─── eks
│   │   eks.tf
│   │   output.tf
│   │   variables.tf

然后

main.tf
会将它们放在一起

module "vpc" {
  source = "./vpc"
}

module "eks" {
  source     = "./eks"
  subnet_ids = [ module.vpc.subnet_a, module.vpc.subnet_b ]
}

就是这样,就像每个模块保持独立一样,代码的“入口”点位于父文件夹而不是模块内,我确信随着您的应用程序的增长,您将需要更多的模块,这样可以保持干净并且对于任何其他开发人员来说都很容易理解。


您可能没有注意到,eks 目录下有一个新的

variables.tf
,这是我们定义输入
subnet_ids
的地方,您可以在其中添加您可能需要的任何其他参数。

variable "subnet_ids" {
  type = list(string)
}
© www.soinside.com 2019 - 2024. All rights reserved.