選擇 AWS CloudFormation StackSets 的並行模式 - AWS CloudFormation

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

選擇 AWS CloudFormation StackSets 的並行模式

並行模式是 的參數StackSetOperationPreferences,可讓您選擇並行層級在 StackSet 操作期間的行為。您可以選擇以下模式:

  • 嚴格容錯能力:此選項會動態降低並行層級,以確保故障帳戶數目絕不會超過容錯能力 +1 的值。初始實際並行值會設定為並行帳戶數目上限值,或容錯能力 +1 的值,兩者中的較低值。實際並行值隨後會依故障次數按比例減少。這是預設行為。

  • 軟性容錯能力:此選項會將容錯能力與實際並行值分離。這可讓 StackSet 操作在最大並行帳戶值設定的並行層級執行,無論失敗次數為何。

嚴格容錯能力會在發生 StackSet 操作失敗時降低部署速度,因為每次失敗時並行減少。軟性容錯能力會優先考慮部署速度,同時仍利用 CloudFormation 安全功能。這可讓您檢閱和解決 StackSet 操作失敗的常見問題,例如與現有資源、服務配額和許可相關的問題。

如需 StackSets 堆疊操作故障的詳細資訊,請參閱 堆疊操作失敗的常見原因

如需有關並行帳戶數目上限容錯能力的詳細資訊,請參閱 StackSet 操作選項

每個並行模式的運作方式

下圖提供每個並行模式在 StackSet 操作期間如何運作的視覺化呈現。節點字串代表單一 的部署 AWS 區域 ,而每個節點都是目標 AWS 帳戶。

嚴格容錯能力

當使用嚴格容錯能力的 StackSet 操作的容錯能力值設為 5 且並行帳戶值上限設為 10 時,實際並行值為 6。實際並行值為 6,因為此容錯能力 5 +1 低於並行帳戶數目上限的值。

下圖顯示容錯能力值對最大並行帳戶值的影響,以及兩者對 StackSet 操作的實際並行的影響:

使用嚴格容錯能力的 StackSet 操作。容錯能力為 5,並行帳戶上限為 10,並行為 6。

當部署開始且存在故障堆疊執行個體時,實際並行值會減少,以提供安全的部署體驗。當 StackSets 無法部署 1 個堆疊執行個體時,實際並行值會從 6 減少到 5。

使用嚴格容錯能力的 StackSet 操作有 2 個成功部署和 1 個失敗。
使用嚴格容錯能力的 StackSet 操作已將實際並行減少至 5,因為現在有一個故障。

嚴格容錯能力模式會按比例將實際並行值減少至故障堆疊執行個體數目。在下列範例中,當 StackSets 無法部署 2 個以上的堆疊執行個體時,實際並行值會從 5 減少到 3,讓故障堆疊執行個體總計達到 3。

使用嚴格容錯能力的 StackSet 操作現在有 3 個失敗的部署。並行已降至 3。

當失敗的堆疊執行個體數目等於容錯能力 +1 的定義值時,StackSets 會失敗 StackSet 操作。在下列範例中,當有 6 個故障堆疊執行個體且容錯能力值為 5 時,StackSets 無法執行操作。

使用嚴格容錯能力的 StackSet 操作現在有 6 個失敗的部署。StackSet 操作失敗。

在此範例中,CloudFormation 在停止 StackSet 操作之前部署了 9 個堆疊執行個體 (3 個成功,6 個失敗)。

軟性容錯能力

當使用軟性容錯能力的 StackSet 操作的容錯能力值設為 5 且並行帳戶上限值設為 10 時,實際並行值為 10。

具有軟性容錯能力的 StackSet 操作。容錯能力為 5 個最大並行帳戶,實際並行能力為 10 個。

當部署開始且有故障堆疊執行個體時,不會變更實際並行值。在下列範例中,1 個堆疊操作失敗,但實際並行值保持在 10。

具有軟性容錯能力的 StackSet 操作會遇到第一個故障。實際並行維持在 10。

即使再出現 2 個堆疊執行個體故障,實際並行值仍會保持在 10。

具有軟性容錯能力的 StackSet 操作現在有 2 次成功和 3 次失敗,但實際並行仍然是 10 次。

當失敗的堆疊執行個體超過容錯能力值時,StackSets 會失敗 StackSet 操作。在下列範例中,當有 6 個故障堆疊執行個體且容錯能力計數為 5 時,StackSets 無法執行操作。但是,並行佇列中的其餘操作完成之前,操作不會結束。

軟性容錯能力的 StackSet 操作達到 6 失敗,但必須完成並行佇列中剩餘的操作。

StackSets 會繼續部署已位於並行佇列中的堆疊執行個體。這意味著故障堆疊執行個體數目可能會高於容錯能力。在下列範例中,有 8 個失敗的堆疊執行個體,因為並行佇列仍有 7 個操作要執行,即使 StackSet 操作已達到容錯能力 5。

StackSet 操作總共有 8 個失敗,因為在達到失敗閾值後,佇列中還剩下 7 個部署。

在此範例中,StackSets 在停止堆疊操作之前部署了 15 個堆疊執行個體 (7 個成功和 8 個失敗)。

根據部署速度,選擇嚴格容錯能力和軟性容錯能力

嚴格容錯能力和軟容錯能力模式之間進行選擇,取決於 StackSet 部署的偏好速度和允許的部署失敗次數。

下表顯示每個並行模式如何處理嘗試部署總計 1000 個堆疊執行個體時失敗的 StackSet 操作。在每個案例中,將容錯能力值設定為 100 個堆疊執行個體,並將並行帳戶數目上限值設定為 250 個堆疊執行個體。

StackSets 實際上會將帳戶做為滑動視窗排入佇列 (請參閱 每個並行模式的運作方式),但此範例會按批次形式顯示操作以示範每種模式的速度。

嚴格容錯能力

此範例使用嚴格容錯能力模式,降低相對於每個前述批次中發生之故障次數的實際並行值。每個批次都有 20 個失敗的執行個體,然後將下一個批次的實際並行降低 20,直到 StackSet 操作達到容錯能力值 100。

在下表中,第一個批次的初始實際並行值為 101 個堆疊執行個體。實際並行值為 101,因為該值是並行帳戶上限值 (250) 和容錯能力 (100) +1 兩者中的較低值。每個批次包含 20 個故障堆疊執行個體部署,這隨後會將每個後續批次的實際並行值減少 20 個堆疊執行個體。

嚴格容錯能力 第 1 批次 第 2 批次 第 3 批次 第 4 批次 第 5 批次 第 6 批次
實際並行計數 101 81 61 4.1 21 -
故障執行個體計數 20 20 20 20 20 -
成功堆疊執行個體計數 81 61 4.1 21 1 -

使用嚴格容錯能力的操作會在 StackSet 操作達到 100 個堆疊執行個體的容錯能力時,以 5 個批次完成 305 個堆疊執行個體部署。StackSet 操作會在失敗之前成功部署 205 個堆疊執行個體。

軟性容錯能力

此範例使用軟性容錯能力模式,無論故障執行個體數目為何,都會保持與並行帳戶數目上限值定義的實際並行計數相同 (250 個堆疊執行個體)。StackSet 操作會保留相同的實際並行,直到達到 100 個執行個體的容錯能力值為止。

在下表中,第一個批次的初始實際並行值為 250 個堆疊執行個體。實際並行值為 250,因為已將並行帳戶數目上限值設定為 250,並且軟性容錯能力模式允許 StackSets 使用此值做為實際並行值,而無論故障次數為何。即使此範例中的每個批次都有 50 次故障,實際並行值仍不會受到影響。

軟性容錯能力 第 1 批次 第 2 批次 第 3 批次 第 4 批次 第 5 批次 第 6 批次
實際並行計數 250 250 - - - -
故障執行個體計數 50 50 - - - -
成功堆疊執行個體計數 200 200 - - - -

使用相同的並行帳戶數目上限值和容錯能力值時,使用軟性容錯能力模式的操作會以 2 個批次完成 500 個堆疊執行個體部署。StackSet 操作會在失敗之前成功部署 400 個堆疊執行個體。

選擇並行模式 (主控台)

建立或更新 StackSet 時,請在設定部署選項頁面上,針對並行模式選擇嚴格容錯能力軟性容錯能力

選擇並行模式 (AWS CLI)

您可使用 ConcurrencyMode 參數搭配下列 StackSets 命令:

這些命令具有一個稱為 --operation-preferences 並且可使用 ConcurrencyMode 設定的現有參數。ConcurrencyMode 可設定為下列其中一個值:

  • STRICT_FAILURE_TOLERANCE

  • SOFT_FAILURE_TOLERANCE

下列範例會使用 STRICT_FAILURE_TOLERANCE 建立堆疊執行個體ConcurrencyMode,並將 FailureToleranceCount設定為 10,並將 MaxConcurrentCount設定為 5。

aws cloudformation create-stack-instances \ --stack-set-name example-stackset \ --accounts 123456789012 \ --regions eu-west-1 \ --operation-preferences ConcurrencyMode=STRICT_FAILURE_TOLERANCE,FailureToleranceCount=10,MaxConcurrentCount=5
注意

如需建立和更新 StackSet 的詳細程序,請參閱下列主題: