Site icon Mr. 沙先生

AWS 替 CodeDeploy 加入 Load balancer 的功能

這幾天連假 AWS 默默的替 CodeDeploy 加入了 Load balancer 的功能,然後 5/1 的時候在 Discussion Forums 發佈消息「AWS CodeDeploy now integrates with Elastic Load Balancer 」,隨即文件也更新了 Integrating AWS CodeDeploy with Elastic Load Balancing

 

以往都是在 AppSpec 的 hooks 加上 ApplicationStop / ValidateService 的時候把 ELB 上的 Instance 下上架的動作,用 script 自幹

 

CodeDeploy 的流程加入 Load balancer 後變成這樣:

 

好消息是 CodeDeploy 終於想到這一塊了

壞消息是 CodeDeploy 的 Load balancer 機制竟然要花上 10 分鐘/台 以上

 

5 min, 31 secs 的分別是 BlockTraffic、AllowTraffic,就是卡在 ELB 上,對於這樣的速度如果有 n 台,所花費的時間就是 n*10 分鐘,這樣比起人工還要慢 …

 

已經有人在 Discussion Forums 提出和我相同的問題「BlockTraffic/AllowTraffic durations」,

Currently I have a classic ELB with two EC2 nodes. So, If I do a CodeDeploy OneAtATime, the whole process takes up to 25 minutes.

 

Update:

結果有人測出 CodeDeploy 走 ELB 的規則了

UPDATE: CodeDeploy is dependent on the ELB Health Check settings

 

原來 CodeDeploy 是吃 ELB 的 Health Check 設定

 

如果你的 ELB 設定:

Timeout 5 seconds
Interval 30 seconds
Unhealthy threshold 2
Healthy threshold 10

所以你的 Health Check 時間會是 (Interval (30) +Timeout(5))* healthy (10) = 350 秒,執行過程中會再增加 1~2 秒的執行時間,所以最後呈現的時間通常會是 351 或是 352。

 

然後調成

Timeout 2 seconds
Interval 5 seconds
Unhealthy threshold 2
Healthy threshold 2

跑 BlockTraffic/AllowTraffic 只花 16 秒。

 

 

 

 

Exit mobile version