2017-09-01 166 views
0

讓我們假設以下情況。AWS TargetGroup/LoadBalancer檢查vs CodeDeploy部署組狀態

TargetGroup正在檢查http端口80,以驗證EC2主機是否健康。

CodeDeploy代理執行的順序是這樣

  1. ApplicationStop SUCCESS(停止Web引擎。不能充當端口80)
  2. BeforeInstall成功
  3. AfterInstall成功
  4. ApplicationStart SUCCESS(入門網站引擎。能服務端口80)
  5. ValidateService失敗(與端口80的可用性無關)

通過此序列,CodeDeploy部署被標記爲FAILED。目標羣體在做什麼?因爲它的健康檢查會成功,它會認爲EC2主機是健康的?但CodeDeploy事情不是。

我不清楚TargetGroup運行狀況檢查如何與每個EC2上的CodeDeploy部署狀態重疊。

由於文檔中提到CodeDeploy與負載均衡器協作以不路由流量,因此我的問題也擴展到了負載均衡器。

任何有識之士將不勝感激。

與@tangerini經過一些討論:

AppSpec 'hooks' Section它提到,例如允許/阻止Trafic掛鉤可用。但是在同一主題上,它提到有人可以僅在 (一種經典的負載均衡器 ) - 藍色/綠色部署中使用它們。

我正在使用ApplicationLoadBalancer和in-place部署。但是從我注意到在ValidateService掛鉤期間流量到達ec2服務器。

回答

0

CodeDeploy的部署狀態僅取決於在您的實例上執行的lifecyle事件掛鉤的成功或失敗,並且不一定遵循TargetGroup運行狀況檢查。在您的示例中,ApplicationStart步驟成功完成,這將導致它開始成功TargetGroup運行狀況檢查,即使ValidateService步驟失敗,從而導致部署失敗。

理想情況下,您希望TargetGroup運行狀況檢查狀態每次都與CodeDeploy ValidateService結果相匹配。如果ValidateService步驟失敗,則意味着您的服務無法正常運行,並且應該失敗健康檢查。但這取決於您在ValidateService步驟中進行的驗證。

+0

感謝您的回答。我理解兩個驗證點之間的對齊概念。但CodeDeploy鉤子的文檔(http://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html)提到了允許/禁止流量的概念,這意味着某種與LoadBalancer或TargetGroup連接。允許通信步驟發生在ValidateService掛鉤之後。我看到的與您的解釋相符,但文檔讓我感到困惑。 –

+0

我回答了你的問題,假設你沒有允許/禁止流量勾,因爲你沒有在你的例子中指定它們。允許/禁用步驟將分別綁定和解除綁定實例到目標組,因此如果您的ValidateService失敗並且AllowTraffic被跳過,那麼目標組運行狀況檢查甚至不會執行,因爲失敗的實例將被綁定到目標組。 – tangerini

+0

我沒有,因爲我的理解是,他們是系統鉤子,你不能實現它們。但你們兩個答案表明我可能忽視了某些事情,所以我會再看一次,我很感激。關於我可能忽略的任何提示都會很棒。 –