web-dev-qa-db-fra.com

Comment puis-je itération d'une variable de carte dans Terraform

Im essayant de itérer via une carte de type variable et je ne sais pas comment

C'est ce que j'ai jusqu'à présent

Dans ma principale.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}"]
}

Et dans mes variables.tf

variable "account_name" {
   type = "map"
  default = {
      "account1" = "accountA"
      "account2" = "accountB"
}
}

Je veux pouvoir créer plusieurs ressources avec les différents noms de compte

5
TheHairyDoughnut

Si vous utilisez Terraform 0.12.6 ou plus tard, 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 ...
}

L'avantage principal de for_each Over count est que Terraform identifiera les instances de la clé de la carte, de sorte que vous obtiendrez des cas comme aws_route53_record.proxy_dns["account1"] à la place de aws_route53_record.proxy_dns[0], et vous pouvez ainsi ajouter et supprimer des éléments de votre carte à l'avenir avec Terraform Sachez quelle instance spécifique appartient à chaque élément.

each.key et each.value dans les arguments de type de ressource remplacer count.index lorsque for_each est utilisé. Ils évaluent respectivement la clé et la valeur de l'élément de carte actuel.

3
Martin Atkins

Peux-tu essayer:

resource "aws_route_53_record" "proxy_dns" {
    count = "${length(var.account_name)}"
    name = "proxy-${var.account_name[count.index]}-dns
}
1
TimAlonso