2017-03-07 72 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