Output dal ciclo for_each per ogni risorsa
Ho difficoltà a capire come creare un output per ciascuna risorsa del gruppo target creata da questo codice. Mi piacerebbe poter fare riferimento a ciascuno individualmente in altri moduli. Sembra che for_each lo memorizzi come una mappa, quindi la mia domanda è come potrei ottenere l'arn per targetgroup1 e targetgroup2? Terraform si riferisce normalmente agli output in base al nome della risorsa, quindi sto lottando con questo in questo scenario e anche su come fare riferimento a questi singoli arn. Avrei anche bisogno di lavorare gli output nel for_each o potrei rilasciarlo nel file 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
}
}
Ricevo il seguente errore quando provo a farlo nel file output.tf senza un valore chiave, ma quando ne immetto uno come value = "$ {aws_lb_target_group.target-group [0] .arn}" dice che non è valido. Errore senza valore chiave di seguito:
Errore: chiave di istanza della risorsa mancante
sui moduli \ targetgroups \ output.tf riga 2, nell'output "tg_example_beta": 2: value = "$ {aws_lb_target_group.target-group.arn}"
Poiché aws_lb_target_group.target-group ha impostato "for_each", è necessario accedere ai suoi attributi su istanze specifiche.
Ad esempio, per correlare con gli indici di una risorsa di riferimento, utilizza: aws_lb_target_group.target-group [each.key]
Risposte
La mappa aws_lb_target_group.target-groupgenerata sarà una mappa, con valori chiave di targetgroup2e targetgroup1.
Pertanto, per ottenere i dettagli del singolo gruppo target puoi fare:
output "target-group1-arn" {
value = aws_lb_target_group.target-group["targetgroup1"].arn
}
Per restituirli entrambi come mappa:
output "target-groups-arn-alternatice" {
value = {for k, v in aws_lb_target_group.target-group: k => v.arn}
}
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"
}
Per restituirli entrambi come elenco (l'ordine sarà lo stesso della keysfunzione):
output "target-groups-arn" {
value = values(aws_lb_target_group.target-group)[*].arn
}
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",
]