AWS Cloudformation使用内部IP地址进行通信

时间:2017-03-07 13:38:16

标签: amazon-web-services amazon-ec2 amazon-cloudformation

我正在尝试使用AWS Cloudformation创建Web应用程序。这个特定的应用程序将有3个实例(Web服务器,App服务器,RDS数据库)。我希望这些实例能够相互通信。例如,Web服务器应与App服务器通信,App服务器应与RDS数据库通信。

我无法理解如何配置服务器以便彼此了解彼此的IP地址。我认为有三种方法可以做到这一点 - 但我不确定哪些是现实可行或可行的:

  1. 我可以在堆栈创建期间分配固定的私有IP地址(例如192.168.0.2等) - 这样我事先知道每个实例的IP地址
  2. 我可以等待AWS Cloudformation返回已创建实例的IP地址,并手动调整我的代码以使用这些IP地址与这些IP进行通信
  3. 我可以在堆栈创建过程中以某种方式获取所创建实例的IP地址,并将其作为参数存储在我创建的下一个实例中(不确定Cloudformation是否允许这样做?)
  4. 哪种设置方法最好?另外,请分享一些关于如何在Cloudformation中执行此操作的详细信息。

1 个答案:

答案 0 :(得分:1)

解决方案是将您的Web服务器和App服务器置于ELB(负载均衡器)之后。这样,您的Web服务器将使用ELB的URL(而不是应用服务器的IP)与应用服务器通信。应用服务器可以通过RDS实例的端点(也是URL)与RDS实例通信。

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

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