Terraform 循环模块

Dev*_*WAH 7 amazon-web-services terraform

我的 terraform 文件中有一个模块,该模块创建了一些执行一些操作的数据库服务器。

首先,它创建一个自动缩放组以使用特定图像,然后创建一些 EBS 卷并附加它们,然后添加一些 lambda 代码,以便在启动实例时注册到路由 53。所以总共有大约 80 行文本。

提炼

module "systemt-sql-db01" {
  source          = "localmodules/tf-aws-asg"
  name            = "${var.envname}-sys-db01"
  envname         = "${var.envname}"
  service         = "dbpx"
  ami_id          = "${data.aws_ami.app_sqlproxy.id}"
  user_data       = "${data.template_cloudinit_config.config-enforcement-sqlproxy.rendered}"
   #subnets         = ["${module.subnets-enforcement.web_private_subnets}"]
  subnets         = ["${element(module.subnets-enforcement.web_private_subnets, 1)}"]
  security_groups = ["${aws_security_group.unfiltered-egress-sg.id}", "${aws_security_group.sysopssg.id}", "${aws_security_group.system-sqlproxy.id}"]
  key_name        = "${var.keypair}"    

  load_balancers       = ["${var.envname}-enf-dbpx-int-elb"]
  iam_instance_profile = "${module.iam_profile_generic.profile_arn}"

  instance_type = "${var.enforcement_instancesize_dbpx}"

  min = 0
  max = 0
}
Run Code Online (Sandbox Code Playgroud)

然后我有两个参数文件,一个在启动预生产时调用,另一个在启动生产时调用。我不希望这些包含变量以外的任何内容。

问题是对于生产我需要调用模块两次,但对于生产我需要调用它三次。

人们谈论模块的计数功能,但我认为目前还不可能。任何人都可以建议任何其他方法来做到这一点?我想要的是能够在我的参数文件中设置所有 DB ASG 名称的列表变量,然后每次循环调用该模块。

我希望这是有道理的?

谢谢你

phz*_*man 8

编辑模块中的循环是 Terraform 0.13 的测试版(https://discuss.hashicorp.com/t/terraform-0-13-beta-released/9555)。

这是 Terraform 中要求很高的功能,如前所述,尚不支持。Terraform v0.12 的后续版本将引入此功能(https://www.hashicorp.com/blog/hashicorp-terraform-0-12-preview-for-and-for-each)。

我有一个类似的问题,我必须从基本 KMS 模块为多个帐户创建多个 KMS 密钥。我最终创建了使用核心 KMS 模块的第二个模块,第二个模块有许多核心模块的实例,但只需要我输入一次帐户详细信息。

这仍然不理想,但它工作得很好,不会使事情变得过于复杂。

  • 根据记录,这在 terraform 0.12 中仍然不起作用。他们不允许“动态”“模块”块 (5认同)