CodeDeploy 執行個體健 - AWS CodeDeploy

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

CodeDeploy 執行個體健

CodeDeploy 監控部署群組中執行個體的健全狀況狀態。如果正常運作的執行個體數目低於在部署期間針對部署群組所指定的最低正常運作執行個體數目,則它會讓部署失敗。例如,如果 85% 的執行個體在部署期間必須維持正常運作,而且部署群組包含 10 個執行個體,則部署至單一執行個體失敗時,整體部署就會失敗。原因是執行個體離線以安裝最新的應用程式修訂時,可用的正常運作執行個體計數已經降到 90%。失敗的執行個體加上另一個離線執行個體表示只有 80% 的執行個體運作良好且可用。 CodeDeploy將失敗整體部署。

請務必記住,若要讓整體部署成功,必須符合下列條件:

  • CodeDeploy 能夠部署到部署中的每個實例。

  • 部署到至少一個執行個體必須成功。這表示即使最低正常運作主機值為 0,部署到至少一個執行個體還是必須成功 (也就是,至少有一個執行個體必須正常運作),整體部署才會成功。

運作狀態

CodeDeploy 為每個實例分配兩個健康狀態值:版本健康狀況和實例健康狀況。

修訂版運作狀態

修訂版運作狀況是根據目前在執行個體上安裝的應用程式修訂而定。它有下列的狀態數值:

  • 目前:安裝在執行個體上的修訂版符合適用上一次成功部署中部署群組的修訂。

  • 舊版:安裝在執行個體上的修訂版符合較舊版本的應用程式。

  • 不明:應用程式修訂版尚未成功安裝在執行個體上。

執行個體運作狀態

執行個體運作狀態是根據成功部署至執行個體的而定。其具有下列數值:

  • 正常運作:上一次部署到執行個體成功。

  • 問題:嘗試部署修訂版到執行個體但失敗,或修訂版尚未部署到執行個體上。

CodeDeploy 使用修訂健康狀況和執行個體健康情況,以下列順序排程部署至部署群組的執行個體:

  1. 有問題的執行個體運作狀態。

  2. 不明修訂版的運作狀態。

  3. 舊修訂版的運作狀態。

  4. 目前修訂版的運作狀態。

如果整體部署成功,會更新修訂版和部署群組的運作狀態數值,以反映最新的部署狀況。

  • 目前所有成功部署過的執行個體須保持為目前的狀態。否則,則會變成不名的狀態。

  • 所有成功部署過的舊執行個體與不明的執行個體,須變為目前的狀態。否則,則會繼續維持舊版或不明的狀態。

  • 目前所有成功部署過的正常運作執行個體,須保持正常運作狀態。否則,則會變成有問題狀態。

  • 所有成功部署過的有問題之執行個體都會變為正常運作。否則,則會繼續保持為有問題狀態。

如果整體部署失敗或停止:

  • CodeDeploy 嘗試部署應用程式修訂版本的每個執行個體都會將其執行個體健全狀況設定為狀況良好或狀況不良,這取決於該執行個體的部署嘗試是成功還是失敗。

  • CodeDeploy 未嘗試部署應用程式修訂版本的每個執行個體,都會保留其目前的執行個體健全狀況值。

  • 部署群組的修訂版保持不變。

關於健全狀態執行個體的最小數目

所需的最低正常運作執行個體數目定義為部署組態的一部分。

重要

在藍/綠部署期間,部署組態和最低正常運作主機值會套用至替換環境中的執行個體,而不是原始環境中的執行個體。不過,從負載平衡器取消註冊原始環境中的執行個體時,如果無法成功取消註冊單一原始執行個體,則會將整體部署標示為 Failed (失敗)。

CodeDeploy 提供三種預設部署組態,這些組態具有常用的最低狀態主機值:

預設部署組態名稱 預先定義的最低正常運作主機值
CodeDeployDefault。 OneAtA 時代 1
CodeDeployDefault。 HalfAtA 時代 50%
CodeDeployDefault.AllAtOnce 0

如需預設部署組態的詳細資訊,請參閱使用中的部署組態 CodeDeploy

您可以在中建立自訂部署組態, CodeDeploy 以定義自己的最低狀態主機值。在使用以下操作時,您可以自行定義數值 (整數或百分比皆可):

CodeDeploy 可讓您為兩個主要目的指定部署健康狀態良好的執行個體數目下限:

  • 為判斷整體部署成功或失敗。如果應用程式修訂版成功部署最低數量的正常運作執行個體,則部署成功。

  • 為判斷部署階段中,正常運作執行個體的數量,以允許部署繼續作業。

您可以為您的部署群組指定最低數量的正常運作執行個體,做為執行個體總數量的一部分或的百分比。如果您指定百分比,則在部署開始時,會將百分比 CodeDeploy 轉換為相等數目的執行個體,並將任何小數執行個體捨入。

CodeDeploy 在部署程序期間,追蹤部署群組執行個體的健全狀況狀態,並使用部署指定的運作狀態良好執行個體數目下限,判斷是否要繼續部署。基本原則是部署必須永遠不會使正常運作執行個體數量於您所指定的最小值。唯一例外是部署群組在起始時就擁有少於指定最低數量的執行個體。這種情況下,部署程序不會進一步減少任何正常運作執行個體。

注意

CodeDeploy 將嘗試部署到部署群組中的所有執行個體,甚至是目前處於 [已停止] 狀態的執行個體。在最低運作狀態良好的主機計算中,已停止的執行個體做為失敗的執行個體有相同的影響。若要解決因太多停止的執行個體導致部署失敗,請重新啟動執行個體,或變更其標籤,使其從部署群組中排除。

CodeDeploy 嘗試將應用程式修訂版部署到部署群組運作狀態不良的執行個體,以啟動部署程序。對於每次成功部署,請將執行個體的健全狀態 CodeDeploy 變更為狀況良好,並將其新增至部署群組的運作狀態良好的執行個 CodeDeploy 然後將目前狀態良好的執行個體數目與指定的運作狀態良好的執行個體數目下限

  • 如果運作良好的執行個體數目小於或等於指定的運作狀態良好的執行個體數目下限,請 CodeDeploy 取消部署,以確保運作狀態良好的執行個體數量不會隨著部署次數而減少。

  • 如果運作良好的執行個體數目超過指定的運作狀態良好執行個體數目下限至少一個,請將應用程式修訂版本 CodeDeploy 部署至原始健康狀態良好的執行個體集。

如果運作狀態良好的執行個體部署失敗,則會將該執行個體的健全狀態 CodeDeploy 變更為狀態不良。部署進行時,會 CodeDeploy 更新目前狀態良好的執行個體數目,並將其與指定的運作狀態良好的執行個體數目下限進行比較。如果在部署程序的任何時候,運作狀態良好的執行個體數目降至指定的最小數目,請 CodeDeploy 停止部署。此舉可防止接下來可能會失敗的部署,以及防止數量低於指定最小值的正常運作執行個體發生。

注意

請確定您指定的正常運作執行個體最小值低於部署群組中執行個體的總數。若您指定的是百分比,請記住系統就自動將數值進位。否則,當部署開始時,運作狀態良好的執行個體數目已經小於或等於指定的運作狀態良好執行個體數目下限,而且整體部署 CodeDeploy 會立即失敗。

CodeDeploy 也會使用指定的運作狀態良好的執行個體數目下限,以及實際運作狀態良好的執行個體數目,來決定是否以及如何將應用程式修訂部署到多 根據預設,會將應用程式修訂版 CodeDeploy 部署到盡可能多的執行個體,而不會有運作狀態良好的執行個體數量低於指定的運作狀態良好執行個體數目下限的風險。

若要決定一次部署的執行個體數目,請 CodeDeploy 使用下列計算:

[total-hosts] - [minimum-healthy-hosts] = [number-of-hosts-to-deploy-to-at-once]

例如:

  • 如果您的部署群組有 10 個執行個體,且您將運作狀態良好的執行個體數目下限設定為 9,則一次部 CodeDeploy 署至 1 個執行個體。

  • 如果您的部署群組有 10 個執行個體,且您將運作狀態良好的執行個體數目下限設定為 3,請在第一個批次中同時部 CodeDeploy 署至 7 個執行個體,然後部署至第二個批次中剩餘的 3 個執行個體。

  • 如果您的部署群組有 10 個執行個體,且您將運作狀態良好的執行個體數目下限設定為 0,請同時部 CodeDeploy 署至 10 個執行個體。

範例

以下範例假設部署群組有 10 個執行個體。

正常運作執行個體的最小值:95%

CodeDeploy 將運作良好的執行個體數目下限四捨五入至 10 個執行個體,這等於運作良好的執行個體數 在尚未部署修訂版至任何執行個體上,整體部署已立刻失敗。

正常運作執行個體的最小值:9

CodeDeploy 一次將修訂部署到一個執行個體。如果部署到任何執行個體失敗,則整體部署會 CodeDeploy 立即失敗,因為運作狀態良好的執行個體數目等於運作狀態良好的執行個體數目 此規則的例外是若最後一個執行個體發生失敗,仍然可以成功部署。

CodeDeploy 一次一個執行個體繼續部署,直到任何部署失敗或整體部署完成為止。如果所有 10 個部署皆成功,部署群組則會有 10 個正常運作執行個體。

正常運作執行個體的最小值:8

CodeDeploy 一次將修訂部署到兩個執行個體。如果其中兩個部署失敗,則整體部署會 CodeDeploy 立即失敗。此規則的例外是若最後一個執行個體是第二個發生失敗的,則仍然可以成功部署。

正常運作執行個體的最小值:0

CodeDeploy 一次將修訂部署到整個部署群組。至少必須有一個部署到執行個體成功,則整體部署才會成功。如果 0 個執行個體正常運作,則部署會失敗。這是因為要將整體部署標示為成功,整體部署完成時,至少一個執行個體必須為健康狀態良好,即使運作狀態最低的執行個體值為 0 也是如此。

關於每個可用區域的運作狀態良好的執行個體數

注意

本節使用執行個體主機可互換的術語來指向 Amazon EC2 執行個體。

如果您要部署到多個可用區域中的執行個體,您可以選擇性地啟用該zonal configuration功能, CodeDeploy 以便一次部署到一個可用區域。

啟用此功能時, CodeDeploy 將確保運作良好的主機數目維持在「每個區域運作狀態最低的主機」「運作狀態最低主機」值之上。如果運作良好的主機數目低於任一值,則跨所有可用區域的部署 CodeDeploy 失敗。

若要計算一次部署的主機數目,請同時 CodeDeploy 使用「每個區域的運作狀況最低主機」和「運作狀態最低主機」值。 CodeDeploy 將使用較小的計算 [A][B],其中[A][B]

[A] = [total-hosts] - [min-healthy-hosts] = [number-of-hosts-to-deploy-to-at-once]
[B] = [total-hosts-per-AZ] - [min-healthy-hosts-per-AZ] = [number-of-hosts-to-deploy-to-at-once-per-AZ]

在確定要一次部署的主機數目之後,請按批次部 CodeDeploy 署到該數目的主機,一次部署一個可用區域,並在區域之間進行選擇性暫停 (或「烘烤時間」)。

範例

如果您的部署設定如下:

  • [total-hosts]200

  • [minimum-healthy-hosts]160

  • [total-hosts-per-AZ]100

  • [minimum-healthy-hosts-per-AZ]50

Then...

  • [A] = 200 - 160 = 40

  • [B] = 100 - 50 = 50

  • 40小於 50

因此, CodeDeploy 將立即部署到40主機。

在這個案例中,部署會展開如下:

  1. CodeDeploy 部署至第一個可用區域:

    1. CodeDeploy 部署到第一個40主機。

    2. CodeDeploy 部署到下一個40主機。

    3. CodeDeploy 部署到剩餘的20主機。

      第一個可用區域的部署現在已完成。

  2. (選擇性) 依監控持續時間或第一個區域設定新增監視持續時間所定義, CodeDeploy 等待部署至第一個區域「烘焙」。如果沒有問題,請 CodeDeploy 繼續。

  3. CodeDeploy 部署至第二個可用區域:

    1. CodeDeploy 部署到第一個40主機。

    2. CodeDeploy 部署到下一個40主機。

    3. CodeDeploy 部署到剩餘的20主機。

      第二個也是最後一個可用區域的部署現已完成。

若要瞭解區域組態功能,以及如何指定每個可用區域的運作狀態良好的執行個體數目下限,請參閱zonal configuration