

# CloudFormation StackSets の同時実行モードの選択
<a name="concurrency-mode"></a>

**[同時実行モード]** は、StackSet オペレーション中の同時実行レベルの動作を選択できる [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_StackSetOperationPreferences.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_StackSetOperationPreferences.html) のパラメータです。以下のいずれかのモードを選択できます。
+ **厳密な耐障害性**: このオプションでは、失敗したアカウントの数が**耐障害性** \$11 の値を超えないように、同時実行レベルを動的に下げます。実際の同時実行数の初期値は、**同時アカウントの最大数**の値または**耐障害性** \$11 の値のいずれか低い方に設定されます。その場合、実際の同時実行数は障害の数に比例して減少します。これがデフォルトの動作です。
+ **ソフト耐障害性**: このオプションは**耐障害性**と実際の同時実行性を切り離します。これにより、障害の数に関係なく、StackSet オペレーションを **[同時アカウントの最大数]** の値で設定された同時実行レベルで実行できます。

**[厳格な耐障害性]** では、StackSet オペレーションの障害が発生すると、障害ごとに同時実行性が低下するため、デプロイ速度が低下します。**[ソフト耐障害性]** は、CloudFormation 安全機能を活用しながらデプロイ速度を優先させます。これにより、既存のリソース、サービスクォータ、アクセス許可に関連する問題など、一般的な問題による StackSet オペレーションの障害を確認して対処できます。

StackSets スタック操作の失敗の詳細については、「[スタックオペレーション失敗の一般的な原因](stacksets-troubleshooting.md#common-reasons-for-stack-operation-failure)」を参照してください。

**同時アカウントの最大数**と**耐障害性**の詳細については、「[StackSet オペレーションのオプション](stacksets-concepts.md#stackset-ops-options)」を参照してください。

## 各同時実行モードの仕組み
<a name="concurrency-mode-example"></a>

以下の画像は、StackSet オペレーション中の各 **[同時実行モード]** の動作を視覚的に表したものです。ノードの文字列は 1 つの AWS リージョンへのデプロイを表し、各ノードがターゲット AWS アカウントです。

**厳密な耐障害性**  
**[厳格な耐障害性]** を使用する StackSet オペレーションで、**[耐障害性]** の値が 5 に設定され、**[同時アカウントの最大数]** の値が 10 に設定されている場合、実際の同時実行数は 6 になります。これは、**耐障害性**の値 5 \$11 が**同時アカウントの最大数**の値よりも低いためです。  
以下の図は、**[耐障害性]** の値が **[同時アカウントの最大数]** の値に与える影響と、両方が StackSet オペレーションの実際の同時実行性に与える影響を示しています。  

![\[厳格な耐障害性を使用する StackSet オペレーション。耐障害性は 5、同時アカウントの最大数は 10、同時実行数は 6 です。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-1.png)

デプロイが開始され、スタックインスタンスに障害が発生すると、安全なデプロイを実現するために実際の同時実行数が減少します。StackSets が 1 つのスタックインスタンスのデプロイに失敗すると、実際の同時実行数は 6 から 5 に減少します。  

![\[厳格な耐障害性を使用する StackSet オペレーションで、デプロイの成功数が 2、失敗数が 1 になっています。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-2.png)


![\[失敗数が 1 になったことから、厳格な耐障害性を使用する StackSet オペレーションが実際の同時実行数を 5 に減らしました。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-3.png)

**厳密な耐障害性**モードでは、障害が発生したスタックインスタンスの数に比例して実際の同時実行数が減少します。次の例では、StackSets がさらに 2 つのスタックインスタンスのデプロイに失敗し、実際の同時実行数が 5 から 3 に減少して、失敗したスタックインスタンスの合計が 3 になっています。  

![\[これで、厳格な耐障害性を使用する StackSet オペレーションでのデプロイ失敗数が 3 になりました。同時実行数は 3 に減らされました。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-4.png)

StackSets では、障害が発生したスタックインスタンスの数が **[耐障害性]** \$11 の定義値に等しい場合、StackSet オペレーションに失敗します。次の例では、障害が発生したスタックインスタンスが 6 つあり、**耐障害性**の値が 5 の場合、StackSets は操作に失敗します。  

![\[これで、厳格な耐障害性を使用する StackSet オペレーションでのデプロイ失敗数が 6 になりました。この StackSet オペレーションは失敗します。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-strict-failure-tolerance-5.png)

この例では、CloudFormation は StackSet オペレーションを停止する前に 9 つのスタックインスタンス (3 つは成功、6 つは失敗) をデプロイしました。

**ソフト耐障害性**  
**[ソフト耐障害性]** を使用する StackSet オペレーションで、**[耐障害性]** の値が 5 に設定され、**[同時アカウントの最大数]** の値が 10 に設定されている場合、実際の同時実行数は 10 になります。  

![\[ソフト耐障害性を使用する StackSet オペレーション。耐障害性は同時アカウントの最大数 5 で、実際の同時実行数は 10 です。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-1.png)

デプロイが開始され、スタックインスタンスに障害が発生しても、実際の同時実行数は変わりません。次の例では、1 つのスタック操作が失敗しましたが、実際の同時実行数は 10 のままです。  

![\[ソフト耐障害性を使用する StackSet オペレーションで、最初の失敗が発生します。実際の同時実行数は 10 のままです。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-2.png)

スタックインスタンスにさらに 2 回障害が発生しても、実際の同時実行数は 10 のままです。  

![\[ソフト耐障害性を使用する StackSet オペレーションの成功数が 2、失敗数が 3 になりましたが、実際の同時実行数は引き続き 10 のままです。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-3.png)

StackSets では、障害が発生したスタックインスタンスの数が **[耐障害性]** を超えた場合、StackSet オペレーションに失敗します。次の例では、障害が発生したスタックインスタンスが 6 つあり、**耐障害性**のカウントが 5 の場合、StackSets は操作に失敗します。ただし、同時実行キューの残りの操作が終了するまで操作は終了しません。  

![\[ソフト耐障害性を使用する StackSet オペレーションの失敗数が 6 になりましたが、同時実行キューに残っている処理を終了する必要があります。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-4.png)

StackSets は、同時実行キューにすでに存在するスタックインスタンスを引き続きデプロイします。つまり、障害が発生したスタックインスタンスの数は**耐障害性**よりも多くなる可能性があるということです。次の例では、StackSet オペレーションが **[耐障害性]** の 5 に達したにもかかわらず、同時実行キューに実行すべきオペレーションが 7 つ残っているため、8 つのスタックインスタンスが失敗しています。  

![\[StackSet オペレーションの合計失敗数は 8 になります。これは、失敗しきい値に達した後も 7 個のデプロイがキューに残っていたためです。\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/concurrency-soft-failure-tolerance-5.png)

この例では、StackSets はスタックセットの操作を停止する前に 15 つのスタックインスタンス (7 つは成功、8 つは失敗) をデプロイしました。

## デプロイ速度に基づいて、厳密な耐障害性とソフト耐障害性のどちらかを選択します。
<a name="concurrency-mode-comparison"></a>

**[厳格な耐障害性]** モードと **[ソフト耐障害性]** モードのどちらを選択するかは、StackSet のデプロイの優先速度と許容されるデプロイ失敗数に左右されます。

次の表は、合計 1,000 個のスタックインスタンスをデプロイしようとして失敗した StackSet オペレーションを、各同時実行モードがどのように処理するかを示しています。各シナリオでは、**耐障害性**の値は 100 スタックインスタンスに設定され、**同時アカウントの最大数**の値は 250 スタックインスタンスに設定されています。

StackSets は実際にはスライディングウィンドウとしてアカウントをキューに入れていますが (「[各同時実行モードの仕組み](#concurrency-mode-example)」を参照)、この例では操作をバッチで示して各モードの速度を示しています。

### 厳密な耐障害性
<a name="concurrency-mode-comparison-strict"></a>

この例では、**厳密な耐障害性**モードを使用しているため、先行する各バッチで発生した障害の数と比較して、実際の同時実行性が低下します。各バッチには 20 個の失敗したインスタンスがあり、StackSet オペレーションが **[耐障害性]** の値の 100 に達するまで、次のバッチの実際の同時実行数は 20 ずつ低下します。

次の表では、最初のバッチの実際の同時実行数は 101 スタックインスタンスです。実際の同時実行数は 101 です。これは、**同時アカウントの最大数** (250) と**耐障害性** (100) \$11 のどちらか低い値であるためです。各バッチには 20 の失敗したスタックインスタンスのデプロイが含まれ、それ以降の各バッチの実際の同時実行数は 20 スタックインスタンスずつ減少します。


| **厳密な耐障害性** | **バッチ 1** | **バッチ 2** | **バッチ 3** | **バッチ 4** | **バッチ 5** | **バッチ 6** | 
| --- | --- | --- | --- | --- | --- | --- | 
| 実際の同時実行数 | 101 | 81 | 61 | 41 | 21 | - | 
| 失敗したインスタンス数 | 20 | 20 | 20 | 20 | 20 | - | 
| 成功したスタックインスタンス数 | 81 | 61 | 41 | 21 | 1 | - | 

**[厳格な耐障害性]** を使用したオペレーションでは、StackSet オペレーションが 100 個のスタックインスタンスの **[耐障害性]** の値に達するまでに、5 つのバッチで 305 個のスタックインスタンスのデプロイが完了しました。StackSet オペレーションは、失敗する前に 205 個のスタックインスタンスを正常にデプロイします。

### ソフト耐障害性
<a name="concurrency-mode-comparison-soft"></a>

**ソフト耐障害性**モードを使用したこの例では、障害が発生したインスタンスの数に関係なく、250 個のスタックインスタンスの**同時アカウントの最大数**の値で定義されている実際の同時実行数と同じ値が維持されます。StackSet オペレーションは、**[耐障害性]** の値である 100 個のインスタンスに達するまで、実際の同時実行数を維持します。

次の表では、最初のバッチの実際の同時実行数は 250 スタックインスタンスです。実際の同時実行数は 250 です。これは、**同時アカウントの最大数**の値が 250 に設定されており、**ソフト耐障害性**モードにより、StackSets は障害の数に関係なく、この値を実際の同時実行数として使用できるためです。この例では、各バッチに 50 件の障害が発生していますが、実際の同時実行性には影響しません。


| **ソフト耐障害性** | **バッチ 1** | **バッチ 2** | **バッチ 3** | **バッチ 4** | **バッチ 5** | **バッチ 6** | 
| --- | --- | --- | --- | --- | --- | --- | 
| 実際の同時実行数 | 250 | 250 | - | - | - | - | 
| 失敗したインスタンス数 | 50 | 50 | - | - | - | - | 
| 成功したスタックインスタンス数 | 200 | 200 | - | - | - | - | 

同じ**同時アカウントの最大数**の値と**耐障害性**の値を使用した**ソフト耐障害性**モードでの操作では、2 つのバッチで 500 件のスタックインスタンスのデプロイが完了しました。StackSet オペレーションは、失敗する前に 400 個のスタックインスタンスを正常にデプロイします。

## 同時実行モードの選択 (コンソール)
<a name="concurrency-mode-console"></a>

StackSet を作成または更新する際には、**[デプロイオプションの設定]** ページの **[同時実行モード]** で、**[厳格な耐障害性]** または **[ソフト耐障害性]** を選択します。

## 同時実行モードの選択 (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)

これらのコマンドには、`ConcurrencyMode` 設定を使用できる `--operation-preferences` という既存のパラメータがあります。`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 の作成と更新の詳細な手順については、以下のトピックを参照してください。  
[StackSets を作成する (セルフマネージド許可)](stacksets-getting-started-create-self-managed.md)
[StackSets を作成する (サービスマネージド許可)](stacksets-orgs-associate-stackset-with-org.md)
[StackSets を更新する](stacksets-update.md)