У меня есть записи Route 53, которые я создаю с помощью команды for_each. Одна из моих записей имеет более одного значения, связанного с ее записью. Вот как объявляются записи:
variables.tf
variable "mx" {
type = map(object({
ttl = string
records = set(string)
}))
}
variables.tfvars
mx = {
"mywebsite.org." = {
ttl = "3600"
records = [
"home.mywebsite.org.",
"faq.mywebsite.org."
]
}
"myotherwebsite.org." = {
ttl = "3600"
records = [
"home.myotherwebsite.org."
]
}
mx.tf
locals {
mx_records = flatten([
for mx_key, mx in var.mx : [
for record in mx.records : {
mx_key = mx_key
record = record
ttl = mx.ttl
}]
])
}
resource "aws_route53_record" "mx_records" {
for_each = { for idx, mx in local.mx_records : idx => mx }
zone_id = aws_route53_zone.zone.zone_id
name = each.value.mx_key
type = "MX"
ttl = each.value.ttl
records = [
each.value.record
]
}
При выполнении все работает хорошо, пока Terraform не поймет, что у меня есть дополнительное значение для моей записи. Затем он генерирует следующую ошибку:
Error building changeset: InvalidChangeBatch: [Tried to create resource record set
[name='mywebsite.org.', type='MX'] but it already exists]
Мой вопрос: есть ли способ заставить Terraform не создавать вторую запись для этого значения? Для Route53 все имена записей должны быть уникальными. Есть ли способ для Terraform просто добавить это значение к этой записи, поскольку она была создана при первоначальном запуске выполнения? Любая помощь будет принята с благодарностью, поскольку это становится сложной задачей.
ОБНОВЛЕНИЕ После удаления сглаживания и обновления до 'records = [each.value.records]' это ошибка:
Error: Unsupported attribute
on mx.tf line 20, in resource "aws_route53_record" "mx_records":
20: each.value.record
|----------------
| each.value is tuple with 2 elements
This value does not have any attributes.
Error: Unsupported attribute
on mx.tf line 20, in resource "aws_route53_record" "mx_records":
20: each.value.record
|----------------
| each.value is tuple with 1 element
This value does not have any attributes.