首页 文章

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

提问于
浏览
0

我正在使用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

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

2 回答

  • 2

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

    main.tf

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

    模块没有计数 . 它仅在资源可用 .

相关问题