首页 > 解决方案 > 基于 terraform 中 count.index 的属性差异

问题描述

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

模块目前不支持 count 参数。

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

$ cat project/main.tf
module "mysql_cluster" {
  source = "./modules/mysql"
  cluster_role = "${count.index == "0" ? "master" : "slave"}"
}

$ cat project/modules/mysql/main.tf
..
resource "aws_instance" "mysql" {
  ami           = "ami-123456"
  instance_type = "t2.xlarge"
  key_name      = "rsa_2048"

  tags {
    Role = "${var.cluster_role}"
  }

  count = 3
}

这会引发错误:

$  project git:(master) ✗ terraform plan

Error: module "mysql_cluster": count variables are only valid within resources

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

标签: terraform

解决方案


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

主文件

module "mysql_cluster" {
  source          = "./modules/mysql"
  instance_count  = 3
}

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"}"
  }
}

推荐阅读