v0.12.6以降のループ処理について。
countの問題点:
Manage Similar Resources with For Each | Terraform - HashiCorp Learn:
locals { users = [ "user01", "user02", ] } resource null_resource user { for_each = toset(local.users) triggers = { user = each.value } }
terraform plan -target null_resource.user ... # null_resource.user["user01"] will be created + resource "null_resource" "user" { + id = (known after apply) + triggers = { + "user" = "user01" } } # null_resource.user["user02"] will be created + resource "null_resource" "user" { + id = (known after apply) + triggers = { + "user" = "user02" } }
index(local.users, each.value)
locals { ses_email_ids = { slack-channel1 = { email = "user1@example.com" }, } } resource "aws_ses_email_identity" "main" { for_each = local.ses_email_ids email = each.value.email }
ses_id_arns = concat( values(aws_ses_email_identity.main)[*].arn, [data.aws_ses_domain_identity.domain1.arn], )
variable users { type = map(map(string)) default = { user01 = { home = "/home/user01" shell = "/bin/bash" } www01 = { home = "/var/www/html" shell = "/bin/false" } } } resource null_resource user { for_each = var.users triggers = { user = each.key home = each.value.home shell = each.value.shell } }
terraform plan ... # null_resource.user["user01"] will be created + resource "null_resource" "user" { + id = (known after apply) + triggers = { + "home" = "/home/user01" + "shell" = "/bin/bash" + "user" = "user01" } } # null_resource.user["www01"] will be created + resource "null_resource" "user" { + id = (known after apply) + triggers = { + "home" = "/var/www/html" + "shell" = "/bin/false" + "user" = "www01" } } Plan: 2 to add, 0 to change, 0 to destroy.
output "user_home" { value = [ for value in null_resource.user : value.home ] }
locals { # ses dkimのdataリソースで参照したほうが良いが、まだ存在しない ses_dkim = [ { "type" = "CNAME" "name" = "dummy1._domainkey.example.com" "value" = "dummy1.dkim.amazonses.com" }, { "type" = "CNAME" "name" = "dummy2._domainkey.example.com" "value" = "dummy2.dkim.amazonses.com" }, { "type" = "CNAME" "name" = "dummy3._domainkey.example.com" "value" = "dummy3.dkim.amazonses.com" }, ] } resource "aws_route53_record" "ses_dkim" { for_each = { for i in local.ses_dkim : i.name => i } zone_id = data.aws_route53_zone.example_com.zone_id name = each.value.name type = each.value.type ttl = "600" records = [each.value.value] }