在 Cloudformation 中发现负载均衡器的私有 DNS

在 Cloudformation 中发现负载均衡器的私有 DNS

这是一个相当常见的问题,但我很难找到解决这个问题的正确答案。

我有两个应用程序将在 EC2 上运行。这些应用程序将位于各自的自动扩展组中,这些组位于各自的 ELB 后面。这两个应用程序需要相互通信,因此它们需要知道 ELB 的内部 DNS。

我能想到几种解决这个问题的方法:

  1. 预先创建 ELB,并在 CF 模板中使用它们的名称。(我没有尝试过,有一篇帖子说无法在 CF 模板中引用外部创建的 ELB 名称。但我猜这应该是可行的)。
  2. 首先在 CF 中创建 ELB,然后通过Fn::Gett(或类似方法)获取它们的私有 IP,然后将该值写入应用程序中的环境变量。
  3. 实现服务发现,其中每个应用程序/ELB将其私有IP写入DB或类似的东西,以便其他应用程序能够发现其他服务/应用程序的IP。

选项 #2 是最好的情况,我假设这是最符合基础设施即代码的流程。但是,我找不到有关如何执行此操作的适当文档。

如果有人能告诉我正确的解决方法,我将不胜感激。谢谢。

答案1

每个 ELB 都有一个AWS 分配的 DNS 名称您应该使用。

ELB DNS 名称

如果您通过 CloudFormation 创建 ELB,则可以按照Fn:GetAtt ELB.DNSName以下说明获取名称AWS::ElasticLoadBalancing::LoadBalancer 返回值

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

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

顺便提一句永远不能直接引用任何地方的已解析 IP 地址,因为它们经常变化,例如当 ELB 扩大、缩小、进行维护等时。

希望有帮助:)

相关内容