当前使用计数定义代码的方式意味着资源的响应是一个列表。这意味着您需要以不同的方式访问这些值
resource "aws_elb" "fe_elb" {
security_groups = ["${var.https ? element(aws_security_group.https_instance_sg.*.id,0) : element(aws_security_group.http_instance_sg.*.id,0)}"]
.....
}
值得注意的是,如果您尝试使用此方法访问空列表,您将收到错误。
这意味着您需要连接一个空值 https://github.com/hashicorp/terraform/issues/11210每个以确保元素的响应不会抛出。
使用连接的示例
"${var.https ? element(concat(aws_security_group.https_instance_sg.*.id, list("")), 0) : element(concat(aws_security_group.http_instance_sg.*.id, list("")), 0)
不同的方法
如果没有看到代码,我可能会在这里问是否有更简单的方法来实现您想要使用的安全组规则 https://www.terraform.io/docs/providers/aws/r/security_group_rule.html
variable "https" { value = true }
resource "aws_security_group" "instance_sg" {
# notice we no longer have a count here
}
resource "aws_elb" "fe_elb" {
security_groups = ["${aws_security_group.instance_sg.id}"]
.....
}
resource "aws_security_group_rule" "http" {
count = "${var.https ? 0 : 1}"
.... http definitions
security_group_id = "${aws_security_group.instance_sg.id}"
}
resource "aws_security_group_rule" "https" {
count = "${var.https ? 0 : 1}"
.... https definitions
security_group_id = "${aws_security_group.instance_sg.id}"
}