web-dev-qa-db-ja.com

Terraformのマップ変数をどのように繰り返すことができますか

IMは変数型マップを繰り返すようにしようとしています。

これは私がこれまでのものです

Main.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}"]
}
 _

そして私の変数の中で.tf

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

異なるアカウント名を持つ複数のリソースを作成できるようにしたい

5

Terraform 0.12.6以降を使用している場合は、countの代わりに _for_each_ を使用してマップの各要素に1つのインスタンスを作成できます。

_resource "aws_route53_record" "proxy_dns" {
  for_each = var.account_name

  zone_id = infrastructure.zone_id
  name    = "proxy-${each.value}-dns"
  # ... etc ...
}
_

__(somecode)countの主な利点は、Terraformがマップ内のキーでインスタンスを識別することです。将来的には、どの特定のインスタンスが各要素に属しているかを知っているTerraformを使用して、マップから要素を削除します。

_for_eachaws_route53_record.proxy_dns["account1"]aws_route53_record.proxy_dns[0]_が使用されている場合は、_each.key_と_each.valuecount.indexfor_each_を置き換えます。それらはそれぞれ現在のMAP要素の鍵と値に評価されます。

3
Martin Atkins

試すことができます。

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