Terraform 循环浏览地形列表

Terraform 循环浏览地形列表,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,如果我们创建多个aws\u实例资源: variable "cluster_size" { type = number default = 4 } variable "private_subnets" { type = list(string) default = ["subnet-a", "subnet-b", "subnet-c"] } resource "aws_

如果我们创建多个
aws\u实例
资源:

variable "cluster_size" {
  type = number
  default = 4
}

variable "private_subnets" {
  type = list(string)
  default = ["subnet-a", "subnet-b", "subnet-c"]
}

resource "aws_instance" "cassandra" {
  instance_type = var.instance_type
  count         = var.cluster_size
  ami           = var.ami
  key_name      = var.security_key.name
  subnet_id     = var.private_subnets[count.index]
}
如您所见,我有3个专用子网,但要运行4个主机。如何循环浏览
专用子网列表

所以

  • 主机0=子网a
  • 主机1=子网b
  • 主机2=子网c
  • 主机3=子网a(即循环到第一个元件)
例如,Python已经

如何在Terraform的声明性语言中实现循环?

自动完成,在序列的末尾环绕。这几乎是该函数的主要用途,因为他们引入了带方括号的切片表示法

variable "cluster_size" {
  type = number
  default = 4
}

variable "private_subnets" {
  type = list(string)
  default = ["subnet-a", "subnet-b", "subnet-c"]
}

resource "aws_instance" "cassandra" {
  instance_type = var.instance_type
  count         = var.cluster_size
  ami           = var.ami
  key_name      = var.security_key.name
  subnet_id     = element(var.private_subnets, count.index)
}
或者,您可以像在其他编程语言中一样,使用
%
运算符取模:

variable "cluster_size" {
  type = number
  default = 4
}

variable "private_subnets" {
  type = list(string)
  default = ["subnet-a", "subnet-b", "subnet-c"]
}

resource "aws_instance" "cassandra" {
  instance_type = var.instance_type
  count         = var.cluster_size
  ami           = var.ami
  key_name      = var.security_key.name
  subnet_id     = var.private_subnets[count.index % length(var.private_subnets)]
}

第一个选项在需要用方括号切片符号换行时更为常见,在不需要换行时更为常见。

我不确定是否有循环函数,但使用var.private_子网[count.index%length(private_子网)]是否有效-即使用计数的剩余部分除以子网的数量)?