这是一个相当常见的问题,但我很难找到解决这个问题的正确答案。
我有两个应用程序将在 EC2 上运行。这些应用程序将位于各自的自动扩展组中,这些组位于各自的 ELB 后面。这两个应用程序需要相互通信,因此它们需要知道 ELB 的内部 DNS。
我能想到几种解决这个问题的方法:
- 预先创建 ELB,并在 CF 模板中使用它们的名称。(我没有尝试过,有一篇帖子说无法在 CF 模板中引用外部创建的 ELB 名称。但我猜这应该是可行的)。
- 首先在 CF 中创建 ELB,然后通过
Fn::Gett
(或类似方法)获取它们的私有 IP,然后将该值写入应用程序中的环境变量。 - 实现服务发现,其中每个应用程序/ELB将其私有IP写入DB或类似的东西,以便其他应用程序能够发现其他服务/应用程序的IP。
选项 #2 是最好的情况,我假设这是最符合基础设施即代码的流程。但是,我找不到有关如何执行此操作的适当文档。
如果有人能告诉我正确的解决方法,我将不胜感激。谢谢。
答案1
每个 ELB 都有一个AWS 分配的 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 扩大、缩小、进行维护等时。
希望有帮助:)