我正在使用部署3个EC2虚拟机的CloudFormation堆栈。每个都需要配置为能够通过IP或主机名发现其他2并不重要。
亚马逊的私有内部DNS似乎非常无用,因为它基于IP地址,在配置时无法知道。因此,我无法在CloudFormation堆栈时使用我所知的方式配置节点。
据我所知,我有几个选择。在我看来,所有这些都比必要更复杂 - 还有其他选择吗?
在我配置VM时使用的其他云(如GCP),它根据部署模板中的资源名称获取内部DNS名称,这使得这类问题非常简单。男孩,我希望我有。
这里最好的方法是什么? (1)看起来很简单,但要求使用我的堆栈的人拥有他们并不真正需要的额外权限。 (2)浪费了额外的资源使用量。 (3)似乎......好傻。
使用Route53,设置私有DNS托管区域,为连接到其网络接口的每个VM创建一个条目,然后通过命名条目
这是最好的解决方案,但实现起来更简单。
AWS::Route53::RecordSet
资源,该资源通过其逻辑ID将基于该“资源名称”的主机名与EC2实例相关联。另一种方法是使用Application Load Balancer,将您的应用程序实例放在不同的目标组中。然后,各种EC2实例通过ALB发送所有流量,因此您只需要传播一个引用(并且可以将其存储在EC2实例的UserData中)。但这还有很多工作要做。
这假设您已经设置了私有托管区域。
我认为你所谈论的内容被称为服务发现。
如果将EC2实例部署在同一VPC中的同一子网中,且具有允许通过其进行通信的端口的相同安全组,则它们将彼此“可发现”。
然后,您可以更进一步。如果组上有自动调节并且机器死亡并重新生成,则可以将IP写入注册表,即发电机,以便其他机器知道在哪里找到它们。