我有以下代码,这些代码将调用模块并根据我在locals变量中传递的信息为我创建目标组。一切正常,我的问题是尝试获取输出中创建的每个目标组的信息。
locals {
targetgroups_beta = {
targetgroup1 = {
name = "example",
path = "/",
environment = "Beta"
}
targetgroup2 = {
name = "example2",
path = "/",
environment = "Beta"
}
}
}
module "target-groups"{
for_each = local.targetgroups_beta
source = ".//modules/targetgroups"
name-beta = each.value.name
path-beta = each.value.path
environment-beta = each.value.environment
vpc-id = "${module.vpc.vpc_id}"
}
它正在调用的模块中的资源名称是target-group,因此基于我的阅读,我应该可以通过如下方式引用它:
output{
value = "${aws_lb_target_group.target-group[0].arn}"
}
尝试此操作时,在运行Terraform计划时收到以下消息:
“由于aws_lb_target_group.target-group没有设置“ count”或“ for_each”,因此对其的引用不能包含索引键。删除括号中的索引以引用此资源的单个实例。”
我对此的理解是for_each所调用的模块未运行for_each,因此我无法以这种方式引用资源。如果我执行“” $ {aws_lb_target_group.target-group.arn}“,该引用在技术上是可行的,但包括每个目标组的arn,我计划增加更多。这个列表作为自己的输出?
正在调用的模块中的代码:
resource "aws_lb_target_group" "target-group" {
name = "example-${var.name-beta}"
port = 80
protocol = "HTTP"
vpc_id = var.vpc-id
deregistration_delay = 5
tags = {
Environment = "${var.environment-beta}"
}
health_check{
healthy_threshold = 2
unhealthy_threshold = 2
timeout = 10
interval = 15
path = var.path-beta
}
}
答案 0 :(得分:0)
如果我正确理解,则说明您在for_each
模块中使用target-groups
。如果要获取输出,则必须在main.tf文件中使用以下内容:
module.target-groups[*].arn
for_each
将创建多个模块,而不是单个模块中的多个资源。
Here是将for_each
和count
与terraform 0.13中的模块一起使用的好信息。
如果只想使用一个模块,则可以执行以下操作:
module "target-groups"{
target_groups_to_create = local.targetgroups_beta
source = ".//modules/targetgroups"
name-beta = each.value.name
path-beta = each.value.path
environment-beta = each.value.environment
vpc-id = "${module.vpc.vpc_id}"
}
然后在模块中:
variable "target_groups_to_create" {}
resource "aws_lb_target_group" "target-group" {
for_each = var.target_groups_to_create
name = "example-${each.value.name}"
port = 80
protocol = "HTTP"
vpc_id = var.vpc-id
deregistration_delay = 5
tags = {
Environment = "${each.value.environment}"
}
health_check{
healthy_threshold = 2
unhealthy_threshold = 2
timeout = 10
interval = 15
path = each.value.path
}
}