如何在Elb下添加多个实例

时间:2019-07-17 06:58:24

标签: terraform-provider-aws

我正在尝试使用 count 函数在我的肘部下添加4个ec2实例。但是,当我执行模板时,出现以下错误:

错误:属性值类型不正确   在main.tf第19行的资源“ aws_elb”“ web”中:   19:实例= [“ $ {aws_instance.web。*。id}”] 属性“ instances”的值不合适:元素0:需要字符串。

provider "aws" {
  region = "${var.aws_region}"
}

resource "aws_elb" "web" {
  name = "terraform-example-elb"

  # The same availability zone as our instances
  availability_zones = ["${aws_instance.web.*.availability_zone}"]

  listener {
    instance_port     = 80
    instance_protocol = "http"
    lb_port           = 80
    lb_protocol       = "http"
  }

  # The instances are registered automatically
  instances = ["${aws_instance.web.*.id}"]
}

resource "aws_instance" "web" {
  instance_type = "m1.small"
  ami           = "${lookup(var.aws_amis, var.aws_region)}"

  # This will create 4 instances
  count = 4
}

我该如何解决?

2 个答案:

答案 0 :(得分:0)

availability_zonesinstances参数需要一个列表,但是使用splat运算符返回的数据也将返回一个列表。看起来您正在使用方括号传递列表列表,这就是失败的原因。

例如使用v0.12表示法:

availability_zones = aws_instance.web[*].availability_zone

使用v0.11表示法:

availability_zones = aws_instance.web.*.availability_zone

笔记夫妇:

  • ELB无法运行,因为它的运行状况检查失败,直到实例在80开始广播为止。
  • m1.small是老一辈

答案 1 :(得分:0)

我完全同意user11391264的意见,因为您的ELB缺少运行状况检查,将无法正常工作...。请在脚本中添加以下代码。

health_check {
    healthy_threshold   = 3
    unhealthy_threshold = 5
    timeout             = 5
    target              = "${var.elb_healthcheck_target}"
    interval            = 30
}
cross_zone_load_balancing   = true
connection_draining         = true
connection_draining_timeout = 400

variable "elb_healthcheck_target" {
  default = "HTTP:80/"
}