基于 terraform 中 count.index 的属性差异

ete*_*yro 4 terraform

我正在使用 Hashicorp terraform 在 AWS 上创建 MySQL 集群。我创建了一个名为的模块mysql,并希望将创建的第一个实例标记为master. 但是,根据 terraform 文档:

\n\n
\n

模块当前不支持 count 参数。

\n
\n\n

我该如何解决这个问题?目前,我的文件中有这些:

\n\n
$ cat project/main.tf\nmodule "mysql_cluster" {\n  source = "./modules/mysql"\n  cluster_role = "${count.index == "0" ? "master" : "slave"}"\n}\n\n$ cat project/modules/mysql/main.tf\n..\nresource "aws_instance" "mysql" {\n  ami           = "ami-123456"\n  instance_type = "t2.xlarge"\n  key_name      = "rsa_2048"\n\n  tags {\n    Role = "${var.cluster_role}"\n  }\n\n  count = 3\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这会引发错误:

\n\n
$  project git:(master) \xe2\x9c\x97 terraform plan\n\nError: module "mysql_cluster": count variables are only valid within resources\n
Run Code Online (Sandbox Code Playgroud)\n\n

variables.tf我在 mysql 模块和根模块的文件中声明了必要的变量。我该如何解决这个问题?预先感谢您的任何帮助!

\n

Nat*_*han 5

count您在资源中的方式module将推断您希望创建 3 个模块,而不是创建的模块内的 3 个资源。您可以规定资源的计数module,但任何使用的逻辑都count.index需要位于模块内。

主.tf

module "mysql_cluster" {
  source          = "./modules/mysql"
  instance_count  = 3
}
Run Code Online (Sandbox Code Playgroud)

mysql.tf

resource "aws_instance" "mysql" {
  count         = "${var.instance_count}"
  ami           = "ami-123456"
  instance_type = "t2.xlarge"
  key_name      = "rsa_2048"

  tags {
    Role        = "${count.index == "0" ? "master" : "slave"}"
  }
}
Run Code Online (Sandbox Code Playgroud)