我正在尝试使用 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
}
我该如何解决?
答案 0 :(得分:0)
availability_zones
和instances
参数需要一个列表,但是使用splat运算符返回的数据也将返回一个列表。看起来您正在使用方括号传递列表列表,这就是失败的原因。
例如使用v0.12表示法:
availability_zones = aws_instance.web[*].availability_zone
使用v0.11表示法:
availability_zones = aws_instance.web.*.availability_zone
笔记夫妇:
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/"
}