如何使用Terraform模块进行代码重用?
地形v0.12.x 在阅读文档后,我认为我理解了Terraform模块的代码重用,但显然不是 假设我想要构建一个目标组+EC2实例基础设施。我有这个目录结构如何使用Terraform模块进行代码重用?,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,地形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_instanc
/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\u tg
和moodule\u EC2
并将每个模块所需的相应键/值对传递给它们,来构建各自的目标组+EC2基础设施。我如何做到这一点,也就是说,blue.tf
和green.tf
的内容是什么?考虑沿着生命周期边界分解您的地形配置。一组资源的生命周期是从运行terraform apply
开始到运行terraform destroy
结束的时间
在您的示例和注释中,您打开了一个EBS卷,该卷应该对绿色和蓝色堆栈都可用。EBS卷或超出任一堆栈的任何其他依赖项应位于单独的文件夹中
要从每个堆栈访问EBS卷或其他长寿命依赖项的详细信息,有几个选项:
terraform\u remote\u state
数据源terraform\u remote\u状态
,并仅公开配置的输出:
module“ec2”{source=“/module_ec2”…}…
我可以在blue.tf
和green.tf
文件中有几个模块吗?如果是这样的话,我如何构建blue.tf
而不是green.tf
,反之亦然?是的,每个文件中可以有多个模块。不,您不能单独运行green和blue,它们位于同一目录中,因此属于同一部署。啊,我明白了,那么我如何重构我的目录结构,以便可以分别运行blue
和green
目标,但仍然可以为其他模块重用代码?也许你可以把它写进一个答案,因为这一切都是有道理的。请注意,我有blue
和green
部署共用的文件(非模块)。谢谢如果我需要从绿色运行中获得蓝色运行中需要的输出,该怎么办?例如,如果绿色运行创建了EBS卷,蓝色运行如何获得该卷?