Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Terraform 基于地形中count.index的属性差异_Terraform - Fatal编程技术网

Terraform 基于地形中count.index的属性差异

Terraform 基于地形中count.index的属性差异,terraform,Terraform,我正在使用Hashicorp terraform在AWS上创建一个MySQL集群。我创建了一个名为mysql的模块,并希望将创建的第一个实例标记为master。然而,根据地形文件: 模块当前不支持count参数 我如何解决这个问题?目前,我的文件中有以下内容: $ cat project/main.tf module "mysql_cluster" { source = "./modules/mysql" cluster_role = "${count.index == "0" ? "m

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

模块当前不支持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
文件中声明了必要的变量。我如何解决这个问题?提前感谢您的帮助

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

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

模块没有计数。它仅在参考资料中提供。

由于Terraform 0.13,您可以使用for_each或count创建模块的多个实例

variable "regions" {
  type = map(object({
    region            = string
    network           = string
    subnetwork        = string
    ip_range_pods     = string
    ip_range_services = string
  }))
}

module "kubernetes_cluster" {
  source   = "terraform-google-modules/kubernetes-engine/google"
  for_each = var.regions

  project_id        = var.project_id
  name              = each.key
  region            = each.value.region
  network           = each.value.network
  subnetwork        = each.value.subnetwork
  ip_range_pods     = each.value.ip_range_pods
  ip_range_services = each.value.ip_range_services
}
从中截取的代码

官方文件