

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

# 使用配置策略來判斷 EC2 機群或 Spot 機群如何達成 Spot 和隨需容量
<a name="ec2-fleet-allocation-strategy"></a>

當您在 EC2 機群或 Spot 機群中使用多個容量集區 (每個集區都包含執行個體類型和可用區域) 時，您可以使用*配置策略*來管理 Amazon EC2 如何從這些集區達成 Spot 和隨需容量。配置策略可以最佳化可用容量、價格，以及要使用的執行個體類型。Spot 執行個體和隨需執行個體有不同的配置策略。

**Topics**
+ [Spot 執行個體的分配策略](#ec2-fleet-allocation-strategies-for-spot-instances)
+ [隨需執行個體的配置策略](#ec2-fleet-allocation-strategies-for-on-demand-instances)
+ [選擇適當的 Spot 分配策略](#ec2-fleet-allocation-use-cases)
+ [維持 Spot 執行個體的目標容量](#ec2-fleet-maintain-fleet-capacity)
+ [針對隨需容量排定執行個體類型的優先順序](#ec2-fleet-on-demand-priority)

## Spot 執行個體的分配策略
<a name="ec2-fleet-allocation-strategies-for-spot-instances"></a>

您的啟動組態會決定可啟動 Spot 執行個體的 EC2 機群或 Spot 機群，及其所有可能 Spot 容量集區 (執行個體類型和可用區域)。但是，啟動執行個體時，機群會使用您指定的配置策略，從所有可能的集區中挑選特定的集區。

**注意**  
(僅 Linux 執行個體) 如果設定 Spot 執行個體為在開啟 [AMD SEV-SNP](sev-snp.md) 的情形下啟動，則需要支付額外的小時用量費，相當於所選執行個體類型[隨需小時費率](https://aws.amazon.com/ec2/pricing/on-demand/)的 10%。如果配置策略使用價格作為輸入，則機群不會包含此額外費用；僅使用 Spot 價格。

您可以為 Spot 執行個體指定下列其中一個配置策略：

**最佳化的價格容量** (建議)  
機群會識別擁有啟動中執行個體數目之最高容量可用性的集區。這表示我們將從我們認為在短期內中斷機會最低的集區請求 Spot 執行個體。機群接著會從這些最低價集區中請求 Spot 執行個體。  
**最佳化的價格容量**分配策略是大多數 Spot 工作負載的最佳選擇，例如無狀態容器化應用程式、微服務、Web 應用程式、資料和分析作業以及批次處理。  
如果您使用的是 AWS CLI，則參數名稱`price-capacity-optimized`適用於 EC2 機群，而`priceCapacityOptimized`適用於 Spot 機群。

**容量最佳化**  
機群會識別擁有啟動中執行個體數目之最高容量可用性的集區。這表示我們將從我們認為在短期內中斷機會最低的集區請求 Spot 執行個體。  
使用 Spot 執行個體，定價會依據長期的供需趨勢隨時間慢慢改變，但是容量會即時波動。**容量最佳化**策略會查看即時容量資料並預測哪些資料為最多可用，從而自動將 Spot 執行個體啟動到最可用的集區。這適用於可能具有較高的重新啟動工作中斷成本的工作負載，例如持續整合 (CI)、影像和媒體轉譯、深度學習以及可能具有較高的重新啟動工作中斷成本的高效能運算 (HPC) 工作負載。**容量最佳化**策略可實現盡可能少的中斷，因此可降低您工作負載的整體成本。  
或者，您可以使用具有優先順序參數的**容量最佳化優先順序**分配策略，以從最高到最低的優先順序對執行個體類型排序。您可以為不同的執行個體類型設定相同的優先順序。機群會先針對容量進行最佳化，但會盡力遵守執行個體類型的優先順序 (例如，如果遵守優先順序不會顯著影響機群佈建最佳容量的能力)。對於必須將中斷可能性降至最低的工作負載來說，這是一個很好的選擇，而且某些執行個體類型的偏好也很重要。請注意，當您為 Spot 容量設定執行個體類型的優先順序時，如果隨需執行個體分配策略設定為**優先順序**，則相同的優先順序也會套用在隨需執行個體上。使用 Spot 機群時，只有在您的機群使用啟動範本時，才支援使用優先順序。  
如果您使用的是 AWS CLI，則 EC2 機群`capacity-optimized-prioritized`的參數名稱為 `capacity-optimized`和 ，Spot 機群`capacityOptimizedPrioritized`的參數名稱為 `capacityOptimized`和 。

**多樣化**  
Spot 執行個體會分佈在所有 Spot 容量集區。如果您使用的是 AWS CLI，則參數名稱`diversified`適用於 EC2 機群和 Spot 機群。

**最低價格** (不建議)  
我們不建議**最低價格**的配置策略，因為該策略具有最高的 Spot 執行個體中斷風險。
Spot 執行個體來自價格最低且還有可用容量的集區。使用 時 AWS CLI，這是預設策略。不過，建議您透過指定**最佳化的價格容量**分配策略來覆寫預設。  
使用最低價格策略時，如果價格最低的集區沒有可用容量，Spot 執行個體來自下一個價格最低且還有可用容量的集區。如果集區在滿足您的所需容量之前用完容量，機群將繼續從下一個價格最低的集區中選取集區來滿足您的請求。為確保達到所需的容量，您可能會從數個集區中接收 Spot 執行個體。  
由於此策略僅考慮執行個體價格，而不考慮容量可用性，因此可能會導致高中斷率。  
只有在使用 AWS CLI時，才能使用最低價格分配策略。EC2 機群參數名稱為 `lowest-price`，而 Spot 機群則是 `lowestPrice`。

**要使用的集區數量**  
要配置目標 Spot 容量的 Spot 集區數量。僅在配置策略設定為**最低價格**時有效。機群會選取價格最低的 Spot 集區，並將目標 Spot 容量平均配置到您指定數量的 Spot 集區上。  
請注意，機群會盡最大努力從您指定的集區數量中提取 Spot 執行個體。如果集區在滿足您的目標容量之前用完 Spot 容量，則機群將透過從下一個價格最低的集區中進行提取來繼續滿足您的請求。為確保達到目標容量，您可能會從超過您指定的集區數量中接收 Spot 執行個體。同樣地，如果大多數集區沒有 Spot 容量，您可能會從少於您指定的集區數量中接收完整目標容量。  
此參數僅在指定**最低價格**分配策略時可用，且僅在使用 AWS CLI時可用。EC2 機群和 Spot 機群的參數名稱皆為 `InstancePoolsToUseCount`。

## 隨需執行個體的配置策略
<a name="ec2-fleet-allocation-strategies-for-on-demand-instances"></a>

您的啟動組態會決定 EC2 機群或 Spot 機群可從中啟動隨需執行個體的所有可能容量集區 (執行個體類型和可用區域)。但是，啟動執行個體時，機群會使用您指定的配置策略，從所有可能的集區中挑選特定的集區。

您可以為隨需執行個體指定下列其中一個配置策略：

**最低價格**  
隨需執行個體個體來自價格最低且還有可用容量的集區。這是預設策略。  
如果價格最低的集區沒有可用容量，隨需執行個體來自下一個價格最低且具有可用容量的集區。  
如果集區在滿足您的所需容量之前用完容量，機群將繼續從下一個價格最低的集區中選取集區來滿足您的請求。為確保達到所需的容量，您可能會從數個集區中接收隨需執行個體。

**優先順序**  
機群會使用您指派給每個啟動範本覆寫的優先順序，從優先順序最高的項目開始啟動執行個體類型。此策略無法與屬性型執行個體類型選取搭配使用。如需如何使用此配置策略的範例，請參閱 [針對隨需容量排定執行個體類型的優先順序](#ec2-fleet-on-demand-priority)。

## 選擇適當的 Spot 分配策略
<a name="ec2-fleet-allocation-use-cases"></a>

您可以選擇適當的 Spot 分配策略，進而針對您的使用案例最佳化機群。

### 平衡最低價格與容量可用性
<a name="ec2-fleet-strategy-balance-price-and-capacity-availability"></a>

為了平衡價格最低的 Spot 容量集區與具有最高容量可用性的 Spot 容量集區之間的利弊，建議您使用**最佳化的價格容量**分配策略。此策略會根據集區的價格和這些集區中 Spot 執行個體的容量可用性，決定要從哪些集區請求 Spot 執行個體的集區。這表示我們將從我們認為在短期內中斷機會最低的集區請求 Spot 執行個體，同時我們仍會將價格納入考慮。

如果您的機群執行彈性且無狀態的工作負載，包括容器化應用程式、微服務、Web 應用程式、資料和分析作業以及批次處理，則使用**最佳化的價格容量**分配策略，以達到最佳的成本節省和容量可用性。

如果您的機群執行的工作負載有較高的重新啟動工作中斷的成本，則您應該實作檢查點作業，以便應用程式可以在中斷時從該點重新啟動。透過使用檢查點作業，您可以讓**最佳化的價格容量**分配策略非常適合這些工作負載，因為其可以從價格最低的集區中分配容量，而這些集區也會提供較低的 Spot 執行個體中斷率。

如需使用**價格容量最佳化**配置策略的 JSON 組態範例，請參閱下列內容：
+ EC2 機群：[範例 10：在 price-capacity-optimized 機群中啟動 Spot 執行個體](ec2-fleet-examples.md#ec2-fleet-config11)
+ Spot 機群：[範例 11：在 priceCapacityOptimized 機群中啟動 Spot 執行個體](spot-fleet-examples.md#fleet-config11)

### 當工作負載具有較高的中斷成本時
<a name="ec2-fleet-strategy-capacity-optimized"></a>

如果您執行的工作負載使用價格相似的執行個體類型，或是中斷成本非常之高，以致於任何成本節省都不足以彌補中斷的邊際增加，則您可以選擇是否使用該**容量最佳化**策略。該策略可從最可用的 Spot 容量集區分配容量，而這些集區會提供較少中斷的可能性，進而降低您工作負載的整體成本。

當必須將中斷可能性降至最低，而且對於某些執行個體類型的偏好也很重要時，您可以使用**容量最佳化優先順序**分配策略，然後設定執行個體類型的順序，來表現您的集區優先順序，以從最高到最低優先順序使用。

請注意，當您設定**容量最佳化優先順序**的優先順序時，如果隨需執行個體設定為**優先順序**，則相同的優先順序也會套用至您的隨需執行個體。另請注意，使用 Spot 機群時，只有在您的機群使用啟動範本時，才支援使用優先順序。

如需使用**容量最佳化**配置策略的 JSON 組態範例，請參閱以下內容：
+ EC2 機群：[範例 8：在容量最佳化機群中啟動 Spot 執行個體](ec2-fleet-examples.md#ec2-fleet-config9)
+ Spot 機群：[範例 9：在容量最佳化機群中啟動 Spot 執行個體](spot-fleet-examples.md#fleet-config9)

如需使用**容量最佳化優先順序**配置策略的 JSON 組態範例，請參閱以下內容：
+ EC2 機群：[範例 9：使用優先順序在容量最佳化機群中啟動 Spot 執行個體](ec2-fleet-examples.md#ec2-fleet-config10)
+ Spot 機群：[範例 10：使用優先順序在容量最佳化機群中啟動 Spot 執行個體](spot-fleet-examples.md#fleet-config10)

### 當您的工作負載具有時間彈性且容量可用性並非相關因素時
<a name="ec2-fleet-strategy-time-flexible-workload"></a>

如果您的機群很小或執行時間很短，您仍可在考慮容量可用性的同時，使用**價格最佳化優先順序**來實現成本節省最大化。

### 當您的機群很龐大或執行時間較長時
<a name="ec2-fleet-strategy-large-workload-long-time"></a>

如果您的機群很龐大或執行時間較長，則可以使用**多樣化**策略，透過將多個 Spot 執行個體分散到多個集區中來提高機群的可用性。例如，如果機群指定了 10 個集區和 100 個執行個體的目標容量，則該機群會在每個集區中啟動 10 個 Spot 執行個體。如果某個集區的 Spot 價格超過該集區的最高價格，則只有 10% 的機群會受到影響。隨著時間，使用這種策略也會使您的機群對任何一個集區 Spot 價格上漲較不敏感。使用**多樣化**策略，Spot 機群不會將 Spot 執行個體啟動至任何等於或高於[隨需價格](https://aws.amazon.com/ec2/pricing/)的 Spot 價格集區中。

## 維持 Spot 執行個體的目標容量
<a name="ec2-fleet-maintain-fleet-capacity"></a>

在 Spot 執行個體因 Spot 價格或 Spot 容量集區可用容量的變更而終止之後，類型為 `maintain` 的機群會啟動替代 Spot 執行個體。分配策略會確定從中啟動替代執行個體的集區，如下所示：
+ 如果分配策略是**最佳化的價格容量**，則機群會在擁有最多 Spot 執行個體容量可用性的集區中啟動替代執行個體，同時將價格納入考慮並識別價格最低且具有高容量可用性的執行個體。
+ 如果分配策略為**最佳化容量**，則機群會在擁有最多 Spot 執行個體容量可用性的集區中啟動替代執行個體。
+ 如果分配策略為**多樣化**，則機群會將替代 Spot 執行個體分配到剩餘的集區中。

## 針對隨需容量排定執行個體類型的優先順序
<a name="ec2-fleet-on-demand-priority"></a>

EC2 機群或 Spot 機群嘗試實現您的隨需容量時，它會預設為先啟動價格最低的執行個體類型。若隨需分配策略設為**優先**，則機群會使用優先順序來決定在實現隨需容量時要先使用哪一種執行個體類型。優先順序會指派至啟動範本覆寫，優先順序最高的將會先啟動。

**範例：排定執行個體類型的優先順序**

在本例中，您設定三個啟動範本覆寫，每個範本均具有不同的執行個體類型。

執行個體類型的隨需價格在價格範圍內。以下是本範例中使用的執行個體類型，依價格順序列出，從最便宜的執行個體類型開始：
+ `m4.large` – 最便宜
+ `m5.large`
+ `m5a.large`

若您不使用優先順序來決定順序，則機群會以最便宜的執行個體類型開始來實現隨需容量。

但是，假設您有要首先使用且未使用的 `m5.large` 預留執行個體。您可設定啟動範本覆寫，以便依優先順序使用執行個體類型，如下所示：
+ `m5.large` – 優先順序 1
+ `m4.large` – 優先順序 2
+ `m5a.large` – 優先順序 3