У меня есть шаблон Cloudformation, который включает AWS::EC2::Instance
, AWS::EC2::NetworkInterface
и AWS::EC2::EIP
. Все они связаны друг с другом, сетевой интерфейс захватывает EIP, а затем подключается к экземпляру, и все работает хорошо.
Теперь я хочу изменить его, чтобы шаблон не создавал EIP, а просто создавал обычный случайный общедоступный IP-адрес. Я мог добиться этого, удалив ресурс EIP и указав опцию AssociatePublicIpAddress
в сетевом интерфейсе. Проблема в том, что этот параметр действителен только для встроенного типа свойства NetworkInterface
, но не для ресурса AWS::EC2::NetworkInterface
. Сетевой интерфейс используется в другом месте (в ресурсе AWS::EC2::Route
) в качестве ссылки, поэтому я не могу превратить его во встроенный тип. Что я могу сделать?
Эластичные сетевые интерфейсы (ENI) могут быть настроены для получения общедоступного IP-адреса из пула (не EIP), но на самом деле это происходит только тогда, когда ENI подключен к экземпляру и экземпляр находится в процессе запуска. Этот адрес не получается до запуска экземпляра и освобождается при его остановке. Если экземпляр запускается снова, ENI получит другой публичный адрес из пула. Процесс повторяется каждый раз, когда экземпляр останавливается и запускается.
ENI с общедоступными IP-адресами из пула не подходят для этого варианта использования.
Если вам нужно больше EIP, чем разрешено лимитом по умолчанию, вы можете создать бесплатный запрос в службу поддержки и описать свой вариант использования. Плата за EIP, подключенный к любому работающему экземпляру, не взимается, если это единственный EIP, подключенный к этому экземпляру.
Я не думаю, что это возможно. Если бы вы могли каким-то образом вернуть случайный PublicIp, вы бы добавили его в свой маршрут. Затем вы должны остановить / запустить свой экземпляр и изменить IP-адрес. Как вы ожидаете, что ваше окружение будет вести себя в такой ситуации? Я считаю, что AWS не позволяет вам сделать это, чтобы спасти вас от зависания IP-адреса на маршруте.