Мне нужно повторить итерацию больше раз для определенных пар ключ / значение карты HCL, которые должны быть основаны на значении определенных переменных.
Я пришел к мысли изменить текущую карту, чтобы определенные ключи / значения повторялись больше раз.
Если у нас есть такая карта - назовем ее «map_domains»:
key_1 = value_1
key_2 = value_2
И мы установили эти переменные:
variable "domains" {
type = "list"
default = [
"key_1",
"key_2",
]
}
variable "domain_alt_names" {
type = "map"
default = {
key_1 = "value_1, value_2"
key_2 = "value_3, value_4, value_5"
}
}
Как мы можем изменить карту map_domains на:
key_1 = value_1
key_1 = value_1
key_1 = value_1
key_2 = value_2
key_2 = value_2
key_2 = value_2
key_2 = value_2
Я пытаюсь проверить пару сертификатов AWS ACM с помощью параметра проверки DNS - и каждый из доменов имеет пару альтернативных имен доменов, которые также нуждаются в создании записей DNS в Route53 для правильной проверки сертификатов домена.
Это код, который используется для достижения общей цели - и проблема заключается в идентификаторе зоны, который должен быть одинаковым для первой пары итераций, а затем еще одним для остальных итераций.
Эта строка:
zone_id = "${lookup(local.hosted_zone_ids_zipmap, element(keys(local.hosted_zone_ids_zipmap), count.index))}"
Весь код:
#
# EKS Worker Nodes Resources
# * Issuing ACM certificates
#
resource "aws_route53_zone" "zones" {
count = "${length(var.domains)}"
name = "${element(var.domains, count.index)}"
}
locals {
hosted_zone_ids_zipmap = "${zipmap(var.domains, aws_route53_zone.zones.*.zone_id)}"
}
resource "aws_acm_certificate" "cert" {
count = "${length(var.domains)}"
domain_name = "${element(keys(local.hosted_zone_ids_zipmap), count.index)}"
subject_alternative_names = ["${
lookup(var.domain_alt_names,
"${element(var.domains, count.index)}")
}"]
validation_method = "DNS"
tags {
Domain = "${element(keys(local.hosted_zone_ids_zipmap), count.index)}"
}
}
locals {
dvo = "${flatten(aws_acm_certificate.cert.*.domain_validation_options)}"
}
resource "aws_route53_record" "cert_validation" {
count = "${length(var.domain_alt_names) + length(var.domains)}"
zone_id = "${lookup(local.hosted_zone_ids_zipmap, element(keys(local.hosted_zone_ids_zipmap), count.index))}"
name = "${lookup(local.dvo[count.index], "resource_record_name")}"
type = "${lookup(local.dvo[count.index], "resource_record_type")}"
records = ["${lookup(local.dvo[count.index], "resource_record_value")}"]
ttl = 60
depends_on = ["aws_acm_certificate.cert"]
}
resource "aws_acm_certificate_validation" "cert" {
count = "${length(var.domains)}"
certificate_arn = "${aws_acm_certificate.cert.*.arn[count.index]}"
validation_record_fqdns = ["${aws_route53_record.cert_validation.*.fqdn[count.index]}"]
depends_on = ["aws_acm_certificate.cert", "aws_route53_record.cert_validation"]
}
counter // length
(//
должно быть целочисленным делением), чтобы обеспечить увеличение на каждом втором шаге. - person Markus   schedule 19.07.2018