Мой начальный рабочий код выглядит следующим образом
Сначала я зарезервировал IP-адреса
resource "google_compute_address" "ecmp-1" {
name = "nat-ecmp-1"
address = "10.8.2.6"
}
resource "google_compute_address" "ecmp-2" {
name = "nat-ecmp-2"
address = "10.8.2.7"
}
Затем я создал шаблоны экземпляров и прикрепил к ним IP-адреса
resource "google_compute_instance_template" "template-1" {
name = "ecmp-1"
# OMITED EXTRA
network_interface {
# OMITED EXTRA
network_ip = google_compute_address.ecmp-1.address
}
}
resource "google_compute_instance_template" "template-2" {
name = "ecmp-2"
# OMITED EXTRA
network_interface {
# OMITED EXTRA
network_ip = google_compute_address.ecmp-2.address
}
}
И затем я создаю группы экземпляров из этих шаблонов
resource "google_compute_region_instance_group_manager" "nstance-1" {
name = "instance-1"
version {
instance_template = google_compute_instance_template.template-1.self_link
}
target_size = 1
}
resource "google_compute_region_instance_group_manager" "instance-2" {
name = "instance-2"
version {
instance_template = google_compute_instance_template.template-2.self_link
}
target_size = 1
}
Приведенный выше код работает хорошо, но если бы у меня было ОКОЛО много групп экземпляров для создания, код был бы раздутым. Для этого я сейчас использую карты и for_each
Мой новый код для IP-адресов и для шаблона группы экземпляров выглядит как
resource "google_compute_address" "reservered-ips" {
for_each = var.nat_ecmp_frontend_reserved_ips
name = each.key
subnetwork = "egress-ingress"
address_type = "INTERNAL"
address = each.value
}
resource "google_compute_instance_template" "template-1" {
for_each = var.nat_ecmp_frontend_reserved_ips
name = each.key
# OMITED EXTRA
network_interface {
# OMITED EXTRA
network_ip = google_compute_address.reservered-ips[each.key].address
}
}
Теперь следующим шагом является создание группы экземпляров из из вышеупомянутых 2 шаблонов, созданных с использованием for_each
l oop.
Итак, когда объявляется это
resource "google_compute_region_instance_group_manager" "instances" {
for_each = var.nat_ecmp_frontend_reserved_ips
name = each.key
version {
instance_template = google_compute_instance_template.<? ? ? ? ?>
}
target_size = 1
}
Как я могу l oop и ссылку instance_template
? Есть ли какой-нибудь динамический способ сделать это?