J'essaye de parcourir une carte de type variable et je ne sais pas comment
C'est ce que j'ai jusqu'à présent
Dans mon main.tf:
variable "account_name" { type = "map" default = { "account1" = "accountA" "account2" = "accountB" } }
Et dans mes variables.tf
resource "aws_route_53_record" "proxy_dns" { count = "${length(var.account_name)}" zone_id = "${infrastructure.zone_id}" name = "proxy-${element(split(",", var.account_name), count.index)}-dns type = CNAME ttl = 60 records = ["{records.dns_name}"] }
Je souhaite pouvoir créer plusieurs ressources avec les différents noms de compte
3 Réponses :
Peux-tu essayer:
resource "aws_route_53_record" "proxy_dns" { count = "${length(var.account_name)}" name = "proxy-${var.account_name[count.index]}-dns }
Faites de la variable une liste au lieu d'une carte. Les cartes sont utilisées pour référencer un nom à une valeur. Les listes sont meilleures pour une itération via une méthode de comptage.
resource "aws_route_53_record" "proxy_dns" { count = "${length(var.account_name)}" zone_id = "${infrastructure.zone_id}" name = "proxy-${element(var.account_name, count.index)}-dns type = CNAME ttl = 60 records = ["{records.dns_name}"] }
variable "account_name" { type = "list" default = {"accountA","accountB"} }
Si vous utilisez Terraform 0.12.6 ou version ultérieure, vous pouvez utiliser for_each
au lieu de count
pour produire une instance pour chaque élément de votre carte:
resource "aws_route53_record" "proxy_dns" { for_each = var.account_name zone_id = infrastructure.zone_id name = "proxy-${each.value}-dns" # ... etc ... }
Le principal avantage de for_each
sur le count
est que Terraform identifiera les instances par la clé dans la carte, vous obtiendrez donc des instances telles que aws_route53_record.proxy_dns["account1"]
au lieu de aws_route53_record.proxy_dns[0]
, et ainsi vous pourrez ajouter et supprimez des éléments de votre carte à l'avenir avec Terraform sachant quelle instance spécifique appartient à chaque élément.
each.key
et each.value
dans les arguments de type de ressource remplacent count.index
lorsque for_each
est utilisé. Ils évaluent respectivement la clé et la valeur de l'élément actuel de la carte.
Puis-je exclure un élément en utilisant for_each?
Vous ne pouvez pas faire cela en utilisant for_each
lui-même, mais vous pouvez produire une nouvelle carte avec certains des éléments filtrés à l'aide d'une expression for
. C'est une question différente de celle à laquelle je répondais ici, donc je ne peux pas entrer dans les détails dans un commentaire ici, mais si vous essayez et avez d'autres questions, je vous suggère de commencer une nouvelle question ici dans Stack Overflow pour en discuter.
résolu en utilisant for with if pour filtrer les valeurs :)