Назад | Перейти на главную страницу

Откройте для себя частный DNS балансировщиков нагрузки в Cloudformation

Это довольно распространенная проблема, но я не могу найти правильный ответ, как это сделать.

У меня есть два приложения, которые будут работать на EC2. Эти приложения будут в отдельных группах автомасштабирования, которые находятся за собственными ELB. Эти 2 приложения должны взаимодействовать друг с другом, поэтому им необходимо знать внутренний DNS ELB.

Я могу придумать несколько способов сделать это:

  1. Заранее создайте ELB и используйте их по имени в шаблоне CF. (Я не пробовал это делать, было сообщение о невозможности ссылаться на внешнее имя ELB в шаблоне CF. Но я предполагаю, что это должно быть выполнимо).
  2. Сначала создайте ELB в CF, а затем получите их частные IP-адреса через Fn::Gett (или что-то подобное), а затем запишите это значение в переменную окружения в приложении.
  3. Реализуйте обнаружение служб, при котором каждое приложение / ELB записывает свой частный IP-адрес в БД или что-то подобное, чтобы другие приложения открывали IP-адреса других служб / приложений.

Вариант №2 был бы лучшим случаем, и я предполагаю, что это процесс, который является наиболее инфра-как-кодом. Однако я не могу найти надлежащую документацию о том, как это сделать.

Если кто-то может посоветовать мне правильный способ решения этой проблемы, я очень признателен. Спасибо.

Каждый ELB имеет Назначенное AWS DNS-имя что вам следует использовать.

Если вы создаете ELB через CloudFormation, вы можете получить имя с помощью Fn:GetAtt ELB.DNSName как описано в AWS :: ElasticLoadBalancing :: LoadBalancer Возвращаемые значения:

[...]
  MyELB:
    Type: AWS::ElasticLoadBalancing::LoadBalancer
    Properties:
      ...

Outputs:
  ELBName:
    Value: !GetAtt MyELB.DNSName            <<< Like this

Кстати Никогда ссылаются непосредственно на разрешенные IP-адреса где угодно, потому что они часто меняются, например, когда ELB масштабируется вверх, вниз, проходит техническое обслуживание и т. д.

Надеюсь, это поможет :)