【发布时间】:2020-11-28 02:28:21
【问题描述】:
Terraform v0.12.x
在阅读文档后,我以为我理解了用于代码重用的 Terraform 模块,但显然不是。
假设我想构建一个目标组+EC2 实例基础架构。我有这个目录结构。
/terraform
/terraform/green.tf
/terraform/blue.tf
/terraform/module_ec2/ec2.tf
/terraform/module_tg/tg.tf
例如,/terraform/module_ec2/ec2.tf 有这个
resource "aws_instance" "ec2" {
ami = var.ami
availability_zone = var.availability_zone
....
}
而/terraform/module_tg/tg.tf 有
resource "aws_lb_target_group" "tg" {
name = var.tg_name
...
}
我希望blue.tf 和green.tf 使用module_tg 和moodule_ec2 构建各自的目标组+EC2 基础架构,并将每个模块所需的相应键/值对传递给它们。我该怎么做,即blue.tf和green.tf的内容是什么?
【问题讨论】:
-
terraform.io/docs/configuration/modules.html:
module "ec2" { source="./module_ec2" ... } ... -
我可以在
blue.tf和green.tf文件中包含多个模块吗?如果是这样,我该如何构建blue.tf而不是green.tf,反之亦然? -
是的,每个文件中可以有多个模块。不,你不能独立运行绿色和蓝色,它们在同一个目录中,因此属于同一个部署。
-
啊,我明白了,那么我该如何重构我的目录结构,以便我可以分别运行
blue和green目标,但仍然可以为其他模块重用代码?也许您可以将其放在答案中,因为这一切都说得通。请注意,我有blue和green部署共有的文件(非模块)。谢谢! -
另外,如果我需要
green运行的输出,而我在blue运行中需要它呢?例如,green运行创建了一个 EBS 卷,blue运行如何获取它?
标签: terraform terraform-provider-aws