0

我的CloudFormation堆棧會生成一個將MinSize和MaxSize設置爲1的ScalingGroup。它還會創建一個以該ScalingGroup爲目標的DeploymentGroup。帶有AllAtOnce的Amazon CodeDeploy無法在具有1個EC2實例的新CloudFormation堆棧上執行

  • 如果部署組配置了配置名稱CodeDeployDefault.OneAtATime,則部署將成功啓動。
  • 當部署組配置了配置名稱CodeDeployDefault.AllAtOnce,然後在創建堆棧時,codedeploy不執行任何操作,並且在EC2上看不到任何事件或日誌跟蹤。只有一處提到錯誤代碼HEALTH_CONSTRAINTS。如果我終止實例,那麼擴展組將啓動一個新實例,但CodeDeploy不會再執行任何操作。如果我手動開始部署CodeDeployDefault.OneAtATime然後它的工作。

從我的文檔中讀過,這不應該發生

  • 不應該有健康檢查,因爲沒有實例部署組
  • CodeDeployDefault.AllAtOnce有一個最低限度的衛生百分比存在0.因此,可能是提高錯誤的原因是它等於0,它決定不繼續提到健康錯誤代碼
  • CodeDeployDefault.AllAtOnce提及,這應該是我的理解,它不會做一個健康因爲在概念上檢查沒有意義,因爲所有實例都將在同一時間進行配置。

我的期望還是正確,還是我做錯了什麼?

+0

經過幾次迭代後,我發現這個錯誤並不總是會發生。 6次使用完全相同的CloudFormation模板,3次出錯,代碼爲'HEALTH_CONSTRAINTS'。 –

回答

0

錯誤代碼HEALTH_CONSTRAINTS意味着CodeDeploy部署失敗,並且不滿足配置的健康主機比率。您可能想要訪問AWS CodeDeploy控制檯並單擊在CloudFormation運行過程中創建的部署,並檢查部署失敗的原因。 CodeDeployDefault.OneAtATime和CodeDeployDefault.AllAtOnce之間的不同可以在這裏找到:http://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html

CodeDeployDefault.AllAtOnce嘗試一次部署應用程序的修訂,以儘可能多的情況下,儘可能地。如果將應用程序修訂部署到一個或多個實例,則整體部署的狀態將顯示爲「成功」。如果應用程序修訂未部署到任何實例,則整體部署的狀態將顯示爲「失敗」。使用九個實例的示例,CodeDeployDefault.AllAtOnce將嘗試一次部署到所有九個實例。如果部署到單個實例成功,則整體部署將會成功;它只會在所有九個實例的部署失敗時纔會失敗。

CodeDeployDefault.OneAtatime一次只將應用程序修訂部署到一個實例。 對於包含多個實例的部署組: 如果將應用程序修訂部署到所有實例,則整體部署會成功。此規則的例外是,如果部署到最後一個實例失敗,則整體部署仍然成功。這是因爲AWS CodeDeploy一次只允許一個實例通過CodeDeployDefault.OneAtATime配置進行脫機。 只要應用程序修訂未能部署到除最後一個實例以外的任何應用程序,整個部署就會失敗。 在使用九個實例的示例中,它將一次部署到一個實例。如果前8個實例的部署成功,則整體部署會成功;如果部署到前八個實例中的任何一個失敗,則整體部署將失敗。 對於只包含一個實例的部署組,僅當部署到單個實例成功時,整體部署纔會成功。

由於您的部署組僅包含一個單一實例,因此如果您設置了CodeDeployDefault.OneAtATime並且單個實例部署失敗,則部署仍將標記爲成功。請檢查AWS CodeDeploy控制檯上的部署詳細信息。

+0

我也讀過文檔。我的理解是,OneAtATime和AllAtOnce通過最低健康實例進行控制,如果部署應該開始。在每個ec2上執行代理之前,它都是漫畫。如果有新的cfn堆棧,則有0個健康保險,但這種情況不在文檔中說明。我注意到有一個保險和AllAtOnce配置的掃描組在創建堆棧時沒有任何其他解釋,因此不一致。這與文檔相矛盾,加上它的不可預知性指向了一個問題。 –

+0

我再讀過一遍,我需要更新我的評論。在你提供了一個鏈接的文章中,它描述的確是部署的結果。但是當我在尋找一個答案,爲什麼它從不開始,立即停止出現錯誤,我讀[this](http://docs.aws.amazon.com/codedeploy/latest/userguide/instances-health.html) 。在此鏈接中,它描述了由配置名稱派生的最小健康實例決定應該啓動執行的系統。 –

相關問題