2017年12月22日 星期五

如何在AWS透過EC2建立自動彈性延伸的網站

在傳統的網站部份,如果針對特定的節日或進行行銷時,可能網站會有較多的流量,此時原先的主機可能無法承受負載,所以通常會進行網站設備上的擴充,但是在時間過了之後,可能就沒有這麼多的使用者與流量時,就會造成設備的閒置與浪費,所以此時雲端是一個很好的選擇。

在各家的雲端上建置IaaS的部份VM皆可以選擇不同的Instance Type,當然我們可以在不同的時間點進行切換,比如當有節日或活動要進行時,我們可以彈性的調整Instance Type,但目前在AWS EC2上有不同的選擇,您可以透過Auto Scaling與Load Balance的功能整合,藉以達到快速的Scale Out,來更合適的完成公司的商業需求。

建置方式:
1、建立環境所需的影像檔

1-1 先針對你的網站設計好需要的網頁與功能,然後制作成一個Image.
1-2 方法很簡單,請到EC2 -> Instances -> 選擇你要制作的Instance -> Image -> Create Image


輸入Image的名稱與預設的Disk

送出Create Image的請求,需至下一步驟進行確認是否已建立完成。

1-3 建立完成後,請到Images -> AMIS -> 確認Image是否已建立完成 。


2、建立Load Balancing

由於在後續上會有多個Instance Type自動進行建立,而且也需要進行負載平衡,所以此步驟我們建立一個Load Balanc er進行。

2-1 撰擇Load Balancing -> Load Balancers -> Create Load Balancer

2-2 在選擇Load Balancer時有三種項目可能選擇,這三種的選擇上看你的應用程式類型選擇Application Load Balancer或Network Load Balancer,基本上不建議再選擇第三種傳統模式,此部份我們選擇第二種高效能的Network Load Balancer進行。

2-3 決定NLB的名稱與開放的Port、如果您的網站有使用HTTPS的話,請將443也一同加入。

2-4 指定在Region中特定的AZ(Availability Zones)區域。

2-5 定義Target Group去指定特定的Instance。

2-6 指定特定的Instance到此Target Group中,但由於我們後續會由Auto Scaling自行啟動,所以此處不進行手動加入。
2-7 建立完成。



3、建立Auto Scaling

3-1 建立 Auto Scaling Lunch Configuration
3-1-1 選擇Auto Scaling -> Launch Configuration -> 建立Auto Scaling

3-1-2 進入後,頁面說明會有二個步驗,分別是建立設定檔與群組的部份,首先我們就先建立設定檔的動作。

3-1-3 選擇我們在步驟1-3之中所建立的Image。

3-1-4 選擇後續自動延伸時所建立的Instance Type

3-1-5 輸入Launch Configuration的名稱,建議也可以勾選透過CloudWatch進行監控。

PS:由於啟用CloudWatch進行監控時可能會有額外的費用產生,所以再請注意。

3-1-6 選擇啟動後的Instance上的Disk大小。

3-1-7 設定Security Group,此部份我只有開啟80(HTTP)與3389(RDP)二個,當然你也可以將443(HTTPS)加入,由於我之前已有設定的Security Group符合,所以我就將之前的加入。
3-1-8 再次檢示Launch Configuration的設定並確認建立。

3-1-9 設定你key pair的檔案,此處由於之前也設定過了,所以可以使用相同的檔案即可。

3-2 建立Auto Scaling Group

3-2-1 輸入Group Name與預計進行Scaling的網路區段,你可以將多個區段加入,藉以避免因單一區段發生問題時,整體無法運作,此區請至少加入一個Network與Subnet。

在進階設定的部份,請將第2步驟中建立的NLB加入,並將請將Health Check Type設定為預設的EC2,請為這樣我們就可以透過CPU與或網路流量來設定條件,藉以達到自動延伸的功能。

3-2-2 此部份由於我們要模擬當使用者過多時,CPU使用率過高,造成網站回應過慢,所以我先設定為1-5個Instance,當使用率超過50%的時候,就自動進行Scal Out。

3-2-3 設定警告通知,當遇到勾選的事件產生時,即會自動寄出通知。

3-2-4 最後檢示Auto Scaling Group的設定


3-2-5 建立完成

3-3 測試網站連結

3-3-1 建立完成後,我們可以到Auto Scaling -> Auto Scaling Groups 確認目前已自動啟動的Instance為何。

3-3-2 接下來我們同樣的透過Load Balancer的DNS來連線到網站,確認是否可以正常的連線。
請到Load Balancing -> Load Balancers -> 已建立的NLB -> Description中,即可看到。

3-3-3 測過此網址進行確認是否可以正常的連線。

 4、Auto Scaling測試

4-1 由於我們在3-2-2之中,設定Auto Scaling的規則為CPU使用率超過50%,所以最快的方式我使用了測試軟體(Intel Brun Test)去直接的快速提高CPU的使用率。


4-2 經過一段時間,系統就會自動再產生一個Instance,然後自動加入NLB中。

4-3 最後,由於CPU 使用率持續不斷的增加,所以Instance數量成長到我設定的最大值。


4-4 Instance 的成長區間圖
4-5 我透過NLB的DNS網址進行連結測試,你會發現五個Instance皆會輪序的進行訪問,當然如果你要確認他有連結到那一台Instance的話,你可以逐一連到Instance中,然後修改頁面即可確認。

上述的介紹,你可以透過Auto Scaling與Elastic Load Balancing的整合,藉以快速的達到Scale Out的需求,也可以達到效益的最佳化,當然此部份後續仍有其他可以研究的部份,如程式的修改與部署的部份,我們將會在後續的章節繼續再跟大家介紹,謝謝。


關鍵字:
Amazon EC2Elastic Load BalancingAuto ScalingAWS

參考連結:
Getting Started with Auto Scaling
http://docs.aws.amazon.com/autoscaling/latest/userguide/GettingStartedTutorial.html
Elastic Load Balancing
https://aws.amazon.com/tw/elasticloadbalancing/
What Is Elastic Load Balancing?
http://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html