Я создаю подсети как часть отдельного шаблона terraform и экспортирую идентификаторы следующим образом.
output "subnet-aza-dev" {
value = "${aws_subnet.subnet-aza-dev.id}"
}
output "subnet-azb-dev" {
value = "${aws_subnet.subnet-azb-dev.id}"
}
output "subnet-aza-test" {
value = "${aws_subnet.subnet-aza-test.id}"
}
output "subnet-azb-test" {
value = "${aws_subnet.subnet-azb-test.id}"
}
...
Затем я намерен найти эти идентификаторы в другом шаблоне, который повторно используется для предоставления нескольких сред. Пример ниже показывает, что мой второй шаблон вызывает модуль для предоставления экземпляра EC2 и проходит через subnet_id.
variable "environment" {
description = "Environment name"
default = "dev"
}
module "sql-1-ec2" {
source = "../modules/ec2winserver_sql"
...
subnet_id = "${data.terraform_remote_state.env-shared.subnet-aza-dev}"
}
Я бы хотел передать переменную среды как часть поиска subnet_id, например.
subnet_id = "${data.terraform_remote_state.env-shared.subnet-aza-${var.environment}"
Однако я знаю, что интерполяция переменных не поддерживается. Я пробовал использовать карту внутри первого шаблона terraform, чтобы экспортировать их все в «подсеть», которую я затем мог бы использовать для поиска из второго шаблона. Это не сработало, так как я не мог выводить переменные внутри карты.
Такой шаблон проектирования я использовал ранее с CloudFormation, но я гораздо новичок в терраформе. Я упустил что-то очевидное?
Я думаю, что карта вывода - это правильный подход. Я не уверен, что пошло не так, когда вы это попробовали, но попробуйте что-нибудь вроде:
output "subnets_map" {
dev = "${aws_subnet.subnet_aza_dev.id}"
test = "${aws_subnet.subnet_aza_test.id}"
}
затем
subnet_id = "${data.terraform_remote_state.env_shared.subnets_map[var.environment]}"
Кстати, я думаю, что в HCL лучше использовать подчеркивания, а не дефисы.