使用Terraform在同一区域内的AZ中部署EC2实例

我需要使用Terraform在同一区域内的3个可用区域内部署3个EC2实例。 我试图使用以下结构:

variable "AVZ" { type = "map" default = { eu-central-1 = ["eu-central-1a","eu-central-1b","eu-central-1c"] eu-west-1 = ["eu-west-1a","eu-west-1b","eu-west-1c"] } } 

 resource "aws_instance" "web-server0" { count = "${var.AWS_COUNT_WEB}" availability_zone = "${element(split(",", var.AVZ), count.index)}" ami = "${lookup(var.AWS_AMI,var.AWS_REGION)}" key_name = "${var.AWS_KEY_NAME}" instance_type = "${var.AWS_INSTANCE_TYPE}" associate_public_ip_address = "true" vpc_security_group_ids = [ "${aws_security_group.allow_ssh.id}", "${aws_security_group.allow_web.id}" ] tags { Name = "web-server-b${count.index}" Tier = "blue" Role = "Web_Server" } 

但是没有多大帮助。 它根本不工作我收到以下错误:

 At column 11, line 1: split: argument 2 should be type string, got type map in: 

有谁知道我可以如何使用variablestypes映射,而不是string,所以我可以将AZ映射到区域,并根据区域定义查找可用的AZ,并根据结果部署EC2实例?

谢谢Alex

您将AVZ定义为地图,但不使用密钥来访问它。 旧的代码中通常使用split(",", ...) ,而不是使用string值。

所以试试这个插值:

 availability_zone = "${element(var.AVZ[var.AWS_REGION], count.index)}"