

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

# 選擇 CloudFormation StackSets 的並行模式
<a name="concurrency-mode"></a>

**並行模式**是一個參數，讓 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_StackSetOperationPreferences.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_StackSetOperationPreferences.html) 允許您選擇並行層級在堆疊集操作期間的行為方式。您可以選擇以下模式：
+ **嚴格容錯能力**：此選項會動態降低並行層級，以確保故障帳戶數目絕不會超過**容錯能力** \+1 的值。初始實際並行值會設定為**並行帳戶數目上限**值，或**容錯能力** \+1 的值，兩者中的較低值。實際並行值隨後會依故障次數按比例減少。這是預設行為。
+ **軟性容錯能力**：此選項會將**容錯能力**與實際並行值分離。這可讓堆疊集操作以**並行帳戶數目上限**值設定的並行層級執行，無論故障次數為何。

**嚴格容錯能力**會降低部署速度，由於每次故障會使並行值減少，因此堆疊集操作會發生故障。**軟性容錯能力**會優先考慮部署速度，同時仍然利用 CloudFormation 安全功能。這可讓您檢閱並處理堆疊集操作故障問題，以解決與現有資源、服務配額和許可相關的常見問題。

如需 StackSets 堆疊操作故障的詳細資訊，請參閱 [堆疊操作失敗的常見原因](stacksets-troubleshooting.md#common-reasons-for-stack-operation-failure)。

如需有關**並行帳戶數目上限**與**容錯能力**的詳細資訊，請參閱 [StackSet 操作選項](stacksets-concepts.md#stackset-ops-options)。

## 每個並行模式的運作方式
<a name="concurrency-mode-example"></a>

下圖提供了堆疊集操作期間，每個**並行模式**運作方式的視覺化呈現。節點字串代表單一 的部署 AWS 區域 ，而每個節點都是目標 AWS 帳戶。

**嚴格容錯能力**  
當使用**嚴格容錯能力**的堆疊集操作將**容錯能力**值設定為 5，並將**並行帳戶數目上限**值設定為 10 時，則實際並行值為 6。實際並行值為 6，因為此**容錯能力** 5 \+1 低於**並行帳戶數目上限**的值。  
下圖顯示**容錯能力**對**並行帳戶數目上限**值的影響，以及對堆疊集操作實際並行值的影響：  

![使用嚴格容錯能力的堆疊集操作。容錯能力為 5，並行帳戶上限為 10，並行為 6。](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-1.png)

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

![使用嚴格容錯能力的堆疊集操作有 2 個成功部署和 1 個失敗部署。](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-2.png)


![使用嚴格容錯能力的堆疊集操作已將實際並行減少至 5，因為現在有一個故障。](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-3.png)

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

![使用嚴格容錯能力的堆疊集操作現在有 3 個失敗部署。並行已降至 3。](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-4.png)

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

![使用嚴格容錯能力的堆疊集操作現在有 6 個失敗部署。堆疊集操作失敗。](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-5.png)

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

**軟性容錯能力**  
當使用**軟性容錯能力**的堆疊集操作將**容錯能力**設定為 5，並將**並行帳戶數目上限**值設定為 10 時，實際並行值為 10。  

![具有軟性容錯能力的堆疊集操作。容錯能力為最多 5 個並行帳戶，實際並行能力為 10 個。](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-1.png)

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

![具有軟性容錯能力的堆疊集操作會遇到第一個故障。實際並行維持為 10。](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-2.png)

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

![具有軟性容錯能力的堆疊集操作現在有 2 次成功和 3 次失敗，但實際並行仍然為 10 次。](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-3.png)

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

![具有軟性容錯能力的堆疊集操作達到 6 次失敗，但必須完成並行佇列中剩餘的操作。](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-4.png)

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

![堆疊集操作總共有 8 次失敗，因為達到失敗閾值後佇列中還剩下 7 個部署。](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-5.png)

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

## 根據部署速度，選擇嚴格容錯能力和軟性容錯能力
<a name="concurrency-mode-comparison"></a>

依據您偏好的堆疊集部署速度和許可的部署故障次數，選擇**嚴格容錯能力**和**軟性容錯能力**模式。

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

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

### 嚴格容錯能力
<a name="concurrency-mode-comparison-strict"></a>

此範例使用**嚴格容錯能力**模式，降低相對於每個前述批次中發生之故障次數的實際並行值。每個批次有 20 個故障執行個體，隨後將下列批次的實際並行值降低 20，直至堆疊集操作達到**容錯能力**值為 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 | - | 

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

### 軟性容錯能力
<a name="concurrency-mode-comparison-soft"></a>

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

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


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

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

## 選擇並行模式 (主控台)
<a name="concurrency-mode-console"></a>

建立或更新堆疊集時，請在**設定部署選項**頁面的**並行模式**中選擇**嚴格容錯能力**或**軟性容錯能力**。

## 選擇並行模式 (AWS CLI)
<a name="concurrency-mode-cli"></a>

您可使用 `ConcurrencyMode` 參數搭配下列 StackSets 命令：
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/delete-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/delete-stack-instances.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/detect-stack-set-drift.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/detect-stack-set-drift.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/import-stacks-to-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/import-stacks-to-stack-set.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-instances.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-set.html)

這些命令具有一個稱為 `--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
```

**注意**  
如需建立和更新堆疊集的詳細程序，請參閱下列主題：  
[建立 StackSets (自我管理許可)](stacksets-getting-started-create-self-managed.md)
[建立 StackSets (具有服務受管許可)](stacksets-orgs-associate-stackset-with-org.md)
[更新 StackSets](stacksets-update.md)