VPC, над которым я работаю, имеет 3 логических уровня: веб, приложения и базы данных. Для каждого уровня есть одна подсеть в каждой зоне доступности. Всего в регионе 6 подсетей.
Я пытаюсь создать экземпляры EC2, используя модуль и параметр count
, но я не знаю, как указать terraform использовать две подсети уровня приложения. У меня есть дополнительное ограничение - использовать статические IP-адреса (или способ иметь детерминированное частное имя).
Я играю с ресурсом
resource "aws_instance" "app_server" {
...
count = "${var.app_servers_count}"
# Not all at the same time, though!
availability_zone = ...
subnet_id = ...
private_ip = ...
}
Вещи, которые я пробовал / думал до сих пор:
- Используйте
data "aws_subnet" "all_app_subnets" {...}
, фильтруйте по имени, получайте все подходящие подсети и используйте их как список. Ноaws_subnet
не может вернуть список; - Используйте
data "aws_availability_zones" {...}
, чтобы найти все зоны. Но у меня все еще есть проблема с назначением правильной подсети; - Используйте
data "aws_subnet_ids" {...}
, который выглядит лучшим вариантом. Но, по-видимому, у него нет опции фильтра, чтобы соответствовать имени сети. - Передайте в модуль идентификаторы подсетей в виде списка строк. Но я не хочу жестко кодировать идентификаторы, это не автоматизация;
- Жестко запрограммировать подсети как
data "aws_subnet" "app_subnet_1" {...}
,data "aws_subnet" "app_subnet_2" {...}
, но тогда мне придется использовать отдельные наборы переменных для каждой подсети, что мне не нравится; - Получите информацию для каждой подсети, как в пункте выше, но затем создайте
map
для доступа к ней в виде списка. Но нельзя использовать интерполяцию в определении переменных; - Не использовать модули и жестко запрограммировать каждый экземпляр для каждой среды. Мммм ... правда?
У меня действительно закончились идеи. Кажется, что никому не нужно развертывать экземпляры в определенных подсетях и сохранять высокую степень абстрагирования. Я вижу только примеры, когда подсети не указаны или где люди просто используют значения по умолчанию для всего. Неужели это что-то такое необычное?
Заранее всем спасибо.
ec2_vpc_subnet_facts
available_ip_address_count
. Я пробовал использовать поставщиков данныхaws_subnet_ids
иaws_subnet
, подобных вашему ответу ниже, но похоже, что в возвращенных подсетях с доступным количеством IP-адресов вообще нет атрибутов! - person TrinitronX   schedule 26.02.2018