Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Terraform模块进行代码重用?_Terraform_Terraform Provider Aws - Fatal编程技术网

如何使用Terraform模块进行代码重用?

如何使用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

地形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\u tg
moodule\u EC2
并将每个模块所需的相应键/值对传递给它们,来构建各自的目标组+EC2基础设施。我如何做到这一点,也就是说,
blue.tf
green.tf
的内容是什么?

考虑沿着生命周期边界分解您的地形配置。一组资源的生命周期是从运行
terraform apply
开始到运行
terraform destroy
结束的时间

在您的示例和注释中,您打开了一个EBS卷,该卷应该对绿色和蓝色堆栈都可用。EBS卷或超出任一堆栈的任何其他依赖项应位于单独的文件夹中

要从每个堆栈访问EBS卷或其他长寿命依赖项的详细信息,有几个选项:

  • 使用指向依赖项配置的远程状态的
    terraform\u remote\u state
    数据源
  • 采用命名约定,以便可以使用特定的数据源发现依赖项
  • 作为第1项的变体,在依赖项配置的子文件夹中创建一个输出模块,其中包括一个
    terraform\u remote\u状态
    ,并仅公开配置的输出

  • module“ec2”{source=“/module_ec2”…}…
    我可以在
    blue.tf
    green.tf
    文件中有几个模块吗?如果是这样的话,我如何构建
    blue.tf
    而不是
    green.tf
    ,反之亦然?是的,每个文件中可以有多个模块。不,您不能单独运行green和blue,它们位于同一目录中,因此属于同一部署。啊,我明白了,那么我如何重构我的目录结构,以便可以分别运行
    blue
    green
    目标,但仍然可以为其他模块重用代码?也许你可以把它写进一个答案,因为这一切都是有道理的。请注意,我有
    blue
    green
    部署共用的文件(非模块)。谢谢如果我需要从
    绿色运行中获得
    蓝色运行中需要的输出,该怎么办?例如,如果绿色运行创建了EBS卷,蓝色运行如何获得该卷?