自定义资源由其他资源组成?

Custom Resources Composed of Other Resources?

我目前正在从事一个 Terraform 项目,以自动化 AWS 中的基础设施。由于我们使用的是非常一致的模式,因此我的想法是创建由多个 AWS 资源组成的自定义 Terraform 资源来 DRY 事情。

在自定义 Go Terraform 资源中是否有一种方法可以简单地由多个 AWS 资源组成?我想要一个名为 app_stack 的资源,它由一个自动缩放组、一个弹性负载均衡器和一个 Route 53 名称组成。我希望我的模块只接受最少的参数,这样它就可以使最终用户免受实现细节的影响。

这在 Terraform 中可行吗?

我想你想使用 Terraform module。模块是作为一个组进行管理的资源集合。

您可以公开模块工作所需的任何变量,因此在您的情况下是 DNS 名称,您希望 ASG 中有多少个实例,等等。然后当您将它包含在您的 terraform 配置中时,您可以指定块,例如:

module "myapp" {
  source = "./app_stack"
  dns_name = "myapp.example.com"
  instances = 5
}

module "meteordemo" {
  source = "./app_stack"
  dns_name = "meteor.example.com"
  instances = 1
}

The docs include a much more comprehensive explanation. Here are some example modules github 供参考。