昨天把 AWS 上的核心網路設備更換,然後一堆東西就壞了 … 這篇要講的是 Autoscaling 的 Lifecycle hooks,當時的作業是修改路由設備,然後本來跑的好好的某一個 Auto Scaling Groups 突然機器就長不出來了。
但是機器又沒有達到 minimal 的數量,所以就一直鬼打牆的 Launch, Terminate,這要是以小時計費的時代,當月就會被帳單懲罰了 XDD ..
可以看到問題出在 Lifecycle 執行的時候 Timeout,由於 Lifecycle 預設如果沒有跑成功的話該 instance 會被 Abandon。
Launching a new EC2 instance: i-xxxxxxx. Status Reason: Instance failed to complete user’s Lifecycle Action: Lifecycle Action with token 53f0d9bf-7f83-4103-91fa-478a38d76b0e was abandoned: Heartbeat Timeout
這個案例是 Autoscaling 有搭配 CodeDeploy,所以當 instance 被 Launch 的時候就會觸發 CodeDeploy 把程式 Deploy 到機器內,但是為什麼 CodeDeploy 會失敗呢!?
實際 ssh 到新開的 instance 裡面看,CodeDeploy 是有成功執行完成的,並且最後也成功把 instance 放到 Load balance 上,但是 Lifecycle hooks 卻還是顯示 Heartbeat Timeout。
由於當天作業影響的是 網路層
大改了 VPC 的 Route Table,猜想有可能因為這樣導致 AWS 底層的路由錯亂了? hooks 打不回去而 Timeout。
然後我在 AWS Discussion Forums 裡面看到相同的問題「Autoscale instances failing to launch all of a sudden」在 2014 年就被問 … 然後官方的建議是:
- 重建 Auto Scaling Groups
- 刪除或重建不健康的 Lifecycle hooks
我是刪除 Lifecycle hooks 就解決了,畢竟每次 Launch 都會產生,但是這應該算是 bug 吧 …