Xza*_*ier 6 amazon-web-services terraform
我很难弄清楚如何为这段代码创建的每个目标组资源输出。我希望能够在其他模块中单独引用每一个。听起来 for_each 将其存储为地图,所以我的问题是如何获得 targetgroup1 和 targetgroup2 的 arn?Terraform 通常按资源名称指代输出,因此在这种情况下我正在努力解决这个问题,以及如何引用这些单独的 arn。我是否还需要将输出处理到 for_each 中,还是可以将其放入 output.tf 文件中?
locals {
target_groups_beta = {
targetgroup1 = {
name = "example",
path = "/",
environment = "Beta"
}
targetgroup2 = {
name = "example2",
path = "/",
environment = "Beta"
}
}
}
resource "aws_lb_target_group" "target-group" {
for_each = local.target_groups_beta
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
}
}
Run Code Online (Sandbox Code Playgroud)
我在没有键值的情况下尝试在 output.tf 文件中执行此操作时收到以下错误,但是当我输入诸如 value = "${aws_lb_target_group.target-group[0].arn}" 之类的值时,它说它无效。下面没有键值的错误:
错误:缺少资源实例键
在 modules\targetgroups\output.tf 第 2 行,在输出“tg_example_beta”中:2:value = “${aws_lb_target_group.target-group.arn}”
由于 aws_lb_target_group.target-group 设置了“for_each”,因此必须在特定实例上访问其属性。
例如,要与引用资源的索引相关联,请使用:aws_lb_target_group.target-group[each.key]
Mar*_*cin 12
该aws_lb_target_group.target-group生成的将是一个图,用的键值targetgroup2和targetgroup1。
因此,要获取单个目标组的详细信息,您可以执行以下操作:
output "target-group1-arn" {
value = aws_lb_target_group.target-group["targetgroup1"].arn
}
Run Code Online (Sandbox Code Playgroud)
要将两者都作为地图返回:
output "target-groups-arn-alternatice" {
value = {for k, v in aws_lb_target_group.target-group: k => v.arn}
}
Run Code Online (Sandbox Code Playgroud)
target-groups-arn-alternatice = {
"targetgroup1" = "arn:aws:elasticloadbalancing:us-east-1:xxxx:targetgroup/example-example/285b26e15221b113"
"targetgroup2" = "arn:aws:elasticloadbalancing:us-east-1:xxxx:targetgroup/example-example2/075bd58359e4c4b2"
}
Run Code Online (Sandbox Code Playgroud)
将两者作为列表返回(顺序与keys函数相同):
output "target-groups-arn" {
value = values(aws_lb_target_group.target-group)[*].arn
}
Run Code Online (Sandbox Code Playgroud)
target-groups-arn = [
"arn:aws:elasticloadbalancing:us-east-1:xxxx:targetgroup/example-example/285b26e15221b113",
"arn:aws:elasticloadbalancing:us-east-1:xxxx:targetgroup/example-example2/075bd58359e4c4b2",
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3881 次 |
| 最近记录: |