

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

# EC2 機群或 Spot 機群的組態選項
<a name="ec2-fleet-configuration-strategies"></a>

規劃 EC2 機群或 Spot 機群時，建議您在決定如何設定機群時考慮下列選項。


****  

| 組態選項 | 問題 | 文件 | 
| --- | --- | --- | 
| 機群請求類型 |  您要建立的機群是否要針對所需的目標容量提交一次性請求？或是隨時間維持目標容量？  | [EC2 機群和 Spot 機群請求類型](ec2-fleet-request-type.md) | 
| Spot 執行個體 | 您是否計劃在機群中包含 Spot 執行個體？ 請檢閱 Spot 最佳實務，並在規劃機群時使用這些最佳實務，讓您能以最低價格佈建執行個體。 | [Amazon EC2 Spot 的最佳實務](spot-best-practices.md) | 
| 機群的花費限制 | 您是否要限制每小時要為機群支付的費用？ | [設定 EC2 機群或 Spot 機群的花費限制](ec2-fleet-control-spending.md) | 
| 執行個體類型和屬性型執行個體類型選項 |  是否要自行指定機群中的執行個體類型，或讓 Amazon EC2 選取符合您應用程式需求的執行個體類型？  | [指定屬性，為 EC2 機群或 Spot 機群選取執行個體類型](ec2-fleet-attribute-based-instance-type-selection.md) | 
| 執行個體權重 | 您是否要為每個執行個體類型指派權重，以代表其運算容量和效能，進而讓 Amazon EC2 選取任何可用的執行個體類型組合，以滿足您想要的目標容量？ | [使用執行個體權重來管理 EC2 機群或 Spot 機群的成本和效能](ec2-fleet-instance-weighting.md) | 
| 分配策略 | 您是否要自行決定是否針對可用容量、價格或執行個體類型進行最佳化，以用於機群中的 Spot 執行個體和隨需執行個體？ | [使用配置策略來判斷 EC2 機群或 Spot 機群如何達成 Spot 和隨需容量](ec2-fleet-allocation-strategy.md) | 
| 容量重新平衡 | 您是否希望機群自動取代具有風險的 Spot 執行個體？ | [在 EC2 機群和 Spot 機群中使用容量重新平衡，來取代具有風險的 Spot 執行個體](ec2-fleet-capacity-rebalance.md) | 
| 隨需容量保留 | 是否要為機群中的隨需執行個體預留容量？ | [使用容量保留功能來保留 EC2 機群中的隨需容量](ec2-fleet-on-demand-capacity-reservations.md) | 

# EC2 機群和 Spot 機群請求類型
<a name="ec2-fleet-request-type"></a>

EC2 機群或 Spot 機群的請求類型會決定請求是同步還是非同步，以及是否為針對所需目標容量的一次性請求，還是持續努力隨時間維持容量。設定機群時，您必須指定請求類型。

EC2 機群和 Spot 機群都提供兩種請求類型：`request` 和 `maintain`。此外，EC2 機群提供名為 `instant` 的第三個請求類型。機群請求類型

`instant` (僅限 EC2 機群)  
如果您將請求類型設定為 `instant`，EC2 機群會針對您所需容量送出同步的一次性請求。在 API 回應中，會傳回已啟動的執行個體，並為無法啟動的執行個體提供錯誤資訊。如需詳細資訊，請參閱[設定 instant 類型的 EC2 機群](instant-fleet.md)。

`request`  
如果您將請求類型設定為 `request`，機群會針對您所需容量送出非同步的一次性請求。如果容量因為 Spot 中斷而減少，機群不會嘗試補充 Spot 執行個體；如果無法使用容量，也不會在替代的 Spot 容量集區中提交請求。使用主控台建立 `request` 類型 Spot 機群時，請清除**維護目標容量**核取方塊。

`maintain` (default)  
如果您將請求類型設定為 `maintain`，機群會針對您所需容量送出非同步請求，並自動補充所有中斷的 Spot 執行個體以進行維持。使用主控台建立 `maintain` 類型 Spot 機群時，請選擇**維護目標容量**核取方塊。

# 設定 instant 類型的 EC2 機群
<a name="instant-fleet"></a>

*instant* 類型的 EC2 機群是同步的一次性請求，只會嘗試啟動您所需的容量一次。API 回應列出已啟動的執行個體，以及無法啟動的執行個體錯誤。使用 *instant* 類型的 EC2 機群具有本文描述的多種好處。本文末尾處會提供範例組態。

對於需要僅啟動 API 來啟動 EC2 執行個體的工作負載，您可以使用 RunInstances API。但是，憑藉 RunInstances，您只能在同一請求中啟動隨需執行個體或 Spot 執行個體，但不能同時啟動兩者。此外，當您使用 RunInstances 啟動 Spot 執行個體時，您的 Spot 執行個體請求僅限於一種執行個體類型和一個可用區域。此操作針對單個 Spot 容量集區 (一組具有相同執行個體類型和可用區域的未使用執行個體)。如果 Spot 容量集區沒有足夠的 Spot 執行個體容量來滿足您的請求，則 RunInstances 呼叫將會失敗。

相比使用 RunInstances 啟動 Spot 執行個體，我們建議使用具有設為 `instant` 的 `type` 參數的 CreateFleet API，以獲得以下好處：
+ **在一個請求中啟動隨需執行個體和 Spot 執行個體。**EC2 機群可以啟動隨需執行個體、Spot 執行個體或兩者皆有。如果有可用容量且您的請求中每個小時的價格上限超過 Spot 價格，則會滿足 Spot 執行個體的請求。
+ **增加 Spot 執行個體的可用性。**透過使用 `instant` 類型 EC2 機群，您可以按照 [Spot 最佳實務](spot-best-practices.md)啟動 Spot 執行個體，獲得以下好處：
  + **Spot 最佳實務：對執行個體類型和可用區域具有彈性。**

    好處：透過指定數個執行個體類型和可用區域，您可以增加 Spot 容量集區的數目。這可讓 Spot 服務更有機會尋找並配置您所需的 Spot 運算容量。一個很好的經驗法則是針對每個工作負載的至少 10 個執行個體類型上具有彈性，並確定所有可用區域均已設定為在 VPC 中使用。
  + **Spot 最佳實務：使用 price-capacity-optimized 分配策略。**

    好處：`price-capacity-optimized` 分配策略會自動從最可用的 Spot 容量集區識別執行個體並會自動從最低價格的集區佈建執行個體。由於您的 Spot 執行個體容量來自具有最佳容量的集區，因此可降低 Amazon EC2 需要回收容量時，中斷 Spot 執行個體的可能性。
+ **取得更廣泛的功能組合。**對於需要僅啟動 API 的工作負載，並且您更希望管理您的執行個體的生命週期，而不是讓 EC2 機群為您進行管理，請使用 `instant` 類型 EC2 機群，而不是 [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) API。EC2 機群提供比 RunInstances 更廣泛的功能組合，如以下範例所示。對於所有其他工作負載，您應使用 Amazon EC2 Auto Scaling，因為它為各種工作負載提供更全面的功能組合，例如 ELB 後端應用程式、容器化工作負載和佇列處理任務。

您可以使用*即時*類型的 EC2 機群，在容量區塊中啟動執行個體。如需詳細資訊，請參閱[教學課程：設定您的 EC2 機群以啟動執行個體至容量區塊](ec2-fleet-launch-instances-capacity-blocks-walkthrough.md)。

AWS Amazon EC2 Auto Scaling 和 Amazon EMR 等 服務會使用*立即*類型的 EC2 機群來啟動 EC2 執行個體。

## 立即類型 EC2 機群的先決條件
<a name="instant-fleet-prerequisites"></a>

如需建立 EC2 機群的先決條件，請參閱 [EC2 Fleet 先決條件](ec2-fleet-prerequisites.md)。

## instant 類型的 EC2 機群如何運作
<a name="how-instant-fleet-works"></a>

當使用 `instant` 類型的 EC2 機群時，事件的順序如下所示：

1. **設定：**設定 [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html) 請求類型為 `instant`。如需詳細資訊，請參閱[建立 EC2 Fleet](create-ec2-fleet.md)。請注意，在您進行 API 呼叫後，將無法修改它。

1. **請求：**在您進行 API 呼叫時，Amazon EC2 機群會針對您所需容量送出同步的一次性請求。

1. **回應：**API 回應列出已啟動的執行個體，以及無法啟動的執行個體錯誤。

1. **說明：**您可以描述您的 EC2 機群、列出與 EC2 機群相關的執行個體，並檢視 EC2 機群的歷史記錄。

1. **終止執行個體：**您隨時可終止執行個體。

1. **刪除機群請求：**機群請求可手動或自動刪除：
   + 手動：在執行個體啟動後，您可以[刪除機群請求](delete-fleet.md)。

     請注意，不支援具有執行中執行個體的已刪除 `instant` 機群。刪除 `instant` 機群時，Amazon EC2 會自動終止其所有執行個體。對於包含超過 1000 個執行個體的 機群，刪除請求可能會失敗。若您的機群有超過 1000 個執行個體，請先手動終止大部分執行個體，留下 1000 個或以下的執行個體。接著刪除機群，剩餘的執行個體將會自動終止。
   + 自動：Amazon EC2 會在以下任一時間後刪除機群請求：
     + 所有執行個體會終止。
     + 機群無法啟動任何執行個體。

## 範例
<a name="instant-fleet-examples"></a>

以下範例展示如何為不同的使用案例使用 `instant` 類型的 EC2 機群。如需使用 EC2 CreateFleet API 參數的詳細資訊，請參閱 *Amazon EC2 API 參考*中的 [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html) (建立機群)。

**Topics**
+ [範例 1：使用容量最佳化分配策略啟動 Spot 執行個體](#instant-fleet-example-1)
+ [範例 2：使用容量最佳化分配策略啟動單一 Spot 執行個體](#instant-fleet-example-2)
+ [範例 3：使用執行個體權重啟動 Spot 機群](#instant-fleet-example-3)
+ [範例 4：在單一可用區域內啟動 Spot 執行個體](#instant-fleet-example-4)
+ [範例 5：在單一可用區域內啟動單一執行個體類型的 Spot 執行個體](#instant-fleet-example-5)
+ [範例 6：僅在可啟動最小目標容量時才啟動 Spot 執行個體](#instant-fleet-example-6)
+ [範例 7：僅當可在單個可用區域中啟動相同執行個體類型的最低目標容量時，才能啟動 Spot 執行個體](#instant-fleet-example-7)
+ [範例 8：使用多個啟動範本來啟動執行個體](#instant-fleet-example-8)
+ [範例 9：啟動基於隨需執行個體的 Spot 執行個體](#instant-fleet-example-9)
+ [範例 10：基於使用容量保留和優先順序分配策略的隨需執行個體，使用容量最佳化分配策略啟動 Spot 執行個體](#instant-fleet-example-10)
+ [範例 11：使用容量最佳化的優先順序分配策略啟動 Spot 執行個體](#instant-fleet-example-11)
+ [範例 12：指定 Systems Manager 參數而非 AMI ID](#instant-fleet-example-12)

### 範例 1：使用容量最佳化分配策略啟動 Spot 執行個體
<a name="instant-fleet-example-1"></a>

下列範例指定 `instant` 類型 EC2 機群中所需的參數：啟動範本、目標容量、預設購買選項，以及啟動範本覆寫。
+ 啟動範本由其啟動範本名稱和版本編號識別。
+ 12 個啟動範本覆寫會指定 4 個不同執行個體類型和 3 個不同的子網路，每個都位於不同的可用區域。每個執行個體類型和子網路組合都定義了一個 Spot 容量集區，從而產生 12 個 Spot 容量集區。
+ 機群的目標容量為 20 個執行個體。
+ 預設購買選項為 `spot`，這會導致機群嘗試將 20 個 Spot 執行個體啟動到 Spot 容量集區中，且擁有啟動中執行個體數目之最佳容量。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 範例 2：使用容量最佳化分配策略啟動單一 Spot 執行個體
<a name="instant-fleet-example-2"></a>

您可以透過進行 `instant` 類型多個 EC2 機群的 API 呼叫，將 TotalTargetCapacity 設定為 1，以最佳方式一次啟動一個 Spot 執行個體。

下列範例指定 instant 類型 EC2 機群中所需的參數：啟動範本、目標容量、預設購買選項，以及啟動範本覆寫。啟動範本由其啟動範本名稱和版本編號識別。12 個啟動範本覆寫會擁有 4 個不同執行個體類型和 3 個不同的子網路，每個都位於不同的可用區域。機群的目標容量為 1 個執行個體，並且預設購買選項為 Spot，這會導致機群嘗試根據容量最佳化的分配策略從 12 個 Spot 容量集區之一啟動 Spot 執行個體，以從最可用的容量集區啟動 Spot 執行個體。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 1,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 範例 3：使用執行個體權重啟動 Spot 機群
<a name="instant-fleet-example-3"></a>

下列範例使用執行個體權重，這表示價格為每單位小時而非每執行個體小時的價格。假設一個工作負載單位需要 15 GB 的記憶體和 4 個 vCPU，每個啟動組態會列出不同的執行個體類型和不同的權重，具體取決於執行個體上可以執行的工作負載單位數。例如，m5.xlarge (4 個 vCPU 和 16 GB 記憶體) 可以執行一個單位，並且權重為 1，m5.2xlarge (8 個 vCPU 和 32 GB 記憶體) 可以執行 2 個單位，並且權重為 2，依此類推。目標總容量設定為 40 個單位。預設購買選項為 Spot，且分配策略容量最佳化，這會產生 40 個 m5.xlarge (40 除以 1)、20 個 m5.2xlarge (40 除以 2)、10 個 m5.4xlarge (40 除以 4)、5 個 m5.8xlarge (40 除以 8)，或基於容量最佳化分配策略，權重相加達到所需容量的執行個體類型的混合。

如需詳細資訊，請參閱 [使用執行個體權重來管理 EC2 機群或 Spot 機群的成本和效能](ec2-fleet-instance-weighting.md)。

```
{
   "SpotOptions":{
      "AllocationStrategy":"capacity-optimized"
   },
   "LaunchTemplateConfigs":[
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"m5.xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":1
            },
            {
               "InstanceType":"m5.xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":1
            },
            {
               "InstanceType":"m5.xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":1
            },
            {
               "InstanceType":"m5.2xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":2
            },
            {
               "InstanceType":"m5.2xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":2
            },
            {
               "InstanceType":"m5.2xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":2
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":4
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":4
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":4
            },
            {
               "InstanceType":"m5.8xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":8
            },
            {
               "InstanceType":"m5.8xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":8
            },
            {
               "InstanceType":"m5.8xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":8
            }
         ]
      }
   ],
   "TargetCapacitySpecification":{
      "TotalTargetCapacity":40,
      "DefaultTargetCapacityType":"spot"
   },
   "Type":"instant"
}
```

### 範例 4：在單一可用區域內啟動 Spot 執行個體
<a name="instant-fleet-example-4"></a>

您可以透過將 Spot 選項 SingleAvailabilityZone 設定為 true，將機群設定為啟動單一可用區域內的所有執行個體。

12 個啟動範本覆寫會擁有不同執行個體類型和子網路 (每個都位於不同的可用區域)，但權重容量相同。總目標容量為 20 個執行個體，預設購買選項為 Spot，Spot 分配策略為容量最佳化。EC2 機群使用啟動規格，從具有最佳容量的 Spot 容量集區啟動全部在單一可用區域中的 20 個 Spot 執行個體。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized",
        "SingleAvailabilityZone": true
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 範例 5：在單一可用區域內啟動單一執行個體類型的 Spot 執行個體
<a name="instant-fleet-example-5"></a>

您可以透過將 SpotOptions SingleInstanceType 和 SingleAvailabilityZone 設定為 true，將機群設定為啟動單一可用區域內，相同執行個體類型的所有執行個體。

12 個啟動範本覆寫會擁有不同執行個體類型和子網路 (每個都位於不同的可用區域)，但權重容量相同。總目標容量為 20 個執行個體，預設購買選項為 Spot，Spot 分配策略為容量最佳化。EC2 機群使用啟動規格，從具有最佳容量的 Spot 容量集區啟動全部在單一可用區域中，相同執行個體類型的 20 個 Spot 執行個體。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized",
        "SingleInstanceType": true,
        "SingleAvailabilityZone": true
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 範例 6：僅在可啟動最小目標容量時才啟動 Spot 執行個體
<a name="instant-fleet-example-6"></a>

只有透過將 Spot 選項 MinTargetCapacity 設定為要同時啟動的最小目標容量，以啟動最小目標容量，您才可以將機群設定為啟動執行個體。

指定 MinTargetCapacity 時，必須至少指定下列其中一個參數：SingleInstanceType 或 SingleAvailabilityZone。在此範例中，已指定 SingleInstanceType，因此所有 20 個執行個體都必須使用相同的執行個體類型。

12 個啟動範本覆寫會擁有不同執行個體類型和子網路 (每個都位於不同的可用區域)，但權重容量相同。總目標容量和最小目標容量設定為 20 個執行個體，預設購買選項為 Spot，並且 Spot 配置策略為容量最佳化。只有在能夠同時啟動全部 20 個執行個體時，EC2 機群才能使用啟動範本覆寫，從具有最優容量的 Spot 容量集區啟動 20 個 Spot 執行個體。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized",
        "SingleInstanceType": true,
        "MinTargetCapacity": 20
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 範例 7：僅當可在單個可用區域中啟動相同執行個體類型的最低目標容量時，才能啟動 Spot 執行個體
<a name="instant-fleet-example-7"></a>

只有透過將 Spot 選項 MinTargetCapacity 設定為要與 SingleInstanceType 和 SingleAvailabilityZone 選項同時啟動的最小目標容量，以在單個可用區域中，以單個執行個體類型啟動最小目標容量，您才可以將機群設定為啟動執行個體。

覆寫啟動範本的 12 個啟動規格擁有不同執行個體類型和子網路 (每個都位於不同的可用區域)，但權重容量相同。總目標容量和最小目標容量均設定為 20 個執行個體，預設購買選項為 Spot，Spot 分配策略為容量最佳化，SingleInstanceType 和 SingleAvailabilityZone 為 true。只有在能同時啟動全部 20 個執行個體時，EC2 機群才能使用啟動規格，從具有最佳容量的 Spot 容量集區啟動全部在單一可用區域中，相同執行個體類型的 20 個 Spot 執行個體。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized",
        "SingleInstanceType": true,
        "SingleAvailabilityZone": true,
        "MinTargetCapacity": 20
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 範例 8：使用多個啟動範本來啟動執行個體
<a name="instant-fleet-example-8"></a>

您可以透過指定多個啟動範本，將機群設定為針對不同執行個體類型或執行個體類型群組，啟動具有不同啟動規格的執行個體。在這個範例中，我們希望針對不同執行個體類型，擁有不同 EBS 磁碟區大小，並且我們在啟動範本 ec2-fleet-lt-4xl、ec2-fleet-lt-9xl 和 ec2-fleet-lt-18xl 中進行設定。

在此範例中，我們根據大小，針對 3 個執行個體類型使用 3 種不同的啟動範本。所有啟動範本上的啟動規格覆寫會根據執行個體類型上的 vCPU，使用執行個體權重。總目標容量為 144 個單位，預設購買選項為 Spot，Spot 分配策略為容量最佳化。EC2 機群可以使用啟動範本 ec2-fleet-4xl 來啟動 9 個 c5n.4xlarge (144 除以 16)，或使用啟動範本 ec2-fleet-9xl 來啟動 4 個 c5n.9xlarge (144 除以 36)，或使用啟動範本 ec2-fleet-18xl 來啟動 2 個 c5n.18xlarge (144 除以 72)，或基於容量最佳化分配策略，權重相加達到所需容量的執行個體類型的混合。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt-18xl",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5n.18xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":72
            },
            {
               "InstanceType":"c5n.18xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":72
            },
            {
               "InstanceType":"c5n.18xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":72
            }
         ]
      },
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt-9xl",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5n.9xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":36
            },
            {
               "InstanceType":"c5n.9xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":36
            },
            {
               "InstanceType":"c5n.9xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":36
            }
         ]
      },
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt-4xl",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5n.4xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":16
            },
            {
               "InstanceType":"c5n.4xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":16
            },
            {
               "InstanceType":"c5n.4xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":16
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 144,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 範例 9：啟動基於隨需執行個體的 Spot 執行個體
<a name="instant-fleet-example-9"></a>

下列範例指定機群 20 個執行個體的總目標容量，以及 5 個隨需執行個體的目標容量。預設購買選項為 Spot。機群依照指定啟動 5 個隨需執行個體，但需要再啟動 15 個執行個體才能實現總目標容量。差值購買選項的計算方式為 TotalTargetCapacity – OnDemandTargetCapacity = DefaultTargetCapacityType，這會導致啟動 15 個 Spot 執行個體的機群根據容量最佳化的分配策略，構成 12 個 Spot 容量集區之一。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "OnDemandTargetCapacity": 5,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 範例 10：基於使用容量保留和優先順序分配策略的隨需執行個體，使用容量最佳化分配策略啟動 Spot 執行個體
<a name="instant-fleet-example-10"></a>

您可以透過將容量保留的使用策略設為 use-capacity-reservations-first (首先使用容量保留)，來將機群設定為在以預設目標容量類型作為 Spot 啟動隨需執行個體的基礎時，首先使用按需容量保留。因此，如果多個執行個體集區有未使用的容量保留，則會套用所選擇的隨需分配策略。在此範例中，隨需分配策略為優先順序。

在此範例中，有 6 個未使用的容量保留可供使用。這小於機群的目標隨需容量 10 個隨需執行個體。

帳戶在 2 個集區中有以下 6 個未使用的容量保留。每個集區中的容量保留數目由 AvailableInstanceCount 表示。

```
{
    "CapacityReservationId": "cr-111", 
    "InstanceType": "m5.large", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1a", 
    "AvailableInstanceCount": 3, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}
 
{
    "CapacityReservationId": "cr-222", 
    "InstanceType": "c5.large", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1a", 
    "AvailableInstanceCount": 3, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}
```

下列機群組態僅顯示此範例的相關組態。隨需分配策略是優先順序，而容量保留的使用策略是 use-capacity-reservations-first (首先使用容量保留)。Spot 分配策略是容量最佳化。目標總容量為 20、隨需目標容量為 10、預設目標容量類型為 spot。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized"
    },
    "OnDemandOptions":{
       "CapacityReservationOptions": {
         "UsageStrategy": "use-capacity-reservations-first"
       },
       "AllocationStrategy":"prioritized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 1.0
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 2.0
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 3.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 4.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 5.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 6.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 7.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 8.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 9.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 10.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 11.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 12.0
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "OnDemandTargetCapacity": 10,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

使用上述組態建立 instant 類型機群之後，會啟動以下 20 個執行個體以符合目標容量：
+ us-east-1a 中的 7 個 c5.large 隨需執行個體 – us-east-1a 中的 c5.large 是第一優先順序，並有 3 個未使用 c5.large容量保留可供使用。容量保留會先用來啟動 3 個隨需執行個體，再根據隨需分配策略啟動額外的 4 個隨需執行個體，即此範例中的優先順序。
+ us-east-1a 中的 3 個 m5.large 隨需執行個體 – us-east-1a 中的 m5.large 為第二優先，並有 3 個未使用的 m5.large 容量保留可用。
+ 來自 12 個 Spot 容量集區中的 10 個 Spot 執行個體，該集區根據容量最佳化的分配策略具有最佳容量。

啟動機群後，您可以執行 [describe-capacity-reservations](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html)，以查看還剩餘多少個未使用的容量保留。在此範例中，您應該會看到下列回應，其中顯示了已使用的所有 c5.large 和 m5.large 容量保留。

```
{
    "CapacityReservationId": "cr-111",
    "InstanceType": "m5.large",  
    "AvailableInstanceCount": 0
}
 
{
    "CapacityReservationId": "cr-222",
    "InstanceType": "c5.large", 
    "AvailableInstanceCount": 0
}
```

### 範例 11：使用容量最佳化的優先順序分配策略啟動 Spot 執行個體
<a name="instant-fleet-example-11"></a>

下列範例指定 instant 類型 EC2 機群中所需的參數：啟動範本、目標容量、預設購買選項，以及啟動範本覆寫。啟動範本由其啟動範本名稱和版本編號識別。覆寫啟動範本的 12 個啟動規格擁有已指派優先順序的 4 個不同執行個體類型和 3 個不同的子網路，每個都位於不同的可用區域。機群的目標容量是 20 個執行個體，預設購買選項為 Spot，這導致機群嘗試根據容量最佳化優先順序的分配策略，從 12 個 Spot 容量集區之一啟動 20 個 Spot 執行個體，該策略會竭盡全力實作優先順序，但會先針對容量最佳化。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized-prioritized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 1.0
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 1.0
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 1.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 2.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 2.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 2.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 3.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 3.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 3.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 4.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 4.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 4.0
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 範例 12：指定 Systems Manager 參數而非 AMI ID
<a name="instant-fleet-example-12"></a>

下列範例使用啟動範本來指定機群中執行個體的組態。在此範例中，針對 `ImageId`，要使用 System Manager 參數參考 AMI，而不是指定 AMI ID。啟動執行個體時，Systems Manager 參數會解析為 AMI ID。

在此範例中，Systems Manager 參數將以有效的格式指定：`resolve:ssm:golden-ami`。Systems Manager 參數還有其他有效的格式。如需詳細資訊，請參閱[使用 Systems Manager 參數而非 AMI ID](create-launch-template.md#use-an-ssm-parameter-instead-of-an-ami-id)。

**注意**  
機群類型必須為 `instant`。其他機群類型不支援指定 System Manager 參數替代 AMI ID。

```
{
    "LaunchTemplateData": {
        "ImageId": "resolve:ssm:golden-ami",
        "InstanceType": "m5.4xlarge",
        "TagSpecifications": [{
            "ResourceType": "instance",
            "Tags": [{
                "Key": "Name",
                "Value": "webserver"
            }]
        }]
    }
}
```

# 設定 EC2 機群或 Spot 機群的花費限制
<a name="ec2-fleet-control-spending"></a>

您可以設定限制，以指定您願意在 EC2 機群或 Spot 機群中的每小時花費。達到您的花費限制時，即使未達到目標容量，機群也會停止啟動執行個體。

隨需執行個體和 Spot 執行個體有不同的花費限制。

**在 EC2 機群中設定隨需執行個體和 Spot 執行個體的花費限制**  
使用 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 命令和下列參數：
+ 對於隨需執行個體：在 `OnDemandOptions` 結構中，在 `MaxTotalPrice` 欄位中指定您的花費限制。
+ 對於 Spot 執行個體：在 `SpotOptions` 結構中，在 `MaxTotalPrice` 欄位中指定您的花費限制。

**在 Spot 機群中設定隨需執行個體和 Spot 執行個體的花費限制**  
您可以使用 Amazon EC2 主控台或 AWS CLI 來設定您的花費限制。

(主控台) 建立 Spot 機群時，請選取**設定 Spot 執行個體成本上限**核取方塊，然後輸入**設定成本上限的值 (每小時)**。如需詳細資訊，請參閱 [使用已定義的參數建立 Spot 機群請求](create-spot-fleet.md#create-spot-fleet-advanced) 中的步驟 6.e.。

(AWS CLI) 使用 [request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html) 命令和下列參數：
+ 對於隨需執行個體：在 `OnDemandMaxTotalPrice` 欄位中指定您的花費限制。
+ 對於 Spot 執行個體：在 `SpotMaxTotalPrice` 欄位中指定您的花費限制。

## 範例
<a name="ec2-fleet-spending-limit-examples"></a>

以下範例顯示兩個不同的案例。在第一個範例中，機群在達到隨需執行個體 (`OnDemandTargetCapacity`) 的目標容量設定時，會停止啟動隨需執行個體。在第二個範例中，機群會在達到您願意支付的隨需執行個體每小時金額上限 (`MaxTotalPrice`) 時停止啟動隨需執行個體。

**範例：達到目標容量時停止啟動隨需執行個體**

假設有 `m4.large` 隨需執行個體 的請求，其中：
+ 隨需價格：每小時 0.10 USD
+ `OnDemandTargetCapacity`：10
+ `MaxTotalPrice`：1.50 USD

機群會啟動 10 個隨需執行個體，因為 1.00USD 的總計 (10 個執行個體 x 0.10USD) 未超出隨需執行個體 1.50USD 的 `MaxTotalPrice`。

**範例：達到總價格上限時停止啟動隨需執行個體**

假設有 `m4.large` 隨需執行個體 的請求，其中：
+ 隨需價格：每小時 0.10 USD
+ `OnDemandTargetCapacity`：10
+ `MaxTotalPrice`：0.80 USD

如果機群啟動了隨需目標容量 (10 個隨需執行個體)，每個小時的總成本會是 1.00USD。這超出為隨需執行個體指定的 `MaxTotalPrice` 的金額 (0.80 USD)。為了防止花費超出您願意支付的金額，機群只會啟動 8 個隨需執行個體 (低於隨需目標容量)，因為啟動更多會超出隨需執行個體的 `MaxTotalPrice`。

## 爆量效能執行個體
<a name="ec2-fleet-burstable-spot-instances"></a>

如果您使用[爆量效能執行個體](burstable-performance-instances.md)啟動 Spot 執行個體，而且您計劃立即使用爆量效能 Spot 執行個體，且在短時間內沒有閒置時間來累積 CPU 額度，建議您以[標準模式](burstable-performance-instances-standard-mode.md)將其啟用，以避免支付更高的成本。如果您在[無限制模式](burstable-performance-instances-unlimited-mode.md)下啟動高載效能 Spot 執行個體，而且 CPU 立即高載，則您將耗費高載的剩餘額度。如果您短暫使用執行個體，則您的執行個體沒有時間產生 CPU 額度來償還剩餘額度，而且當終止執行個體時，會針對剩餘額度向您收費。

只有在執行個體執行夠長時間，可為爆量產生 CPU 額度時，無限制模式才適合用於高載效能 Spot 執行個體。否則，支付剩餘額度會使爆量效能 Spot 執行個體比使用其他執行個體更為昂貴。如需詳細資訊，請參閱[使用無限制模式與固定 CPU 的時機](burstable-performance-instances-unlimited-mode-concepts.md#when-to-use-unlimited-mode)。

啟動額度旨在透過提供足夠的運算資源來設定執行個體，創造 T2 執行個體具有生產力的初始啟動體驗。不允許重複啟動 T2 執行個體來獲得新的啟動額度。如果您需要持續的 CPU，可以賺取額度 (藉由在某些期間閒置)、為 T2 Spot 執行個體使用[無限制模式](burstable-performance-instances-unlimited-mode.md)，或將執行個體類型與專屬 CPU 搭配使用。

# 指定屬性，為 EC2 機群或 Spot 機群選取執行個體類型
<a name="ec2-fleet-attribute-based-instance-type-selection"></a>

建立 EC2 機群或 Spot 機群時，您必須指定一或多個執行個體類型，以在機群中設定隨需執行個體和 Spot 執行個體。做為手動指定執行個體類型的替代方式，您可以指定執行個體必須具有的屬性，然後 Amazon EC2 會識別具有這些屬性的所有執行個體類型。這就是所謂的*屬性型執行個體類型選項*。例如，您可以指定執行個體所需的 vCPU 數目下限和上限，然後機群將使用符合這些 vCPU 需求的任何可用執行個體類型來啟動執行個體。

屬性型執行個體類型選擇非常適合可對其使用哪些執行個體類型具有彈性的工作負載和架構，例如執行容器或 Web 機群、處理大數據，以及實作持續整合和部署 (CI/CD) 工具時。

**優勢**

屬性型執行個體類型選擇具有下列優勢：
+ **輕鬆使用正確的執行個體類型**：由於有太多可用的執行個體類型，為您的工作負載尋找適當的執行個體類型可能會非常耗時。當您指定執行個體類型屬性時，執行個體類型會自動具有工作負載所需的屬性。
+ **簡化的組態**：若要針對機群手動指定多個執行個體類型，您必須為每個執行個體類型建立個別的啟動範本覆寫。但是，有了屬性型執行個體類型選擇，若要提供多個執行個體類型，您只需要在啟動範本或在啟動範本覆寫中指定執行個體屬性。
+ **自動使用新的執行個體類型**：當您指定執行個體屬性而非執行個體類型時，您的機群可以在新一代的執行個體類型釋出時使用它們，即「為未來提供」機群的組態。
+ **執行個體類型彈性**：當您指定執行個體屬性而非執行個體類型時，機群可以從用於啟動 Spot 執行個體的廣泛執行個體類型中進行選擇，而這些執行個體類型符合 [Spot 執行個體類型靈活性的最佳實務](spot-best-practices.md#be-instance-type-flexible)。

**Topics**
+ [屬性型執行個體類型選擇的運作方式](#ec2fleet-abs-how-it-works)
+ [價格保護](#ec2fleet-abs-price-protection)
+ [效能保護](#ec2fleet-abis-performance-protection)
+ [考量事項](#ec2fleet-abs-considerations)
+ [建立具有屬性型執行個體類型選擇的 EC2 機群](#abs-create-ec2-fleet)
+ [建立具有屬性型執行個體類型選擇的 Spot 機群](#abs-create-spot-fleet)
+ [有效和無效的 EC2 機群組態範例](#ec2fleet-abs-example-configs)
+ [有效和無效的 Spot 機群組態範例](#spotfleet-abs-example-configs)
+ [預覽具有所指定屬性的執行個體類型](#ec2fleet-get-instance-types-from-instance-requirements)

## 屬性型執行個體類型選擇的運作方式
<a name="ec2fleet-abs-how-it-works"></a>

若要在機群組態中使用屬性型執行個體類型選擇，請將執行個體類型清單取代為執行個體所需的執行個體屬性清單。EC2 機群或 Spot 機群將在具有所指定執行個體屬性的任何可用執行個體類型上啟動執行個體。

**Topics**
+ [執行個體屬性的類型](#ef-abs-instance-attribute-types)
+ [要在何處設定屬性型執行個體類型選擇](#ef-abs-where-to-configure)
+ [EC2 機群或 Spot 機群在佈建機群時如何使用屬性型執行個體類型選擇](#how-ef-uses-abs)

### 執行個體屬性的類型
<a name="ef-abs-instance-attribute-types"></a>

有數個您可以指定來表達運算需求的執行個體屬性，例如：
+ **vCPU 數量**：每個執行個體的 vCPU 數量下限和上限。
+ **記憶體**：每個執行個體的記憶體 GiB 下限和上限。
+ **本機儲存**：是否使用本機儲存的 EBS 或執行個體儲存體磁碟區。
+ **爆量效能**：是否使用 T 執行個體系列，包括 T4g、T3a、T3和 T2 類型。

如需每個屬性和預設值的描述，請參閱 *Amazon EC2 API 參考*中的 [InstanceRequirements](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_InstanceRequirements.html)。

### 要在何處設定屬性型執行個體類型選擇
<a name="ef-abs-where-to-configure"></a>

視您使用的是 主控台或 而定 AWS CLI，您可以指定屬性型執行個體類型選擇的執行個體屬性，如下所示：

在主控台中，您可以在下列機群組態元件中指定執行個體屬性：
+ 在啟動範本中，則參考機群請求中的啟動範本
+ (僅限 Spot 機群) 在機群請求中

在 中 AWS CLI，您可以在下列一或多個機群組態元件中指定執行個體屬性：
+ 在啟動範本中，則參考機群請求中的啟動範本
+ 在啟動範本覆寫中

  如果想要混合使用不同 AMI 的執行個體，您可以在多個啟動範本覆寫中指定執行個體屬性。例如，不同的執行個體類型可以使用 x86 和 ARM 型處理器。
+ (僅限 Spot 機群) 在啟動規格中

### EC2 機群或 Spot 機群在佈建機群時如何使用屬性型執行個體類型選擇
<a name="how-ef-uses-abs"></a>

EC2 機群或 Spot 機群以下列方式佈建機群：
+ EC2 機群可識別具有所指定屬性的執行個體類型。
+ EC2 機群會使用價格保護來決定要排除哪些執行個體類型。
+ 它會根據具有相符執行個體類型的 AWS 區域或可用區域，決定要考慮從中啟動執行個體的容量集區。
+ EC2 機群會套用指定的分配策略，以決定要從哪些容量集區中啟動執行個體。

  請注意，屬性型執行個體類型選擇不會挑選要從中佈建機群的容量集區；這是[分配策略](ec2-fleet-allocation-strategy.md)的任務。

  如果您指定分配策略，機群將根據指定的分配策略啟動執行個體。
  + 對於 Spot 執行個體，屬性型執行個體類型選擇支援**價格容量最佳化**、**容量最佳化**和**最低價格**分配策略。請注意，我們不建議**最低價格**的 Spot 配置策略，因為該策略具有最高的 Spot 執行個體中斷風險。
  + 若為隨需執行個體，屬性型執行個體類型選擇支援**最低價格**分配策略。
+ 如果具有所指定執行個體屬性的執行個體類型沒有容量，則無法啟動任何執行個體，而且機群會傳回錯誤。

## 價格保護
<a name="ec2fleet-abs-price-protection"></a>

價格保護是一項功能，可防止 EC2 機群或 Spot 機群使用您認為過於昂貴的執行個體類型，即使它們剛好符合您指定的屬性也一樣。若要使用價格保護，您必須設定價格閾值。隨後，當 Amazon EC2 選取具有您屬性的執行個體類型時，其會排除定價高於閾值的執行個體類型。

Amazon EC2 計算價格閾值的方式如下：
+ Amazon EC2 會先從符合您屬性的執行個體類型中，識別價格最低的執行個體類型。
+ 然後，Amazon EC2 會取得您為價格保護參數指定的值 (以百分比表示)，並將其乘以已識別執行個體類型的價格。結果即為價格閾值的價格。

隨需執行個體和 Spot 執行個體有不同的價格閾值。

當您使用屬性型執行個體類型選擇建立機群時，價格保護將預設啟用。您可以保留預設值，也可以指定自己的值。

您也可以關閉價格保護。若要表示沒有價格保護閾值，請指定高百分比值，例如 `999999`。

**Topics**
+ [如何識別價格最低的執行個體類型](#ec2fleet-abs-price-protection-lowest-priced)
+ [隨需執行個體價格保護](#ec2fleet-abs-on-demand-price-protection)
+ [Spot 執行個體價格保護](#ec2fleet-abs-spot-price-protection)
+ [指定價格保護閾值](#ec2fleet-abs-specify-price-protection)

### 如何識別價格最低的執行個體類型
<a name="ec2fleet-abs-price-protection-lowest-priced"></a>

Amazon EC2 會從符合您指定屬性的執行個體中，找出價格最低的執行個體類型，從而決定價格門檻所依據的價格。Amazon EC2 會透過下列方式執行此操作：
+ 首先，查看符合您屬性的目前世代 C、M 或 R 執行個體類型。如果找到任何相符項目，則會識別價格最低的執行個體類型。
+ 如果沒有相符項目，則會查看任何符合您屬性的目前世代執行個體類型。如果找到任何相符項目，則會識別價格最低的執行個體類型。
+ 如果沒有相符項目，則會查看任何符合您屬性的上一代執行個體類型，並識別價格最低的執行個體類型。

### 隨需執行個體價格保護
<a name="ec2fleet-abs-on-demand-price-protection"></a>

隨需執行個體類型的價格保護閾值的計算方式，是*高於已識別最低價格*隨需執行個體類型 (`OnDemandMaxPricePercentageOverLowestPrice`) 的百分比。您可以指定您願意支付的百分比。如果您未指定此參數，則會使用 `20` 的預設值來計算比已識別價格高 20% 的價格保護閾值。

例如，如果識別的隨需執行個體價格為 `0.4271`，而您指定 `25`，則價格閾值比 `0.4271` 多 25%。計算方式如下：`0.4271 * 1.25 = 0.533875`。計算的價格是您願意為隨需執行個體支付的最高金額，在此範例中，Amazon EC2 會排除任何超過 `0.533875` 的隨需執行個體類型。

### Spot 執行個體價格保護
<a name="ec2fleet-abs-spot-price-protection"></a>

根據預設，Amazon EC2 會自動套用最佳 Spot 執行個體價格保護，以一致方式從各種執行個體類型中選擇。您也可以自行手動設定價格保護。不過，若您讓 Amazon EC2 為您執行此操作，則可以提高 Spot 容量被滿足的可能性。

您可以使用下列其中一個選項手動指定價格保護。如果您手動設定價格保護，我們建議您使用第一個選項。
+ **已識別價格最低的*隨需*執行個體類型*百分比*** [`MaxSpotPriceAsPercentageOfOptimalOnDemandPrice`]

  例如，如果識別的隨需執行個體類型價格為 `0.4271`，而您指定 `60`，則價格閾為 `0.4271` 的 60%。計算方式如下：`0.4271 * 0.60 = 0.25626`。計算的價格是您願意為 Spot 執行個體支付的最高金額，在此範例中，Amazon EC2 會排除任何超過 `0.25626` 的 Spot 執行個體類型。
+ **高於已識別價格最低的 *Spot* 執行個體類型*百分比*** [`SpotMaxPricePercentageOverLowestPrice`]

  例如，如果識別的 Spot 執行個體類型價格為 `0.1808`，而您指定 `25`，則價格閾值比 `0.1808` 多 25%。計算方式如下：`0.1808 * 1.25 = 0.226`。計算的價格是您願意為 Spot 執行個體支付的最高金額，在此範例中，Amazon EC2 會排除任何超過 `0.266` 的 Spot 執行個體類型。我們不建議使用此參數，因為 Spot 價格可能會波動，因此您的價格保護閾值也可能會波動。

### 指定價格保護閾值
<a name="ec2fleet-abs-specify-price-protection"></a>

**使用 指定價格保護閾值 AWS CLI**

使用 建立 EC2 機群或 Spot 機群時 AWS CLI，請針對屬性型執行個體類型選取設定機群，然後執行下列動作：
+ 如要指定隨需執行個體價格保護閾值，請於 JSON 組態檔案的 `InstanceRequirements` 結構中，對於 `OnDemandMaxPricePercentageOverLowestPrice`，以百分比形式輸入價格保護閾值。
+ 若要指定 Spot 執行個體價格保護閾值，請在 JSON 組態檔案中的 `InstanceRequirements` 結構中，指定下列其中*一個*參數：
  + 若為 `MaxSpotPriceAsPercentageOfOptimalOnDemandPrice`，請以百分比形式輸入價格保護閾值。
  + 若為 `SpotMaxPricePercentageOverLowestPrice`，請以百分比形式輸入價格保護閾值。

如需詳細資訊，請參閱 [建立具有屬性型執行個體類型選擇的 EC2 機群](#abs-create-ec2-fleet) 或 [建立具有屬性型執行個體類型選擇的 Spot 機群](#abs-create-spot-fleet) 。

**(僅限 Spot機群) 使用主控台指定價格保護閾值**

使用主控台建立 Spot 機群時，為屬性型執行個體類型選擇設定機群，然後執行下列作業：
+ 如要指定隨需執行個體價格保護閾值，請在**其他執行個體屬性**下，選擇**隨需價格保護**，然後選擇**新增屬性**，然後輸入價格保護閾值 (百分比)。
+ 如要指定 Spot 執行個體價格保護閾值，請在**其他執行個體屬性**，選擇 **Spot 價格保護**，然後選擇**新增屬性**，選擇一個基本值，以作為您的價格依據，然後輸入價格保護閾值 (百分比)。

**注意**  
建立機群時，若您將 `TargetCapacityUnitType` 設定為 `vcpu` 或 `memory-mib`，則價格保護閾值會根據每個 vCPU 或每個記憶體的價格進行套用，而非每個執行個體的價格。

## 效能保護
<a name="ec2fleet-abis-performance-protection"></a>

*效能保護*功能可確保 EC2 機群或 Spot 機群使用類似或超過指定效能基準的執行個體類型。若要使用效能保護，您可以將執行個體系列指定為基準參考。指定執行個體系列的功能會建立最低可接受效能層級。當 Amazon EC2 為您的機群選取執行個體類型時，會考慮您指定的屬性和效能基準。低於效能基準的執行個體類型，將自動排除在選取範圍之外，即使這些類型符合您的其他指定屬性。這可確保所有選取的執行個體類型所提供的效能，與指定執行個體系列所建立的基準類似或更好。Amazon EC2 將使用此基準來引導執行個體類型選擇，但選取的執行個體類型不一定會超過每個應用程式的基準。

目前，此功能僅支援以 CPU 效能作為基準效能因素。指定執行個體系列的 CPU 處理器的 CPU 效能，可以做為效能基準，確保選取的執行個體類型類似於或超過此基準。具有相同 CPU 處理器的執行個體系列會產生相同的篩選結果，即使其網路或磁碟效能不同。例如，指定 `c6in` 或 `c6i` 作為基準參考，會產生相同的效能型篩選結果，因為兩個執行個體系列都使用相同的 CPU 處理器。

**不支援的執行個體系列**  
效能保護**不支援**下列執行個體系列：
+ **一般用途：**Mac1 \$1 Mac2 \$1 Mac2-m1ultra \$1 Mac2-m2 \$1 Mac2-m2pro \$1 M1 \$1 M2 \$1 T1
+ **運算最佳化：**C1
+ **記憶體最佳化：**U-3tb1 \$1 U-6tb1 \$1 U-9tb1 \$1 U-12tb1 \$1 U-18tb1 \$1 u-24tb1 \$1 U7i-12tb \$1 U7in-16tb \$1 U7in-24tb \$1 U7in-32tb
+ **加速運算：**G3 \$1 G3s \$1 P3dn \$1 P4d \$1 P5
+ **高效能運算：**Hpc7g

如果您透過指定支援的執行個體系列來啟用效能保護，則傳回的執行個體類型將排除上述不支援的執行個體系列。

如果您將不支援的執行個體系列指定為基準效能值，API 會傳回 [GetInstanceTypesFromInstanceRequirements](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html) 的空白回應，並傳回 [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html)、[RequestSpotFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet.html)、[ModifyFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyFleet.html) 和 [ModifySpotFleetRequest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifySpotFleetRequest.html) 的例外狀況。

**範例：設定 CPU 效能基準**  
在下面的示例中，執行個體需求是使用執行個體類型啟動，該執行個體類型有與 `c6i` 執行個體系列相同的 CPU 核心性能。這將篩選效能較低的 CPU 處理器的執行個體類型，即使它們符合您的其他指定執行個體需求，例如 vCPU 數量。例如，如果您指定的執行個體屬性包含 4 個 vCPU 和 16GB 的記憶體，則具有這些屬性但 CPU 效能低於 `c6i` 的執行個體類型將被排除在選擇之外。

```
"BaselinePerformanceFactors": {
        "Cpu": {
            "References": [
                {
                    "InstanceFamily": "c6i"
                }
            ]
        }
```

## 考量事項
<a name="ec2fleet-abs-considerations"></a>
+ 您可以在 EC2 機群或 Spot 機群中指定執行個體類型或執行個體屬性，但不能同時指定兩者。

  使用 CLI 時，啟動範本覆寫將覆寫啟動範本。例如，如果啟動範本包含執行個體類型，且啟動範本覆寫包含執行個體屬性，則執行個體屬性所識別的執行個體將覆寫啟動範本中的執行個體類型。
+ 使用 CLI 時，若將執行個體屬性指定為覆寫，您也無法指定權重或優先順序。
+ 您最多可以在請求組態中指定四個 `InstanceRequirements` 結構。

## 建立具有屬性型執行個體類型選擇的 EC2 機群
<a name="abs-create-ec2-fleet"></a>

您可將 EC2 機群設定為使用屬性型執行個體類型選擇。無法使用 Amazon EC2 主控台建立 EC2 機群。

屬性型執行個體類型選取的屬性在 `InstanceRequirements` 結構中予以指定。當 `InstanceRequirements` 併入機群組態中時，必須排除 `InstanceType` 和 `WeightedCapacity`；其無法與執行個體屬性同時決定機群組態。

在 AWS CLI 和 PowerShell 範例中，會指定下列屬性：
+ `VCpuCount` – 最少 2 個 vCPU，最多 4 個 vCPU。若無需設定上限，可省略最大值。
+ `MemoryMiB` – 最小 8 GiB 的記憶體，最大 16 GiB。若無需設定上限，可省略最大值。

此組態可識別所有具備 2 至 4 個 vCPU 與 8 至 16 GiB 記憶體的執行個體類型。但是，當 [EC2 機群佈建機群](#how-ef-uses-abs)時，價格保護和分配策略可能會排除某些執行個體類型。

------
#### [ AWS CLI ]

**若要建立具有屬性型執行個體類型選取的 EC2 機群**  
使用 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 命令建立 EC2 機群。指定 JSON 檔案中的機群組態。

```
aws ec2 create-fleet \
    --region us-east-1 \
    --cli-input-json file://file_name.json
```

下列範例 `file_name.json` 檔案包含將 EC2 機群設定為使用屬性型執行個體類型選取的參數。

```
{
    "SpotOptions": {
        "AllocationStrategy": "price-capacity-optimized"
    },
    "LaunchTemplateConfigs": [{
        "LaunchTemplateSpecification": {
            "LaunchTemplateName": "my-launch-template",
            "Version": "1"
        },
        "Overrides": [{
            "InstanceRequirements": {
                "VCpuCount": {
                    "Min": 2,
                    "Max": 4
                },
                "MemoryMiB": {
                    "Min": 8192,
                    "Max": 16384
                }
            }
        }]
    }],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

------
#### [ PowerShell ]

**若要建立具有屬性型執行個體類型選取的 EC2 機群**  
使用 [New-EC2Fleet](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Fleet.html) cmdlet。

```
$vcpuCount = New-Object Amazon.EC2.Model.VCpuCountRangeRequest
$vcpuCount.Min = 2 
$vcpuCount.Max = 4  
$memoryMiB = New-Object Amazon.EC2.Model.MemoryMiBRequest
$memoryMiB.Min = 8192  
$memoryMiB.Max = 16384  
$instanceRequirements = New-Object Amazon.EC2.Model.InstanceRequirementsRequest
$instanceRequirements.VCpuCount = $vcpuCount
$instanceRequirements.MemoryMiB = $memoryMiB

$launchTemplateSpec = New-Object Amazon.EC2.Model.FleetLaunchTemplateSpecificationRequest
$launchTemplateSpec.LaunchTemplateName = "my-launch-template" 
$launchTemplateSpec.Version = "1"
$override = New-Object Amazon.EC2.Model.FleetLaunchTemplateOverridesRequest
$override.InstanceRequirements = $instanceRequirements
$launchTemplateConfig = New-Object Amazon.EC2.Model.FleetLaunchTemplateConfigRequest
$launchTemplateConfig.LaunchTemplateSpecification = $launchTemplateSpec
$launchTemplateConfig.Overrides = @($override)

New-EC2Fleet `
    -SpotOptions_AllocationStrategy "price-capacity-optimized" `
    -LaunchTemplateConfig @($launchTemplateConfig) `
    -TargetCapacitySpecification_DefaultTargetCapacityType "spot" `
    -TargetCapacitySpecification_TotalTargetCapacity 20 `
    -Type "instant"
```

------

## 建立具有屬性型執行個體類型選擇的 Spot 機群
<a name="abs-create-spot-fleet"></a>

您可以將機群設定為使用屬性型執行個體類型選擇。

屬性型執行個體類型選取的屬性在 `InstanceRequirements` 結構中予以指定。當 `InstanceRequirements` 併入機群組態中時，必須排除 `InstanceType` 和 `WeightedCapacity`；其無法與執行個體屬性同時決定機群組態。

在 AWS CLI 和 PowerShell 範例中，會指定下列屬性：
+ `VCpuCount` – 最少 2 個 vCPU，最多 4 個 vCPU。若無需設定上限，可省略最大值。
+ `MemoryMiB` – 最小 8 GiB 的記憶體，最大 16 GiB。若無需設定上限，可省略最大值。

此組態可識別所有具備 2 至 4 個 vCPU 與 8 至 16 GiB 記憶體的執行個體類型。但是，當 [Spot 機群佈建機群](#how-ef-uses-abs)時，價格保護和分配策略可能會排除某些執行個體類型。

------
#### [ Console ]

**若要為屬性型執行個體類型選取設定 Spot 機群**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Spot Requests** (Spot 請求)，然後選擇 **Request Spot Instances** (請求 Spot 執行個體)。

1. 遵循步驟來建立 Spot 機群。如需詳細資訊，請參閱 [使用已定義的參數建立 Spot 機群請求](create-spot-fleet.md#create-spot-fleet-advanced)。

   在建立 Spot 機群時，為屬性型執行個體類型選擇設定機群，如下所示：

   1. 對於 **Instance type requirements** (執行個體類型請求)，選擇 **Specify instance attributes that match your compute requirements** (指定符合運算需求的執行個體屬性)。

   1. 對於 **vCPUs**，輸入所需的 vCPU 數量下限和上限。若要指定無限制，請選取 **No minimum** (無下限)、**No maximum** (無上限)，或兩者。

   1. 對於 **Memory (GiB)** (記憶體 (GiB))，輸入所需記憶體數量的下限和上限。若要指定無限制，請選取 **No minimum** (無下限)、**No maximum** (無上限)，或兩者。

   1. (選用) 對於 **Additional instance attributes** (其他執行個體屬性)，您可以選擇性地指定一或多個屬性，以更詳細地表達您的運算需求。每個額外屬性都會將進一步的限制新增至您的請求。

   1. (選用) 展開 **Preview matching instance types** (預覽相符的執行個體類型)，以檢視具有所指定屬性的執行個體類型。

------
#### [ AWS CLI ]

**若要為屬性型執行個體類型選取設定 Spot 機群**  
使用 [request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html) 命令建立 Spot 機群。指定 JSON 檔案中的機群組態。

```
aws ec2 request-spot-fleet \
    --region us-east-1 \
    --spot-fleet-request-config file://file_name.json
```

下列範例 `file_name.json` 檔案包含將 Spot 機群設定為使用屬性型執行個體類型選取的參數。

```
{
    "AllocationStrategy": "priceCapacityOptimized",
    "TargetCapacity": 20,
    "Type": "request",
    "LaunchTemplateConfigs": [{
        "LaunchTemplateSpecification": {
            "LaunchTemplateName": "my-launch-template",
            "Version": "1"
        },
        "Overrides": [{
            "InstanceRequirements": {
                "VCpuCount": {
                    "Min": 2,
                    "Max": 4
                },
                "MemoryMiB": {
                    "Min": 8192,
                    "Max": 16384
                }
            }
        }]
    }]
}
```

------
#### [ PowerShell ]

**若要為屬性型執行個體類型選取設定 Spot 機群**  
使用 [Request-EC2SpotFleet](https://docs.aws.amazon.com/powershell/latest/reference/items/Request-EC2SpotFleet.html) cmdlet。

```
$vcpuCount = New-Object Amazon.EC2.Model.VCpuCountRange
$vcpuCount.Min = 2 
$vcpuCount.Max = 4  
$memoryMiB = New-Object Amazon.EC2.Model.MemoryMiB
$memoryMiB.Min = 8192  
$memoryMiB.Max = 16384  
$instanceRequirements = New-Object Amazon.EC2.Model.InstanceRequirements
$instanceRequirements.VCpuCount = $vcpuCount
$instanceRequirements.MemoryMiB = $memoryMiB

$launchTemplateSpec = New-Object Amazon.EC2.Model.FleetLaunchTemplateSpecification
$launchTemplateSpec.LaunchTemplateName = "my-launch-template" 
$launchTemplateSpec.Version = "1"
$override = New-Object Amazon.EC2.Model.LaunchTemplateOverrides
$override.InstanceRequirements = $instanceRequirements
$launchTemplateConfig = New-Object Amazon.EC2.Model.LaunchTemplateConfig
$launchTemplateConfig.LaunchTemplateSpecification = $launchTemplateSpec
$launchTemplateConfig.Overrides = @($override)

Request-EC2SpotFleet `
    -SpotFleetRequestConfig_AllocationStrategy "PriceCapacityOptimized" `
    -SpotFleetRequestConfig_TargetCapacity 20 `
    -SpotFleetRequestConfig_Type "Request" `
    -SpotFleetRequestConfig_LaunchTemplateConfig $launchTemplateConfig
```

------

## 有效和無效的 EC2 機群組態範例
<a name="ec2fleet-abs-example-configs"></a>

如果您使用 AWS CLI 建立 EC2 機群，則必須確保您的機群組態有效。下列範例顯示有效和無效的組態。

當組態包含下列項目時，視為無效：
+ 同時具有 `Overrides` 和 `InstanceRequirements` 的單一 `InstanceType`
+ 兩個 `Overrides` 結構, 一個具有 `InstanceRequirements`，而另一個具有 `InstanceType`
+ 兩個在同一 `InstanceRequirements` 內具有重疊屬性值的 `LaunchTemplateSpecification` 結構

**Topics**
+ [有效組態：具有覆寫的單一啟動範本](#ef-abs-example-config1)
+ [有效組態：具有多個 InstanceRequirements 的單一啟動範本](#ef-abs-example-config2)
+ [有效組態：兩個啟動範本，每個都具有覆寫](#ef-abs-example-config3)
+ [有效組態：僅限指定的 `InstanceRequirements`，沒有重疊的屬性值](#ef-abs-example-config4)
+ [組態無效：`Overrides` 包含 `InstanceRequirements` 和 `InstanceType`](#ef-abs-example-config5)
+ [組態無效：兩個 `Overrides` 包含 `InstanceRequirements` 和 `InstanceType`](#ef-abs-example-config6)
+ [組態無效：重疊屬性值](#ef-abs-example-config7)

### 有效組態：具有覆寫的單一啟動範本
<a name="ef-abs-example-config1"></a>

下列組態有效。其包含一個啟動範本和一個 `Overrides` 結構 (其中包含一個 `InstanceRequirements` 結構)。範例組態的文字說明如下。

```
{
        "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "My-launch-template",
                "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 2,
                            "Max": 8
                        },
                        "MemoryMib": {
                            "Min": 0,
                            "Max": 10240
                        },
                        "MemoryGiBPerVCpu": {
                            "Max": 10000
                        },
                        "RequireHibernateSupport": true
                    }
                }
            ]
        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 5000,
        "DefaultTargetCapacityType": "spot",
        "TargetCapacityUnitType": "vcpu"
        }
    }
}
```

****`InstanceRequirements`****  
若要使用屬性型執行個體選擇，您必須在組態中包含 `InstanceRequirements` 結構，並為機群中的執行個體指定所需的屬性。

在上述範例中，指定了下列執行個體屬性：
+ `VCpuCount` – 執行個體類型必須具有最少 2 個，最多 8 個的 vCPU。
+ `MemoryMiB` – 執行個體類型必須具有最多 10240 MiB 的記憶體。最小值若為 0，表示沒有最小限制。
+ `MemoryGiBPerVCpu` – 執行個體類型必須具有每個 vCPU 最多 10,000 MiB 的記憶體。`Min` 為選用參數。若省略它，表示沒有最小限制。

**`TargetCapacityUnitType`**  
`TargetCapacityUnitType` 參數會指定目標容量的單位。在範例中，目標容量為 `5000`，而目標容量單位類型為 `vcpu`，它們一起指定了所需的目標容量，即 5,000 個 vCPU。EC2 機群將啟動足夠的執行個體，以便機群中的 vCPU 總數為 5,000 個 vCPU。

### 有效組態：具有多個 InstanceRequirements 的單一啟動範本
<a name="ef-abs-example-config2"></a>

下列組態有效。其包含一個啟動範本和一個 `Overrides` 結構 (其中包含兩個 `InstanceRequirements` 結構)。`InstanceRequirements` 中指定的屬性是有效的，因為這些值不重疊—第一個 `InstanceRequirements` 結構會指定 0-2 個 vCPU 的`VCpuCount`，而第二個 `InstanceRequirements` 結構則會指定 4-8 個 vCPU。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 4,
                            "Max": 8
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 有效組態：兩個啟動範本，每個都具有覆寫
<a name="ef-abs-example-config3"></a>

下列組態有效。其包含兩個啟動範本，每個都具有一個 `Overrides` 結構 (其中包含一個 `InstanceRequirements` 結構)。這個組態有助於同一個機群中的 `arm` 和 `x86` 架構支援。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "armLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "x86LaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
         "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 有效組態：僅限指定的 `InstanceRequirements`，沒有重疊的屬性值
<a name="ef-abs-example-config4"></a>

下列組態有效。其包含兩個 `LaunchTemplateSpecification` 結構，每個都有一個啟動範本和一個 `Overrides` 結構 (其中包含一個 `InstanceRequirements` 結構)。`InstanceRequirements` 中指定的屬性是有效的，因為這些值不重疊—第一個 `InstanceRequirements` 結構會指定 0-2 個 vCPU 的`VCpuCount`，而第二個 `InstanceRequirements` 結構則會指定 4-8 個 vCPU。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            },
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyOtherLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 4,
                            "Max": 8
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 組態無效：`Overrides` 包含 `InstanceRequirements` 和 `InstanceType`
<a name="ef-abs-example-config5"></a>

下列組態無效。`Overrides` 結構同時包含 `InstanceRequirements` 和 `InstanceType`。針對 `Overrides`，您可以指定 `InstanceRequirements` 或 `InstanceType`，但不能同時指定兩者。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                    "InstanceType": "m5.large"
                }
              ]
            }
        ],
        "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 組態無效：兩個 `Overrides` 包含 `InstanceRequirements` 和 `InstanceType`
<a name="ef-abs-example-config6"></a>

下列組態無效。`Overrides` 結構同時包含 `InstanceRequirements` 和 `InstanceType`。您可以指定 `InstanceRequirements` 或 `InstanceType`，但不能同時指定兩者，即使它們處於不同的 `Overrides` 結構也一樣。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            },
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyOtherLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceType": "m5.large"
                }
              ]
            }
        ],
         "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 組態無效：重疊屬性值
<a name="ef-abs-example-config7"></a>

下列組態無效。兩個 `InstanceRequirements` 結構每個都包含 `"VCpuCount": {"Min": 0, "Max": 2}`。這些屬性的值重疊，這會導致容量集區重複。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    },
                    {
                      "InstanceRequirements": {
                          "VCpuCount": {
                              "Min": 0,
                              "Max": 2
                          },
                          "MemoryMiB": {
                              "Min": 0
                          }
                      }
                  }
                }
              ]
            }
        ],
         "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

## 有效和無效的 Spot 機群組態範例
<a name="spotfleet-abs-example-configs"></a>

如果您使用 AWS CLI 建立 Spot 機群，則必須確保您的機群組態有效。下列範例顯示有效和無效的組態。

當組態包含下列項目時，視為無效：
+ 同時具有 `Overrides` 和 `InstanceRequirements` 的單一 `InstanceType`
+ 兩個 `Overrides` 結構, 一個具有 `InstanceRequirements`，而另一個具有 `InstanceType`
+ 兩個在同一 `InstanceRequirements` 內具有重疊屬性值的 `LaunchTemplateSpecification` 結構

**Topics**
+ [有效組態：具有覆寫的單一啟動範本](#sf-abs-example-config1)
+ [有效組態：具有多個 InstanceRequirements 的單一啟動範本](#sf-abs-example-config2)
+ [有效組態：兩個啟動範本，每個都具有覆寫](#sf-abs-example-config3)
+ [有效組態：僅限指定的 `InstanceRequirements`，沒有重疊的屬性值](#sf-abs-example-config4)
+ [組態無效：`Overrides` 包含 `InstanceRequirements` 和 `InstanceType`](#sf-abs-example-config5)
+ [組態無效：兩個 `Overrides` 包含 `InstanceRequirements` 和 `InstanceType`](#sf-abs-example-config6)
+ [組態無效：重疊屬性值](#sf-abs-example-config7)

### 有效組態：具有覆寫的單一啟動範本
<a name="sf-abs-example-config1"></a>

下列組態有效。其包含一個啟動範本和一個 `Overrides` 結構 (其中包含一個 `InstanceRequirements` 結構)。範例組態的文字說明如下。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "My-launch-template",
                "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 2,
                            "Max": 8
                        },
                        "MemoryMib": {
                            "Min": 0,
                            "Max": 10240
                        },
                        "MemoryGiBPerVCpu": {
                            "Max": 10000
                        },
                        "RequireHibernateSupport": true
                    }
                }
            ]
        }
    ],
        "TargetCapacity": 5000,
            "OnDemandTargetCapacity": 0,
            "TargetCapacityUnitType": "vcpu"
    }
}
```

****`InstanceRequirements`****  
若要使用屬性型執行個體選擇，您必須在組態中包含 `InstanceRequirements` 結構，並為機群中的執行個體指定所需的屬性。

在上述範例中，指定了下列執行個體屬性：
+ `VCpuCount` – 執行個體類型必須具有最少 2 個，最多 8 個的 vCPU。
+ `MemoryMiB` – 執行個體類型必須具有最多 10240 MiB 的記憶體。最小值若為 0，表示沒有最小限制。
+ `MemoryGiBPerVCpu` – 執行個體類型必須具有每個 vCPU 最多 10,000 MiB 的記憶體。`Min` 為選用參數。若省略它，表示沒有最小限制。

**`TargetCapacityUnitType`**  
`TargetCapacityUnitType` 參數會指定目標容量的單位。在範例中，目標容量為 `5000`，而目標容量單位類型為 `vcpu`，它們一起指定了所需的目標容量，即 5,000 個 vCPU。Spot 機群將啟動足夠的執行個體，以便機群中的 vCPU 總數為 5,000 個 vCPU。

### 有效組態：具有多個 InstanceRequirements 的單一啟動範本
<a name="sf-abs-example-config2"></a>

下列組態有效。其包含一個啟動範本和一個 `Overrides` 結構 (其中包含兩個 `InstanceRequirements` 結構)。`InstanceRequirements` 中指定的屬性是有效的，因為這些值不重疊—第一個 `InstanceRequirements` 結構會指定 0-2 個 vCPU 的`VCpuCount`，而第二個 `InstanceRequirements` 結構則會指定 4-8 個 vCPU。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 4,
                            "Max": 8
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 有效組態：兩個啟動範本，每個都具有覆寫
<a name="sf-abs-example-config3"></a>

下列組態有效。其包含兩個啟動範本，每個都具有一個 `Overrides` 結構 (其中包含一個 `InstanceRequirements` 結構)。這個組態有助於同一個機群中的 `arm` 和 `x86` 架構支援。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "armLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "x86LaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 有效組態：僅限指定的 `InstanceRequirements`，沒有重疊的屬性值
<a name="sf-abs-example-config4"></a>

下列組態有效。其包含兩個 `LaunchTemplateSpecification` 結構，每個都有一個啟動範本和一個 `Overrides` 結構 (其中包含一個 `InstanceRequirements` 結構)。`InstanceRequirements` 中指定的屬性是有效的，因為這些值不重疊—第一個 `InstanceRequirements` 結構會指定 0-2 個 vCPU 的`VCpuCount`，而第二個 `InstanceRequirements` 結構則會指定 4-8 個 vCPU。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            },
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyOtherLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 4,
                            "Max": 8
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 組態無效：`Overrides` 包含 `InstanceRequirements` 和 `InstanceType`
<a name="sf-abs-example-config5"></a>

下列組態無效。`Overrides` 結構同時包含 `InstanceRequirements` 和 `InstanceType`。針對 `Overrides`，您可以指定 `InstanceRequirements` 或 `InstanceType`，但不能同時指定兩者。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                    "InstanceType": "m5.large"
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 組態無效：兩個 `Overrides` 包含 `InstanceRequirements` 和 `InstanceType`
<a name="sf-abs-example-config6"></a>

下列組態無效。`Overrides` 結構同時包含 `InstanceRequirements` 和 `InstanceType`。您可以指定 `InstanceRequirements` 或 `InstanceType`，但不能同時指定兩者，即使它們處於不同的 `Overrides` 結構也一樣。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            },
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyOtherLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceType": "m5.large"
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 組態無效：重疊屬性值
<a name="sf-abs-example-config7"></a>

下列組態無效。兩個 `InstanceRequirements` 結構每個都包含 `"VCpuCount": {"Min": 0, "Max": 2}`。這些屬性的值重疊，這會導致容量集區重複。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    },
                    {
                      "InstanceRequirements": {
                          "VCpuCount": {
                              "Min": 0,
                              "Max": 2
                          },
                          "MemoryMiB": {
                              "Min": 0
                          }
                      }
                  }
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

## 預覽具有所指定屬性的執行個體類型
<a name="ec2fleet-get-instance-types-from-instance-requirements"></a>

您可以使用 [get-instance-types-from-instance-requirements](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-types-from-instance-requirements.html) 命令，來預覽符合您指定之屬性的執行個體類型。這特別有助於解決在不啟動任何執行個體的情況下要在請求組態中指定哪些屬性。請注意，該命令不會考慮可用容量。

**使用 指定屬性來預覽執行個體類型的清單 AWS CLI**

1. (選用) 若要產生可指定的所有可能屬性，請使用 [get-instance-types-from-instance-requirements](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-types-from-instance-requirements.html) 命令和 `--generate-cli-skeleton` 參數。您可以選擇性地將輸出導向至檔案來儲存它，方法是使用 `input > attributes.json`。

   ```
   aws ec2 get-instance-types-from-instance-requirements \
       --region us-east-1 \
       --generate-cli-skeleton input > attributes.json
   ```

   預期的輸出結果

   ```
   {
       "DryRun": true,
       "ArchitectureTypes": [
           "i386"
       ],
       "VirtualizationTypes": [
           "hvm"
       ],
       "InstanceRequirements": {
           "VCpuCount": {
               "Min": 0,
               "Max": 0
           },
           "MemoryMiB": {
               "Min": 0,
               "Max": 0
           },
           "CpuManufacturers": [
               "intel"
           ],
           "MemoryGiBPerVCpu": {
               "Min": 0.0,
               "Max": 0.0
           },
           "ExcludedInstanceTypes": [
               ""
           ],
           "InstanceGenerations": [
               "current"
           ],
           "SpotMaxPricePercentageOverLowestPrice": 0,
           "OnDemandMaxPricePercentageOverLowestPrice": 0,
           "BareMetal": "included",
           "BurstablePerformance": "included",
           "RequireHibernateSupport": true,
           "NetworkInterfaceCount": {
               "Min": 0,
               "Max": 0
           },
           "LocalStorage": "included",
           "LocalStorageTypes": [
               "hdd"
           ],
           "TotalLocalStorageGB": {
               "Min": 0.0,
               "Max": 0.0
           },
           "BaselineEbsBandwidthMbps": {
               "Min": 0,
               "Max": 0
           },
           "AcceleratorTypes": [
               "gpu"
           ],
           "AcceleratorCount": {
               "Min": 0,
               "Max": 0
           },
           "AcceleratorManufacturers": [
               "nvidia"
           ],
           "AcceleratorNames": [
               "a100"
           ],
           "AcceleratorTotalMemoryMiB": {
               "Min": 0,
               "Max": 0
           },
           "NetworkBandwidthGbps": {
               "Min": 0.0,
               "Max": 0.0
           },
           "AllowedInstanceTypes": [
               ""
           ]
       },
       "MaxResults": 0,
       "NextToken": ""
   }
   ```

1. 使用上一個步驟的輸出來建立 JSON 組態檔，並將其設定如下：
**注意**  
您必須提供 `ArchitectureTypes`、`VirtualizationTypes`、`VCpuCount` 和 `MemoryMiB` 的值。您可以省略其他屬性；省略時，就會使用預設值。  
如需每個屬性及其預設值的說明，請參閱 [get-instance-types-from-instance-requirements](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-types-from-instance-requirements.html)。

   1. 針對 `ArchitectureTypes`，指定一或多種類型的處理器架構。

   1. 針對 `VirtualizationTypes`，指定一或多種類型的虛擬化。

   1. 針對 `VCpuCount`，指定 vCPU 數目下限和上限。若要指定沒有下限，請針對 `Min`，指定 `0`。若要指定沒有上限，請省略 `Max` 參數。

   1. 針對 `MemoryMiB`，指定記憶體的數量下限和上限 (以 MiB 為單位)。若要指定沒有下限，請針對 `Min`，指定 `0`。若要指定沒有上限，請省略 `Max` 參數。

   1. 您可以選擇性地指定一或多個其他屬性，以進一步限制傳回的執行個體類型清單。

1. 若要預覽具有您在 JSON 檔案中指定之屬性的執行個體類型，請使用 [get-instance-types-from-instance-requirements](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-types-from-instance-requirements.html) 命令，並使用 `--cli-input-json` 參數指定 JSON 檔案的名稱和路徑。您可以選擇性地格式化要以表格格式出現的輸出。

   ```
   aws ec2 get-instance-types-from-instance-requirements \
       --cli-input-json file://attributes.json \
       --output table
   ```

   範例 *attributes.json* 文件

   在此範例中，JSON 檔案中包含必要的屬性。它們是 `ArchitectureTypes`、`VirtualizationTypes`、`VCpuCount` 和 `MemoryMiB`。此外，選用 `InstanceGenerations` 屬性也包含在內。請注意，對於 `MemoryMiB`，可以省略 `Max`，以表示沒有限制。

   ```
   {
       
       "ArchitectureTypes": [
           "x86_64"
       ],
       "VirtualizationTypes": [
           "hvm"
       ],
       "InstanceRequirements": {
           "VCpuCount": {
               "Min": 4,
               "Max": 6
           },
           "MemoryMiB": {
               "Min": 2048
           },
           "InstanceGenerations": [
               "current"
           ]
       }
   }
   ```

   範例輸出

   ```
   ------------------------------------------
   |GetInstanceTypesFromInstanceRequirements|
   +----------------------------------------+
   ||             InstanceTypes            ||
   |+--------------------------------------+|
   ||             InstanceType             ||
   |+--------------------------------------+|
   ||  c4.xlarge                           ||
   ||  c5.xlarge                           ||
   ||  c5a.xlarge                          ||
   ||  c5ad.xlarge                         ||
   ||  c5d.xlarge                          ||
   ||  c5n.xlarge                          ||
   ||  d2.xlarge                           ||
   ...
   ```

1. 在識別符合您需求的執行個體類型之後，請記下您使用的執行個體屬性，以便在設定機群請求時可以使用它們。

# 使用執行個體權重來管理 EC2 機群或 Spot 機群的成本和效能
<a name="ec2-fleet-instance-weighting"></a>

執行個體加權，可讓您為 EC2 機群或 Spot 機群中的每個執行個體類型指派權重，以代表其運算容量和效能。根據權重，機群可以使用指定執行個體類型的任意組合，只要機群可以滿足所需的目標容量即可。這可協助您管理機群的成本和效能。

權重代表執行個體類型為總目標容量貢獻的容量單位。

**範例：使用執行個體加權進行效能管理**

假設您的機群有兩種執行個體類型，您可以為每個執行個體類型指派不同的權重，以反映每個執行個體類型達到相同的效能所需的權重，如下所示：
+  `m5.large` – 權重：1
+ `m5.2xlarge` – 權重：4

指派以上權重，表示您需要 4 個 `m5.large` 執行個體才能達到與 1 個 `m5.2xlarge` 相同的效能。

若要計算指定目標容量需要多少執行個體類型的執行個體，請使用下列公式：

`target capacity / weight = number of instances`

如果您的目標容量為 8 個單位，機群可以使用 `m5.large` 或 `m5.2xlarge` 達成目標容量，或兩者混合，如下所示：
+ 8 個 `m5.large` 執行個體 (容量為 8/權重為 1 = 8 個執行個體)
+ 2 個 `m5.2xlarge` 執行個體 (容量為 8/權重為 4 = 2 個執行個體)
+ 4 個 `m5.large` 和 1 個 `m5.2xlarge`

**範例：使用執行個體權重進行成本管理**

根據預設，您指定的價格是*每執行個體小時*。使用執行個體權重功能時，您指定的價格是*每單位小時*。您可以透過將執行個體類型價格除以它所代表的單位數，來計算每單位小時的價格。機群會將目標容量除以執行個體的權重，來計算出要啟動的執行個體數量。如果結果不是整數，則機群會將其捨入到下一個整數，以便您的機群大小不低於其目標容量。即使所啟動的執行個體容量超過所請求的目標容量，該機群也可以選取您在啟動規格中指定的任何集區。

下表包含決定目標容量為 10 的機群每單位價格之計算範例。


| 執行個體類型 | 執行個體權重 | 目標容量 | 已啟動的執行個體數目 | 每個執行個體小時的價格 | 每個單位小時的價格 | 
| --- | --- | --- | --- | --- | --- | 
| r3.xlarge |  2  | 10 |  5 (10 除以 2)  |  0.05 USD  |  \$10.025 (.05 除以 2)  | 
| r3.8xlarge |  8  | 10 |  2 (10 除以 8，將結果四捨五入)  |  0.10 USD  |  \$10.0125 (.10 除以 8)  | 

按照下列方式，在實現請求時使用機群執行個體權重，以在完成要求時，使用每單位最低價在集區中佈建所需目標容量：

1. 在您所選擇的執行個體 (預設) 或裝置中 (例如 vCPU、記憶體、儲存空間或輸送量)，設定機群的目標容量。

1. 設定每單位價格

1. 為每個啟動規格指定權重，即執行個體類型代表目標容量的單位數。

**執行個體權重範例**  
請考慮下列組態的機群請求：
+ 目標容量為 24
+ 執行個體類型為 `r3.2xlarge` 且權重為 6 的啟動規格
+ 執行個體類型為 `c3.xlarge` 且權重為 5 的啟動規格

權重表示執行個體類型代表目標容量的單位數。如果第一個啟動規格提供最低的每單位價格 (`r3.2xlarge` 的每小時執行個體價格除以 6)，機群將啟動其中四個執行個體 (24 除以 6)。

如果第二個啟動規格提供了最低的每單位價格 (`c3.xlarge` 的每小時執行個體價格除以 5)，則機群會啟動這些執行個體的其中 5 個 (24 除以 5，將結果四捨五入)。

**執行個體權重與分配策略**  
請考慮下列組態的機群請求：
+ 目標容量為 30 個 Spot 執行個體
+ 執行個體類型為 `c3.2xlarge` 且權重為 8 的啟動規格
+ 執行個體類型為 `m3.xlarge` 且權重為 8 的啟動規格
+ 執行個體類型為 `r3.xlarge` 且權重為 8 的啟動規格

機群會啟動 4 個執行個體 (30 除以 8，將結果四捨五入)。採用 `diversified` 策略，機群會在三個集區的每一個集區啟動一個執行個體，並且三個集區任一個中的第四個執行個體會提供最低的每單位價格。

# 使用配置策略來判斷 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

# 在 EC2 機群和 Spot 機群中使用容量重新平衡，來取代具有風險的 Spot 執行個體
<a name="ec2-fleet-capacity-rebalance"></a>

透過容量重新平衡，您的 EC2 機群或 Spot 機群可以主動取代具有中斷風險的 Spot 執行個體，進而維持所需的 Spot 容量。當 Spot 執行個體的中斷風險提高時，Amazon EC2 會傳送[重新平衡建議](rebalance-recommendations.md)。如果啟用容量重新平衡，重新平衡建議會在風險執行個體中斷之前，觸發新的 Spot 執行個體啟動。

容量重新平衡可協助您維持工作負載可用性，方法是在執行中的執行個體受到 Amazon EC2 的中斷之前，使用新的 Spot 執行個體主動擴增機群。

**設定 EC2 機群，以使用容量重新平衡，進而啟動取代 Spot 執行個體**  
使用 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 命令和 `MaintenanceStrategies` 結構中的相關參數。如需範例 JSON 組態檔，請參閱 [範例 7：設定容量重新平衡，以啟動取代 Spot 執行個體](ec2-fleet-examples.md#ec2-fleet-config8)。

**設定 Spot 機群，以使用容量重新平衡，進而啟動取代 Spot 執行個體**  
您可以使用 Amazon EC2 主控台或 AWS CLI 來設定容量重新平衡。

(主控台) 在您建立 Spot 機群時，選取**容量重新平衡**核取方塊。如需詳細資訊，請參閱 [使用已定義的參數建立 Spot 機群請求](create-spot-fleet.md#create-spot-fleet-advanced) 中的步驟 6.d.。

(AWS CLI) 使用 [request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html) 命令和 `SpotMaintenanceStrategies` 結構中的相關參數。如需範例 JSON 組態檔，請參閱 [範例 8：設定容量重新平衡，以啟動取代 Spot 執行個體](spot-fleet-examples.md#fleet-config8)。

**Topics**
+ [限制](#ec2-fleet-capacity-rebalance-limitations)
+ [組態選項](#ec2-fleet-capacity-rebalance-config-options)
+ [考量事項](#ec2-fleet-capacity-rebalance-considerations)

## 限制
<a name="ec2-fleet-capacity-rebalance-limitations"></a>
+ 容量重新平衡僅適用於類型為 `maintain` 的機群。
+ 機群執行時，您無法修改容量重新平衡設定。若要變更容量重新平衡設定，您必須刪除機群並建立新的機群。

## 組態選項
<a name="ec2-fleet-capacity-rebalance-config-options"></a>

EC2 機群和 Spot 機群的 `ReplacementStrategy` 支援以下兩個值：

`launch-before-terminate`  
Amazon EC2 會在新的替代 Spot 執行個體啟動之後，終止收到重新平衡通知的 Spot 執行個體。當指定 `launch-before-terminate` 時，您亦須指定 `termination-delay` 的值。在啟動新的替代執行個體之後，Amazon EC2 會等待 `termination-delay` 的持續時間，然後終止舊的執行個體。對於 `termination-delay`，下限為 120 秒 (2 分鐘)，上限則為 7200 秒 (2 小時)。  
建議僅在您可以預測執行個體關閉程序將需要多長時間才能完成時，才使用 `launch-before-terminate`。這將確保只在關機程序完成之後，才會終止舊執行個體。請注意，Amazon EC2 可以中斷舊的執行個體，並在 `termination-delay` 之前提供兩分鐘警告。  
強烈建議您不要使用 `lowest-price` (EC2 機群) 或 `lowestPrice` (Spot 機群) 分配策略與 `launch-before-terminate` 結合，以避免替代 Spot 執行個體也處於提高的中斷風險。

`launch`  
針對現有 Spot 執行個體發出重新平衡通知時，Amazon EC2 會啟動替代 Spot 執行個體。Amazon EC2 不會自動終止收到重新平衡建議的執行個體。您可以終止舊的執行個體，也可以讓它們保持執行中狀態。所有執行個體在執行時，您需要支付所有執行個體的費用。

## 考量事項
<a name="ec2-fleet-capacity-rebalance-considerations"></a>

如果您設定容量重新平衡的 EC2 機群或 Spot 機群，請考慮下列事項：

**盡可能在請求中提供更多 Spot 容量集區**  
設定您的機群，以使用多個執行個體類型和可用區域。這提供了在各種 Spot 容量集區中啟動 Spot 執行個體的彈性。如需詳細資訊，請參閱 [對執行個體類型和可用區域具有彈性](spot-best-practices.md#be-instance-type-flexible)。

**避免中斷替代 Spot 執行個體的風險提高**  
為了避免提高中斷風險，我們強烈建議使用 `capacity-optimized` 或 `capacity-optimized-prioritized` 配置策略。這些策略可確保在最佳 Spot 容量集區中啟動替代 Spot 執行個體，因此不太可能在不久的將來中斷。如需詳細資訊，請參閱[使用價格和容量最佳化分配策略](spot-best-practices.md#use-capacity-optimized-allocation-strategy)。  
如果您使用 `lowest-price` 配置策略，替代 Spot 執行個體的中斷風險可能會提高。這是因為 Amazon EC2 總是會在當時具有可用容量的最低價集區中啟動執行個體，即使您的替代 Spot 執行個體在啟動後很快就會中斷也一樣。

**只有在可用性相同或更好時，Amazon EC2 才會啟動新執行個體**  
容量重新平衡的其中一個目標是改善 Spot 執行個體的可用性。如果現有的 Spot 執行個體收到重新平衡建議，只有新執行個體提供與現有執行個體相同或更好的可用性時，Amazon EC2 才會啟動新執行個體。如果新執行個體的中斷風險比現有執行個體更大，則 Amazon EC2 將不會啟動新執行個體。但是，Amazon EC2 將繼續評估 Spot 容量集區，並在可用性改善時啟動新執行個體。  
如果 Amazon EC2 不主動啟動新執行個體，現有執行個體可能會中斷。發生這種情況時，無論新執行個體是否存在高中斷風險，Amazon EC2 都會嘗試啟動新執行個體。

**容量重新平衡不會增加 Spot 執行個體中斷率**  
當您啟用容量重新平衡時，不會增加 [Spot 執行個體中斷率](spot-interruptions.md) (當 Amazon EC2 需要恢復容量時回收的 Spot 執行個體數量)。但是，如果容量重新平衡偵測到執行個體有中斷風險，Amazon EC2 將立即嘗試啟動新的執行個體。因此，與在有風險的執行個體中斷後等待 Amazon EC2 啟動新的執行個體相比，可能會取代更多執行個體。  
雖然您可以在啟用容量重新平衡的情況下取代更多執行個體，但您可以從主動式而非被動式中受益，因為在執行個體中斷之前您有更多時間採取動作。透過 [Spot 執行個體中斷通知](spot-instance-termination-notices.md)，您通常最多只有兩分鐘時間來正常關閉您的執行個體。透過容量重新平衡預先啟動新的執行個體，可讓現有程序更有可能在有風險的執行個體上完成，您可以啟動執行個體關閉程序，並防止在有風險的執行個體上排程新的工作。您也可以開始準備新啟動的執行個體以接管應用程式。透過容量重新平衡的主動式取代，您可以從正常連續性中獲益。  
作為示範使用容量重新平衡的風險和益處的理論範例，請考慮下列案例：  
+ 下午 2:00 – 收到執行個體 A 的重新平衡建議，Amazon EC2 會立即開始嘗試啟動取代執行個體 B，讓您有時間開始關機程序。\$1
+ 下午 2:30 – 收到執行個體 B 的重新平衡建議，會取代為執行個體 C，讓您有時間開始關機程序。\$1
+ 下午 2:32 – 如果未啟用容量重新平衡，並且如果在下午 2:32 收到執行個體 A 的 Spot 執行個體中斷通知，則您最多只有兩分鐘時間採取動作，但是執行個體 A 會一直執行到目前。
\$1 如果指定了 `launch-before-terminate`，Amazon EC2 將在取代執行個體連線後終止有風險的執行個體。

**Amazon EC2 可以啟動新的替代 Spot 執行個體，直到滿足的容量為目標容量雙倍**  
設定機群為容量重新平衡時，機群會嘗試為每個收到重新平衡建議的 Spot 執行個體啟動新的替代 Spot 執行個體。Spot 執行個體收到重新平衡建議後，該執行個體不再計入以滿足容量的一部分。根據替代策略，Amazon EC2 會在預先設定的終止延遲之後終止執行個體，或讓執行個體繼續執行。這讓您有機會在執行個體上執行[重新平衡動作](rebalance-recommendations.md#rebalancing-actions)。  
如果您的機群達到目標容量的兩倍，即使替代執行個體本身收到重新平衡建議，它仍會停止啟動新的替代執行個體。  
例如，您建立目標容量為 100 個 Spot 執行個體的機群。所有 Spot 執行個體都會收到重新平衡建議，這會導致 Amazon EC2 啟動 100 個替代 Spot 執行個體。這會將已滿足 Spot 執行個體的數目提高至 200 個，這是目標容量的兩倍。某些替代執行個體會收到重新平衡建議，但不會再啟動替代執行個體，因為機群不能超過目標容量的兩倍。  
請注意，所有執行個體在執行時都需支付這些執行個體的費用。

**建議您將機群設定為終止收到重新平衡建議的 Spot 執行個體**  
如果您設定機群進行容量重新平衡，建議您只在可以預測執行個體關閉程序需要多長時間才能完成時，才選擇具有適當終止延遲的 `launch-before-terminate`。這將確保只在關機程序完成之後，才會終止舊執行個體。  
如果您選擇自行終止建議用於重新平衡的執行個體，建議您監控機群中 Spot 執行個體收到的重新平衡建議訊號。透過監控訊號，您可以在 Amazon EC2 中斷受影響的執行個體之前，快速對受影響的執行個體執行[重新平衡動作](rebalance-recommendations.md#rebalancing-actions)，然後手動終止它們。如果您未終止執行個體，則會在執行時繼續為這些執行個體付費。Amazon EC2 不會自動終止收到重新平衡建議的執行個體。  
您可以使用 Amazon EventBridge 或執行個體中繼資料來設定通知。如需詳細資訊，請參閱[監控重新平衡建議訊號](rebalance-recommendations.md#monitor-rebalance-recommendations)。

**機群在縮減或擴展期間計算已滿足容量時，不會計算收到重新平衡建議的執行個體**  
如果您的機群已設定容量重新平衡，且您將目標容量變更為縮減或擴展，則機群不會將標示要重新平衡的執行個體計算為已滿足容量一部分，如下所示：  
+ 縮減 – 如果您減少所需的目標容量，Amazon EC2 會終止未標示要重新平衡的執行個體，直到達到所需容量為止。標示要重新平衡的執行個體不會計入已滿足的容量。

  例如，您建立目標容量為 100 個 Spot 執行個體的機群。10 個執行個體會收到重新平衡建議，因此 Amazon EC2 會啟動 10 個新的替代執行個體，從而產生 110 個執行個體的滿足容量。然後，您可以將目標容量減少為 50 (縮減)，但已滿足容量實際上為 60 個執行個體，因為標示要重新平衡的 10 個執行個體不會被 Amazon EC2 終止。您需要手動終止這些執行個體，或者您也可以讓它們保持運行。
+ 橫向擴展 – 如果您增加想要的目標容量，Amazon EC2 會啟動新執行個體，直到達到所需容量為止。標示要重新平衡的執行個體不會計入已滿足的容量。

  例如，您建立目標容量為 100 個 Spot 執行個體的機群。10 個執行個體會收到重新平衡建議，因此機群會啟動 10 個新的替代執行個體，從而產生 110 個執行個體的滿足容量。然後，您將目標容量增加至 200 (擴展)，但已滿足容量實際上是 210 個執行個體，因為標示要重新平衡的 10 個執行個體不會被機群計為目標容量的一部分。您需要手動終止這些執行個體，或者您也可以讓它們保持運行。

# 使用容量保留功能來保留 EC2 機群中的隨需容量
<a name="ec2-fleet-on-demand-capacity-reservations"></a>

隨需容量保留可讓您在特定的可用區域中，為隨需執行個體預訂任何期間的運算容量。您可將 EC2 機群設定為在啟動隨需執行個體時先使用容量保留。

隨需容量保留僅適用於請求類型設為 `instant` 的 EC2 機群。

容量保留設定為 `open` 或 `targeted`。EC2 機群可以按照 `open` 或 `targeted` 的容量保留啟動隨需執行個體：
+ 如果容量保留為 `open`，則具有相符屬性的隨需執行個體會以預留容量自動執行。
+ 如果容量保留為 `targeted`，則隨需執行個體必須特別針對它使用預留容量執行。這對於用完特定容量保留或控制何時該使用特定容量保留的情況下十分有用。

如果您在 EC2 機群中使用 `targeted` 容量保留，必須有足夠的容量保留以滿足目標隨需容量，否則啟動會失敗。為了避免啟動失敗，最好將 `targeted` 容量保留新增至資源群組，然後針對資源群組為目標來執行。資源群組不需要有足夠的容量保留；如果在滿足目標隨需容量之前用完容量保留，則機群可以將剩餘的目標容量啟動為一般隨需容量。

**在 EC2 機群中使用容量保留**

1. 將機群配置為 `instant` 類型。您無法針對其他類型的機群使用容量保留。

1. 將容量保留的使用策略配置為 `use-capacity-reservations-first`。

1. 在啟動範本的 **Capacity reservation** (容量保留) 中，選擇 **Open** (開放) 或 **Target by group** (依群組分類的目標)。如果您選擇 **Target by group** (依群組分類的目標)，請指定容量保留資源群組 ID。

當機群嘗試滿足隨需容量時，如果發現多個執行個體集區具有相符的未使用容量保留，則會根據隨需分配策略 (`lowest-price` 或 `prioritized`) 決定啟動隨需執行個體的集區。

**相關資源**
+ 如需設定機群以使用容量保留來滿足隨需容量的 CLI 範例，請參閱 [EC2 機群的範例 CLI 組態](ec2-fleet-examples.md) 中的範例 5 至 7。
+ 如需教學課程，引導您完成建立容量保留、在機群中使用，以及檢視剩餘容量保留數量的步驟，請參閱 [教學課程：使用目標容量保留設定 EC2 機群啟動隨需執行個體](ec2-fleet-launch-on-demand-instances-using-targeted-capacity-reservations-walkthrough.md)
+ 如需設定容量保留的相關資訊，請參閱 [使用 EC2 隨需容量保留來保留運算容量](ec2-capacity-reservations.md) 與[隨需容量保留常見問答集](https://aws.amazon.com/ec2/faqs/#On-Demand_Capacity_Reservation)。