#amazon-web-services #terraform #terraform-provider-aws #aws-acm
Вопрос:
Я пишу сценарий terraform для автоматизации предоставления acm для доменов, проблема, с которой я сталкиваюсь, заключается в том, как я могу объединить домен и имена subject_alternative_, как будто он должен выбрать первый домен из имени домена и объединить его с первым блоком в subject_alternative_name и продолжить.
Variable.tf
variable "domain_name" {
description = "Configuration for alb settings"
default = [
"domain.com",
"helloworld.com",
"helloworld2.com",
]
}
variable "subject_alternative_names" {
description = "subject_alternative_names"
default = [ {
domain.com = {
"domain.com",
"domain2.com",
"domain3.com",
},
helloworld.com = {
"helloworld1.com",
"helloworld2.com"
},
hiworld.com = {
"hiworld1.com",
"hiworld2.com"
}
}]
}
variable "region" {
description = "name of the region"
default = "us-east-1"
}
variable "validation_method" {
description = "name of the region"
default = "DNS"
}
variable "tags" {
description = "name of the region"
default = "Test"
}
работаем variable.tf
variable "domain_name" {
description = "Configuration for alb settings"
default = [
"domain.com",
"helloworld.com",
"helloworld2.com",
"helloworld1.com",
"helloworld3.com",
]
}
variable "subject_alternative_names"{
description = "subject_alternative_names"
default = [
"domain.com",
"helloworld.com",
"helloworld2.com",
"helloworld1.com",
"helloworld3.com",
]
}
variable "region" {
description = "name of the region"
default = "us-east-1"
}
variable "validation_method" {
description = "name of the region"
default = "DNS"
}
variable "tags" {
description = "name of the region"
default = "Test"
}
main.tf
module "acm" {
count = length(var.domain_name)
source = "./modules/acm"
domain_name = var.domain_name[count.index]
validation_method = var.validation_method
tags = var.tags
subject_alternative_names = var.subject_alternative_names
}
resource.tf
variable "domain_name" {
default = ""
description = "Nmae of the domain"
}
variable "validation_method" {
default = ""
description = "Validation method DNS or EMAIL"
}
variable "tags" {
default = ""
description = "tags for the ACM certificate"
}
variable "subject_alternative_names" {
default = ""
description = "subject_alternative_names"
}
resource "aws_acm_certificate" "acm_cert" {
domain_name = var.domain_name
validation_method = var.validation_method
subject_alternative_names = var.subject_alternative_names
lifecycle {
create_before_destroy = true
}
tags = {
Name = var.tags
}
}
Комментарии:
1. Ваш
subject_alternative_names
неверный код TF. Можете ли вы на самом деле предоставить код, который отражает вашу ситуацию?2. Я давал имена subject_alternative_names в виде списка, и он работал, но он добавлял имена со всеми доменами, я пытался, чтобы он выбрал 1 домен из имени домена и первый блок из имен subject_alternative_names, затем второе имя домена и второй блок из имен subject_alternative_names
3. @Marcin Я добавил весь код, который у меня есть в вопросе
4. Это неверный код TF, в нем есть синтаксические ошибки. Итак, исправление синтаксических ошибок-это ваша реальная проблема? Или у вас есть несколько проблем? Также
domain_name
имеет пять предметов, но имеетsubject_alternative_names
три предмета. Почему они разные? Почему доменные имена разные?5. @Marcin Я добавил новый файл переменной в качестве рабочей переменной. tf но мне нужно преобразовать имя subject_alternative_ в карты, чтобы я мог объединить его с доменом. Первый блок с первым доменом и так далее. Я отредактировал вопрос
Ответ №1:
Самым простым способом было бы использовать одну карту:
variable "domain_name_with_alternate_names" {
default = {
"domain.com" = [
"domain.com",
"domain2.com",
"domain3.com",
],
"helloworld.com" = [
"helloworld1.com",
"helloworld2.com"
],
"hiworld.com" = [
"hiworld1.com",
"hiworld2.com"
],
"hiwodd4.com" = []
}
}
module "acm" {
for_each = var.domain_name_with_alternate_names
source = "./modules/acm"
domain_name = each.key
validation_method = var.validation_method
tags = var.tags
subject_alternative_names = each.value
}