2017-03-07 46 views
0

我正在尝试使用AWS Cloudformation创建一个Web应用程序。这个特定的应用程序将有3个实例(Web服务器,应用程序服务器,RDS数据库)。我希望这些实例能够相互交流。例如,Web服务器应该与App服务器交谈,并且应用服务器应该与RDS数据库交谈。AWS使用内部IP地址进行云计算通信

我不明白如何配置服务器,以便他们知道彼此的IP地址。我想,有3种方式来做到这一点 - 但我不知道其中哪些是现实可能的或可行的:

  1. 我可以分配一个固定的私有IP地址(如192.168.0.2等)堆栈中创建 - 这种方式我事先知道每个实例的IP地址
  2. 我可以等待AWS Cloudformation返回已创建实例的IP地址并手动调整我的代码以使用这些IP地址使用这些IP进行通信
  3. I可以在堆栈创建过程中以某种方式获取创建的实例的IP地址,并在创建的下一个实例中将其存储为参数(不确定Cloudformation是否允许这样做?)

哪种设置方法最好?另外,请分享一下我在云计算中如何做到这一点的细节。

回答

1

解决方案是将您的Web服务器和App服务器放在ELB(负载均衡器)后面。这样,您的Web服务器将使用ELB的URL(不是应用程序服务器的IP)与应用程序服务器进行通信。应用服务器可以通过RDS实例的端点(这又是一个URL)与RDS实例进行通信。

假设您将您的基础架构分为3个CloudFormation堆栈:RDS数据库,应用程序服务器和Web服务器。 RDS堆栈将通过CloudFormation输出功能公开RDS实例。此端点将反过来用作App服务器堆栈的CloudFormation参数。您可以将RDS端点插入到应用服务器LauchConfiguration的UserData字段中,以便在启动时,您的应用服务器将知道RDS实例的端点。最后,您的应用服务器堆栈将公开应用服务器的ELB端点(再次使用CloudFormation输出功能)。使用相同的配方,您的应用服务器的ELB的URL将被注入并被您的Web服务器堆栈使用。

另外,使用Autoscaling组监视服务(Web服务器,应用程序服务器)也是一个好主意。您的实例很可能会被您无法控制的因素终止。在这种情况下,您希望Autoscaling组启动一个新的实例并将其放在ELB后面。

+0

谢谢@spg ..我明白你的意思了。我不喜欢为数据库使用公共URL,但它可以用于应用服务器。干杯! – Sam

+0

这些网址不需要公开。如果需要,您可以将所有内容都保密在您的VPC中。 – spg