

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

# EC2 機群 和 Spot 機群
<a name="Fleets"></a>

EC2 機群和 Spot 機群旨在提供一種實用方式，在單一操作中啟動數十個、數百個或數千個 Amazon EC2 執行個體的機群。機群中的每個執行個體都由[啟動範本](ec2-launch-templates.md)設定，或是由您在啟動時手動設定的一組啟動參數設定。

**Topics**
+ [功能和優勢](#ec2-fleet-features-and-benefits)
+ [最好的機群方法是什麼？](which-fleet-method-to-use.md)
+ [EC2 機群或 Spot 機群的組態選項](ec2-fleet-configuration-strategies.md)
+ [使用 EC2 機群](manage-ec2-fleet.md)
+ [使用 Spot 機群](work-with-spot-fleets.md)
+ [監控您的 EC2 機群或 Spot 機群](fleet-monitor.md)
+ [EC2 機群的教學課程](fleet-tutorials.md)
+ [EC2 機群的範例 CLI 組態](ec2-fleet-examples.md)
+ [範例 CLI 組態 Spot 機群](spot-fleet-examples.md)
+ [EC2 機群和 Spot 機群的配額](fleet-quotas.md)

## 功能和優勢
<a name="ec2-fleet-features-and-benefits"></a>

機群提供下列功能和優點，這些優點可讓您在多個 EC2 執行個體上執行應用程式時，最大限度地節省成本並最佳化可用性和效能。

**多種執行個體類型**  
機群可以啟動多個執行個體類型，進而確保該機群不依賴於任何單一執行個體類型的可用性。這會增加機群中執行個體的整體可用性。

**跨可用區域分佈執行個體**  
機群可在多個可用區域中啟動，協助您降低成本並改善可用性。若您的機群包含 Spot 執行個體，機群會根據您對價格與中斷的偏好設定，自動選取可用區域。

**多個購買選項**  
機群可以啟動多種購買選項 (Spot 執行個體和隨需執行個體)，讓您透過 Spot 執行個體用量來最佳化成本。您也可以將預留執行個體和 Savings Plan 折扣與機群中的隨需執行個體搭配使用，善加利用這些折扣。

**自動替換 Spot 執行個體**  
如果您的機群包含 Spot 執行個體，當您的 Spot 執行個體中斷時，它可以自動請求替換 Spot 容量。透過[容量重新平衡](ec2-fleet-capacity-rebalance.md)，機群也可以監控和主動替換具有較高中斷風險的 Spot 執行個體。

**保留隨需容量**  
機群可以使用[隨需容量保留](ec2-fleet-on-demand-capacity-reservations.md)來保留隨需容量。機群也可包括[機器學習 (ML) 的容量區塊](ec2-capacity-blocks.md)，讓您在為來保留 GPU 執行個體，以支援短期 ML 工作負載。

# 最好的機群方法是什麼？
<a name="which-fleet-method-to-use"></a>

一般而言，我們建議您使用 Amazon EC2 Auto Scaling 啟動 Spot 和隨需執行個體機群，因為它提供了可用來管理機群的其他功能。其他功能清單包括 Spot 和隨需執行個體的自動運作狀態檢查替換、以應用程式為基礎的運作狀態檢查，以及與 Elastic Load Balancing 的整合，可確保應用程式流量均勻分佈到運作良好的執行個體。當您使用 Amazon ECS、Amazon EKS （自我管理節點群組） 和 Amazon VPC Lattice 等 AWS 服務時，也可以使用 Auto Scaling 群組。如需詳細資訊，請參閱 [Amazon EC2 Auto Scaling 使用者指南](https://docs.aws.amazon.com/autoscaling/ec2/userguide/)。

如果您無法使用 Amazon EC2 Auto Scaling，則可以考慮使用 EC2 機群或 Spot 機群。EC2 機群和 Spot 機群提供相同的核心功能。不過，EC2 機群只能使用命令列，不提供主控台支援。Spot 機群提供主控台支援，但該功能以沒有計劃投資的舊式 API 為基礎。

請遵循下列表格來協助判斷要使用的機群。


****  

| 機群方法 | 何時使用？ | 使用案例 | 
| --- | --- | --- | 
|  [Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/which-fleet-method-to-use.html)  |  建立 Auto Scaling 群組，管理執行個體的生命週期，同時維護所需的執行個體數量。支援在指定的最小和最大限制之間水平擴展 (新增更多執行個體)。  | 
|  [EC2 機群](manage-ec2-fleet.md)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/which-fleet-method-to-use.html)  |  在單一操作中建立隨需執行個體和 Spot 執行個體的 `instant` 機群，並具有隨執行個體類型、AMI、可用區域或子網路而異的多個啟動規格。Spot 執行個體分配策略預設為每單位 `lowest-price`，但我們建議您將其變更為 `price-capacity-optimized`。  | 
|  [Spot 機群](work-with-spot-fleets.md)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/which-fleet-method-to-use.html)  |  只有在您需要主控台支援何時使用 EC2 機群的使用案例時，才使用 Spot 機群。  | 

# 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)。

# 使用 EC2 機群
<a name="manage-ec2-fleet"></a>

若要開始使用 EC2 機群，請建立請求，其中包含總目標容量、隨需容量、Spot 容量和指定機群中執行個體組態的啟動範本。您可以選擇性地指定其他參數，或讓機群使用預設值。您在建立機群時，也可以標記機群請求及其執行個體和磁碟區。

機群會在有可用容量時啟動隨需執行個體，並在最高價格超過 Spot 價格且容量可用時，啟動 Spot 執行個體。

機群啟動後，您可以描述機群請求、機群中的執行個體，以及任何機群事件。您也可以視需要指派其他標籤。

如果您需要變更任何機群參數 (例如總目標容量)，您可以修改機群，前提是其已設定為維持容量。提交之後，您就無法修改一次性請求的容量。

機群請求會一直保持作用中狀態，直到過期或您將其刪除為止。當您刪除機群請求時，可以終止執行個體，或讓執行個體保持執行中狀態。如果您選擇讓執行個體保持執行中狀態，隨需執行個體會執行直到您將其終止為止，而 Spot 執行個體則會一直執行直到中斷或您將其終止為止。

**Topics**
+ [EC2 Fleet 請求狀態](EC2-fleet-states.md)
+ [EC2 Fleet 先決條件](ec2-fleet-prerequisites.md)
+ [建立 EC2 Fleet](create-ec2-fleet.md)
+ [標記新的或現有的 EC2 機群請求，及其啟動的執行個體和磁碟區](tag-ec2-fleet.md)
+ [描述 EC2 機群、其執行個體，及其事件](describe-ec2-fleet.md)
+ [修改 EC2 Fleet](modify-ec2-fleet.md)
+ [刪除 EC2 機群請求和機群中的執行個體](delete-fleet.md)

# EC2 Fleet 請求狀態
<a name="EC2-fleet-states"></a>

EC2 機群請求可以是各種狀態之一，每個狀態都會指出請求生命週期的不同階段，以及其執行個體管理。

EC2 Fleet 請求可以是下列任一狀態：

`submitted`  
正在評估 EC2 Fleet 請求且 Amazon EC2 正準備啟動執行個體的目標數量。超出機群限制的請求會立即刪除。

`active`  
EC2 Fleet 請求已驗證且 Amazon EC2 正在嘗試維持執行中的執行個體目標數目。此請求會一直維持在該狀態，直到修改或刪除。

`modifying`  
正在修改 EC2 Fleet 請求。此請求會一直維持在該狀態，直到已完成修改或已刪除請求。只有 `maintain` 機群類型可以修改。此狀態不適用於其他請求類型。

`deleted_running`  
EC2 機群請求已刪除，且不會啟動其他 Spot 執行個體。其現有執行個體將繼續執行直到中斷或手動終止。此請求會一直維持在該狀態，直到所有執行個體中斷或終止。刪除 EC2 Fleet 請求後，只有類型 `maintain` 或 `request` 的 EC2 Fleet 可具有執行中的執行個體。不支援具有執行中執行個體的已刪除 `instant` 機群。此狀態不適用於 `instant` 機群。

`deleted_terminating`  
EC2 Fleet 請求已刪除，且其執行個體已終止。此請求會一直維持在該狀態，直到所有執行個體終止。

`deleted`  
EC2 機群 請求已刪除，且無執行中的執行個體。請求會在其執行個體終止之後兩天刪除。

# EC2 Fleet 先決條件
<a name="ec2-fleet-prerequisites"></a>

**Topics**
+ [啟動範本](#ec2-fleet-prerequisites-launch-template)
+ [EC2 Fleet 的服務連結角色](#ec2-fleet-service-linked-role)
+ [授予客戶受管金鑰存取權，以便與加密的 AMI 和 EBS 快照搭配使用](#ec2-fleet-service-linked-roles-access-to-cmks)
+ [EC2 Fleet 使用者的許可](#ec2-fleet-iam-users)

## 啟動範本
<a name="ec2-fleet-prerequisites-launch-template"></a>

啟動範本會指定所要啟動執行個體的組態資訊，例如執行個體類型和可用區域。如需啟動範本的詳細資訊，請參閱 [將執行個體啟動參數存放在 Amazon EC2 啟動範本中](ec2-launch-templates.md)。

## EC2 Fleet 的服務連結角色
<a name="ec2-fleet-service-linked-role"></a>

`AWSServiceRoleForEC2Fleet` 角色會授與 EC2 Fleet 許可，以代表您請求、啟動、終止和標記執行個體。Amazon EC2 會使用此服務連結角色來完成下列動作：
+ `ec2:RunInstances` – 啟動執行個體。
+ `ec2:RequestSpotInstances` – 請求 競價型執行個體。
+ `ec2:TerminateInstances` – 終止執行個體。
+ `ec2:DescribeImages` - 描述執行個體的 Amazon Machine Images (AMI)。
+ `ec2:DescribeInstanceStatus` - 描述執行個體的狀態。
+ `ec2:DescribeSubnets` - 描述執行個體的子網絡。
+ `ec2:CreateTags` – 將標籤新增至 EC2 Fleet、執行個體和磁碟區。

在使用 AWS CLI 或 API 建立 EC2 機群之前，請確定此角色存在。

**注意**  
`instant` EC2 Fleet 不需要此角色。

若要建立角色，請依照下列所示使用 IAM 主控台。

**為 EC2 Fleet 建立 AWSServiceRoleForEC2Fleet 角色**

1. 在以下網址開啟 IAM 主控台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在導覽窗格中，選擇**角色**。

1. 選擇 **Create Role** (建立角色)。

1. 在 **Select trusted entity** (選取信任的實體) 頁面上，執行以下作業：

   1. 針對**信任的實體類型**，請選擇 **AWS 服務**。

   1. 在**使用案例**下，針對**服務或使用案例**，選擇 **EC2 - 機群**。
**提示**  
請務必選擇 **EC2 - 機群**。如果您選擇 **EC2**，則 **EC2 - 機群**使用案例不會出現在**使用案例**清單中。**EC2 - 機群**使用案例會自動建立具有必要 IAM 許可的政策，並將建議 **AWSServiceRoleForEC2Fleet** 做為角色名稱。

   1. 選擇**下一步**。

1. 在 **Add permissions** (新增許可) 頁面上，選擇 **Next** (下一步)。

1. 在**命名、檢閱和建立**頁面上，選擇**建立角色**。

如果您不再需要使用 EC2 Fleet，建議您刪除 **AWSServiceRoleForEC2Fleet** 角色。從您的帳戶中刪除此角色後，如果您建立其他機群，則可以再次建立此角色。

如需詳細資訊，請參閱「IAM 使用者指南」**中的[服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create-service-linked-role.html)。

## 授予客戶受管金鑰存取權，以便與加密的 AMI 和 EBS 快照搭配使用
<a name="ec2-fleet-service-linked-roles-access-to-cmks"></a>

如果您在 EC2 機群中指定[加密的 AMI](AMIEncryption.md) 或加密的 Amazon EBS 快照，並使用 AWS KMS 金鑰進行加密，則必須授予 **AWSServiceRoleForEC2Fleet** 角色使用客戶受管金鑰的許可，以便 Amazon EC2 可以代表您啟動執行個體。若要執行此動作，您必須將授予新增至客戶受管金鑰，如下列程序所示。

提供許可時，授與為金鑰政策的替代方案。如需詳細資訊，請參閱「*AWS Key Management Service 開發人員指南*」中的[使用授與](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)和[在 AWS KMS中使用金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。

**若要授予 AWSServiceRoleForEC2Fleet 角色許可以使用客戶受管金鑰**
+ 使用 [create-grant](https://docs.aws.amazon.com/cli/latest/reference/kms/create-grant.html) 命令將授予新增至客戶受管金鑰，並指定獲授予許可能夠執行授予所允許作業的主體 (**AWSServiceRoleForEC2Fleet** 服務連結角色)。客戶受管金鑰由 `key-id` 參數和客戶受管金鑰的 ARN 指定。委託人是透過 `grantee-principal` 參數和 **AWSServiceRoleForEC2Fleet** 服務連結角色的 ARN 指定。

  ```
  aws kms create-grant \
      --region us-east-1 \
      --key-id arn:aws:kms:us-east-1:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab \
      --grantee-principal arn:aws:iam::111122223333:role/AWSServiceRoleForEC2Fleet \
      --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"
  ```

## EC2 Fleet 使用者的許可
<a name="ec2-fleet-iam-users"></a>

如果使用者將會建立或管理 EC2 Fleet，請務必授予這些使用者所需的許可。

**為 EC2 Fleet 建立政策**

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

1. 在導覽窗格中，選擇**政策**。

1. 選擇 **Create policy** (建立政策)。

1. 在 **Create policy (建立政策)** 頁面上，選擇 **JSON** 索引標籤，接著使用下列內容來取代其文字，然後選擇 **Review policy (檢閱政策)**。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:*"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                 "iam:ListRoles",
                 "iam:PassRole",
                 "iam:ListInstanceProfiles"
               ],
               "Resource":"arn:aws:iam::123456789012:role/DevTeam*"
           }
       ]
   }
   ```

------

   `ec2:*` 會授與使用者權限，以呼叫所有 Amazon EC2 API 動作。若要將使用者限制於特定的 Amazon EC2 API 動作，請改為指定這些動作。

   使用者必須具有呼叫下列動作的權限：`iam:ListRoles` 動作 (以列舉現有的 IAM 角色)、`iam:PassRole` 動作 (以指定 EC2 Fleet 角色) 和 `iam:ListInstanceProfiles` 動作 (以列舉現有的執行個體設定檔)。

   (選用) 若要讓使用者能夠使用 IAM 主控台建立角色或執行個體設定檔，您也必須將下列動作新增至政策中：
   + `iam:AddRoleToInstanceProfile`
   + `iam:AttachRolePolicy`
   + `iam:CreateInstanceProfile`
   + `iam:CreateRole`
   + `iam:GetRole`
   + `iam:ListPolicies`

1. 在 **Review policy (檢閱政策)** 頁面上，輸入政策名稱和說明，然後選擇 **Create policy (建立政策)**。

1. 若要提供存取權，請新增權限至您的使用者、群組或角色：
   + 中的使用者和群組 AWS IAM Identity Center：

     建立權限合集。請按照《*AWS IAM Identity Center 使用者指南*》中的[建立權限合集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)說明進行操作。
   + 透過身分提供者在 IAM 中管理的使用者：

     建立聯合身分的角色。遵循《*IAM 使用者指南*》的[為第三方身分提供者 (聯合) 建立角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)中的指示。
   + IAM 使用者：
     + 建立您的使用者可擔任的角色。請按照《*IAM 使用者指南*》的[為 IAM 使用者建立角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)中的指示。
     + (不建議) 將政策直接附加至使用者，或將使用者新增至使用者群組。請遵循《*IAM 使用者指南*》的[新增許可到使用者 (主控台)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) 中的指示。

# 建立 EC2 Fleet
<a name="create-ec2-fleet"></a>

若要建立 EC2 機群，請在 JSON 檔案中定義機群組態，並使用 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 命令參考檔案。在 JSON 檔案中，您必須指定機群的總目標容量、Spot 執行個體和隨需執行個體的個別目標容量，以及定義機群中執行個體組態的啟動範本，例如 AMI、執行個體類型、子網路或可用區域，以及一個或多個安全群組。您可以選擇指定其他組態，例如覆寫啟動範本組態的參數、從 EC2 容量集區中選取 Spot 執行個體和隨需執行個體的配置策略，以及您針對機群所願意支付的最高金額。如需詳細資訊，請參閱[EC2 機群或 Spot 機群的組態選項](ec2-fleet-configuration-strategies.md)。

EC2 機群會在容量可用時啟動隨需執行個體，並在您的最高價格超過 Spot 價格且容量可用時，啟動 Spot 執行個體。

如果您的機群包含 Spot 執行個體，且類型為 `maintain`，則 Amazon EC2 會在 Spot 執行個體中斷時，嘗試維護機群目標容量。

## EC2 Fleet 限制
<a name="EC2-fleet-limitations"></a>

下列限制適用於 EC2 Fleet：
+ 僅能透過 [Amazon EC2 API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html)、[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html)、[AWS SDK](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html#API_CreateFleet_SeeAlso) 和 [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ec2fleet.html) 建立 EC2 機群。
+ EC2 機群請求無法跨越 AWS 區域。您需要為每個區域建立個別的 EC2 Fleet。
+ EC2 Fleet 請求不能橫跨同一個可用區域的不同子網。

## 建立 EC2 Fleet
<a name="create-ec2-fleet-procedure"></a>

若您要使用 EC2 機群啟動執行個體機群，只需在機群請求中指定下列參數，機群將使用其他參數的預設值：
+ `LaunchTemplateId` 或 `LaunchTemplateName` – 指定要使用的啟動範本 (其中包含要啟動的執行個體參數，例如執行個體類型和可用區域)
+ `TotalTargetCapacity` – 指定機群的總目標容量
+ `DefaultTargetCapacityType` – 指定預設購買選項是隨需還是 Spot

若要覆寫啟動範本中指定的參數，您可以指定一或多個覆寫。每個覆寫可能因執行個體類型、可用區域、子網路和最高價格而異，且可能包含不同的加權容量。做為指定執行個體類型的替代方式，您可以指定執行個體必須具有的屬性，然後 Amazon EC2 會識別具有這些屬性的所有執行個體類型。如需詳細資訊，請參閱 [指定屬性，為 EC2 機群或 Spot 機群選取執行個體類型](ec2-fleet-attribute-based-instance-type-selection.md)。

對於類型為 `instant` 的 EC2 機群，您可以指定 Systems Manager 參數，而不是 AMI ID。您可以在覆寫或啟動範本中，指定 Systems Manager 參數。如需詳細資訊，請參閱[使用 Systems Manager 參數而非 AMI ID](create-launch-template.md#use-an-ssm-parameter-instead-of-an-ami-id)。

您可以指定 JSON 檔案中的機群參數。如需您可以指定的所有可能參數相關資訊，請參閱 [檢視所有 EC2 機群組態選項](#ec2-fleet-cli-skeleton)。

如需機群組態的範例，請參閱 [EC2 機群的範例 CLI 組態](ec2-fleet-examples.md)。

目前沒有主控台支援建立 EC2 Fleet。

**建立 EC2 機群**  
使用 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 命令來建立機群，並指定包含機群組態參數的 JSON 檔案。

```
aws ec2 create-fleet --cli-input-json file://file_name.json
```

以下是類型 `request` 或 `maintain` 的叢集輸出範例。

```
{
    "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE"
}
```

以下是啟動目標容量之類型 `instant` 的叢集輸出範例。

```
{
  "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE",
  "Errors": [],
  "Instances": [
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c5.large",
          "AvailabilityZone": "us-east-1a"
        }
      },
      "Lifecycle": "on-demand",
      "InstanceIds": [
        "i-1234567890abcdef0",
        "i-9876543210abcdef9" 
      ],
      "InstanceType": "c5.large",
      "Platform": null
    },
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c4.large",
          "AvailabilityZone": "us-east-1a"
        }
      },
      "Lifecycle": "on-demand",
      "InstanceIds": [
        "i-5678901234abcdef0",
        "i-5432109876abcdef9" 
      ]
  ]
}
```

以下是啟動部分目標容量並附有未啟動之執行個體錯誤之類型 `instant` 的叢集輸出範例。

```
{
  "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE",
  "Errors": [
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c4.xlarge",
          "AvailabilityZone": "us-east-1a",
        }
      },
      "Lifecycle": "on-demand",
      "ErrorCode": "InsufficientInstanceCapacity",
      "ErrorMessage": ""
    },
  ],
  "Instances": [
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c5.large",
          "AvailabilityZone": "us-east-1a"
        }
      },
      "Lifecycle": "on-demand",
      "InstanceIds": [
        "i-1234567890abcdef0",
        "i-9876543210abcdef9" 
      ]
  ]
}
```

以下是未啟動任何執行個體之類型 `instant` 的叢集輸出範例。

```
{
  "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE",
  "Errors": [
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c4.xlarge",
          "AvailabilityZone": "us-east-1a",
        }
      },
      "Lifecycle": "on-demand",
      "ErrorCode": "InsufficientCapacity",
      "ErrorMessage": ""
    },
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c5.large",
          "AvailabilityZone": "us-east-1a",
        }
      },
      "Lifecycle": "on-demand",
      "ErrorCode": "InsufficientCapacity",
      "ErrorMessage": ""
    },
  ],
  "Instances": []
}
```

## 建立取代 Spot 執行個體運作狀態不佳的 EC2 機群
<a name="ec2-fleet-health-checks"></a>

EC2 Fleet 會每兩分鐘定期檢查機群中執行個體的運作狀態。執行個體的運作狀態會是 `healthy` 或 `unhealthy`。

EC2 Fleet 會根據 Amazon EC2 提供的狀態檢查資訊，來判定執行個體的運作狀態。如果執行個體狀態檢查或系統狀態檢查的運作狀態檢查，出現連續三次為 `impaired`，則該執行個體即為 `unhealthy`。如需詳細資訊，請參閱[Amazon EC2 執行個體的狀態檢查](monitoring-system-instance-status-check.md)。

您可以設定機群以取代運作狀態不佳的 競價型執行個體。`ReplaceUnhealthyInstances` 設為 `true` 以後，在報告為 `unhealthy` 時，則 Spot 執行個體會被取代。當取代一個狀態不佳的 Spot 執行個體時，機群可能會低於其目標容量長達幾分鐘。

**要求**
+ 運作狀態檢查取代僅支援維持目標容量的 EC2 Fleet (類型 `maintain` 的機群)，不支援類型 `request` 或 `instant` 的機群。
+ 運作狀態檢查取代僅支援 競價型執行個體。此功能不支援 隨需執行個體。
+ 您可以設定 EC2 Fleet 只在建立執行個體時取代狀況不良的執行個體。
+ 使用者只有在擁有呼叫 `ec2:DescribeInstanceStatus` 動作的許可時，才能使用運作狀態檢查取代功能。

**設定 EC2 Fleet 以取代運作狀態不佳的 競價型執行個體**

1. 使用資訊在 [建立 EC2 Fleet](#create-ec2-fleet-procedure) 中建立 EC2 機群。

1. 若要設定機群以取代運作狀態不佳的 Spot 執行個體，在 JSON 檔案中，針對 `ReplaceUnhealthyInstances` 請指定 `true`。

## 檢視所有 EC2 機群組態選項
<a name="ec2-fleet-cli-skeleton"></a>

若要檢視 EC2 Fleet 組態參數的完整清單，您可以產生 JSON 檔案。如需每個參數的描述，請參閱 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html)。

**產生所有可能 EC2 機群參數的 JSON 檔案**  
使用 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) (AWS CLI) 命令和 `--generate-cli-skeleton` 參數來產生 EC2 Fleet JSON 檔案，並將輸出導向至檔案以儲存它：

```
aws ec2 create-fleet \
    --generate-cli-skeleton input > ec2createfleet.json
```

以下為範例輸出。

```
{
    "DryRun": true,
    "ClientToken": "",
    "SpotOptions": {
        "AllocationStrategy": "price-capacity-optimized",
        "MaintenanceStrategies": {
            "CapacityRebalance": {
                "ReplacementStrategy": "launch"
            }
        },
        "InstanceInterruptionBehavior": "hibernate",
        "InstancePoolsToUseCount": 0,
        "SingleInstanceType": true,
        "SingleAvailabilityZone": true,
        "MinTargetCapacity": 0,
        "MaxTotalPrice": ""
    },
    "OnDemandOptions": {
        "AllocationStrategy": "prioritized",
        "CapacityReservationOptions": {
            "UsageStrategy": "use-capacity-reservations-first"
        },
        "SingleInstanceType": true,
        "SingleAvailabilityZone": true,
        "MinTargetCapacity": 0,
        "MaxTotalPrice": ""
    },
    "ExcessCapacityTerminationPolicy": "termination",
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "",
                "LaunchTemplateName": "",
                "Version": ""
            },
            "Overrides": [
                {
                    "InstanceType": "r5.metal",
                    "MaxPrice": "",
                    "SubnetId": "",
                    "AvailabilityZone": "",
                    "WeightedCapacity": 0.0,
                    "Priority": 0.0,
                    "Placement": {
                        "AvailabilityZone": "",
                        "Affinity": "",
                        "GroupName": "",
                        "PartitionNumber": 0,
                        "HostId": "",
                        "Tenancy": "dedicated",
                        "SpreadDomain": "",
                        "HostResourceGroupArn": ""
                    },
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 0
                        },
                        "MemoryMiB": {
                            "Min": 0,
                            "Max": 0
                        },
                        "CpuManufacturers": [
                            "amd"
                        ],
                        "MemoryGiBPerVCpu": {
                            "Min": 0.0,
                            "Max": 0.0
                        },
                        "ExcludedInstanceTypes": [
                            ""
                        ],
                        "InstanceGenerations": [
                            "previous"
                        ],
                        "SpotMaxPricePercentageOverLowestPrice": 0,
                        "OnDemandMaxPricePercentageOverLowestPrice": 0,
                        "BareMetal": "included",
                        "BurstablePerformance": "required",
                        "RequireHibernateSupport": true,
                        "NetworkInterfaceCount": {
                            "Min": 0,
                            "Max": 0
                        },
                        "LocalStorage": "excluded",
                        "LocalStorageTypes": [
                            "ssd"
                        ],
                        "TotalLocalStorageGB": {
                            "Min": 0.0,
                            "Max": 0.0
                        },
                        "BaselineEbsBandwidthMbps": {
                            "Min": 0,
                            "Max": 0
                        },
                        "AcceleratorTypes": [
                            "inference"
                        ],
                        "AcceleratorCount": {
                            "Min": 0,
                            "Max": 0
                        },
                        "AcceleratorManufacturers": [
                            "amd"
                        ],
                        "AcceleratorNames": [
                            "a100"
                        ],
                        "AcceleratorTotalMemoryMiB": {
                            "Min": 0,
                            "Max": 0
                        }
                    }
                }
            ]
        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 0,
        "OnDemandTargetCapacity": 0,
        "SpotTargetCapacity": 0,
        "DefaultTargetCapacityType": "on-demand",
        "TargetCapacityUnitType": "memory-mib"
    },
    "TerminateInstancesWithExpiration": true,
    "Type": "instant",
    "ValidFrom": "1970-01-01T00:00:00",
    "ValidUntil": "1970-01-01T00:00:00",
    "ReplaceUnhealthyInstances": true,
    "TagSpecifications": [
        {
            "ResourceType": "fleet",
            "Tags": [
                {
                    "Key": "",
                    "Value": ""
                }
            ]
        }
    ],
    "Context": ""
}
```

# 標記新的或現有的 EC2 機群請求，及其啟動的執行個體和磁碟區
<a name="tag-ec2-fleet"></a>

為便於將 EC2 機群請求及其啟動的執行個體和磁碟區分類並進行管理，您可以利用自訂中繼資料來標記這些請求。您可以在建立 EC2 Fleet 請求時，或建立之後，將標籤指派給該請求。同樣地，您可以在機群啟動執行個體和磁碟區時或之後，將標籤指派給執行個體和磁碟區。

當您標記機群請求時，由機群啟動的執行個體和磁碟區不會自動加上標記。您需要明確標記由機群啟動的執行個體和磁碟區。您可以選擇僅將標籤指派給機群請求，或僅指派給機群啟動的執行個體，或僅指派給連接至機群啟動之執行個體的磁碟區，或指派給前述所有項目。

**注意**  
針對 `instant` 機群類型，您可以為連接至 隨需執行個體 和 競價型執行個體 的磁碟區加標籤。針對 `request` 或 `maintain` 機群類型，您只可以為連接至 隨需執行個體 的磁碟區加標籤。

如需有關標籤運作方式的詳細資訊，請參閱[標記您的 Amazon EC2 資源](Using_Tags.md)。

**必要條件**

授予使用者標記資源的許可。如需詳細資訊，請參閱[範例：標籤資源](ExamplePolicies_EC2.md#iam-example-taggingresources)。

**授予使用者標記資源的許可**  
建立包含下列項目的 IAM 政策：
+ `ec2:CreateTags` 動作。這會授予使用者建立標籤的許可。
+ `ec2:CreateFleet` 動作。這會授予使用者建立 EC2 Fleet 請求的許可。
+ 針對 `Resource`，建議您指定 `"*"`。這可讓使用者標記所有資源類型。

若要提供存取權，請新增權限至您的使用者、群組或角色：
+ 中的使用者和群組 AWS IAM Identity Center：

  建立權限合集。請按照《*AWS IAM Identity Center 使用者指南*》中的[建立權限合集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)說明進行操作。
+ 透過身分提供者在 IAM 中管理的使用者：

  建立聯合身分的角色。遵循《*IAM 使用者指南*》的[為第三方身分提供者 (聯合) 建立角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)中的指示。
+ IAM 使用者：
  + 建立您的使用者可擔任的角色。請按照《*IAM 使用者指南*》的[為 IAM 使用者建立角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)中的指示。
  + (不建議) 將政策直接附加至使用者，或將使用者新增至使用者群組。請遵循《*IAM 使用者指南*》的[新增許可到使用者 (主控台)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) 中的指示。

**標記新的 EC2 Fleet 請求**  
若要在建立 EC2 Fleet 請求時加以標記，請在建立機群時所用的 [JSON 檔案](create-ec2-fleet.md#ec2-fleet-cli-skeleton)中指定金鑰值對。`ResourceType` 的值必須為 `fleet`。若您指定其他值，機群請求將會失敗。

**標記由 EC2 Fleet 啟動的執行個體和磁碟區**  
若要在機群啟動執行個體時標記這些執行個體和磁碟區，請在 EC2 Fleet 請求中參考的[啟動範本](create-launch-template.md)中指定標籤。

**注意**  
您無法標記連接至 競價型執行個體、由 `request` 或 `maintain` 機群類型啟動的磁碟區。

**若要標記現有的 EC2 機群請求、執行個體和磁碟區**  
使用[建立標籤](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-tags.html)命令來標記現有資源。

```
aws ec2 create-tags \
    --resources fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE i-1234567890abcdef0 vol-1234567890EXAMPLE \
    --tags Key=purpose,Value=test
```

# 描述 EC2 機群、其執行個體，及其事件
<a name="describe-ec2-fleet"></a>

您可說明您的 EC2 機群組態、您 EC2 機群中的執行個體，及您 EC2 機群的事件歷史記錄。

**Topics**
+ [說明您的 EC2 機群](#describe-all-ec2-fleets)
+ [說明 EC2 機群中的所有執行個體](#describe-instances-in-ec2-fleet)
+ [說明 EC2 機群的事件歷史記錄](#describe-ec2-fleet-event-history)

## 說明您的 EC2 機群
<a name="describe-all-ec2-fleets"></a>

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

**如要說明您的 EC2 機群**  
使用 [describe-fleets](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-fleets.html) 命令。

```
aws ec2 describe-fleets \
    --fleet-ids fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
```

以下為範例輸出。

```
{
    "Fleets": [
        {
            "ActivityStatus": "fulfilled",
            "CreateTime": "2022-02-09T03:35:52+00:00",
            "FleetId": "fleet-364457cd-3a7a-4ed9-83d0-7b63e51bb1b7",
            "FleetState": "active",
            "ExcessCapacityTerminationPolicy": "termination",
            "FulfilledCapacity": 2.0,
            "FulfilledOnDemandCapacity": 0.0,
            "LaunchTemplateConfigs": [
                {
                    "LaunchTemplateSpecification": {
                        "LaunchTemplateName": "my-launch-template",
                        "Version": "$Latest"
                    }
                }
            ],
            "TargetCapacitySpecification": {
                "TotalTargetCapacity": 2,
                "OnDemandTargetCapacity": 0,
                "SpotTargetCapacity": 2,
                "DefaultTargetCapacityType": "spot"
            },
            "TerminateInstancesWithExpiration": false,
            "Type": "maintain",
            "ReplaceUnhealthyInstances": false,
            "SpotOptions": {
                "AllocationStrategy": "capacity-optimized",
                "InstanceInterruptionBehavior": "terminate"
            },
            "OnDemandOptions": {
                "AllocationStrategy": "lowestPrice"
            }
        }
    ]
}
```

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

**如要說明您的 EC2 機群**  
使用 [Get-EC2FleetList](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2FleetList.html) cmdlet。

```
Get-EC2FleetList `
    -FleetId fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
```

------

## 說明 EC2 機群中的所有執行個體
<a name="describe-instances-in-ec2-fleet"></a>

執行中執行個體的傳回清單會定期重新整理且可能過期。

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

**說明適用於指定 EC2 機群的執行個體。**  
使用 [describe-fleet-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-fleet-instances.html) 命令。

```
aws ec2 describe-fleet-instances \
    --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
```

以下為範例輸出。

```
{
    "ActiveInstances": [
        {
            "InstanceId": "i-09cd595998cb3765e", 
            "InstanceHealth": "healthy", 
            "InstanceType": "m4.large", 
            "SpotInstanceRequestId": "sir-86k84j6p"
        }, 
        {
            "InstanceId": "i-09cf95167ca219f17", 
            "InstanceHealth": "healthy", 
            "InstanceType": "m4.large", 
            "SpotInstanceRequestId": "sir-dvxi7fsm"
        }
    ], 
    "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE"
}
```

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

**說明適用於指定 EC2 機群的執行個體。**  
使用 [Get-EC2FleetInstanceList](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2FleetInstanceList.html) cmdlet。

```
Get-EC2FleetInstanceList `
    -FleetId fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
```

------

## 說明 EC2 機群的事件歷史記錄
<a name="describe-ec2-fleet-event-history"></a>

如需有關事件歷史記錄中事件的詳細資訊，請參閱 [EC2 機群 事件類型](monitor-ec2-fleet-using-eventbridge.md#ec2-fleet-event-types)。

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

**描述指定 EC2 機群的事件**  
使用 [describe-fleet-history](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-fleet-history.html) 命令。

```
aws ec2 describe-fleet-history \
    --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --start-time 2020-06-01T00:00:00Z
```

以下為範例輸出。

```
{
    "HistoryRecords": [
        {
            "EventInformation": {
                "EventSubType": "submitted"
            },
            "EventType": "fleetRequestChange",
            "Timestamp": "2020-09-01T18:26:05.000Z"
        },
        {
            "EventInformation": {
                "EventSubType": "active"
            },
            "EventType": "fleetRequestChange",
            "Timestamp": "2020-09-01T18:26:15.000Z"
        },
        {
            "EventInformation": {
                "EventDescription": "t2.small, ami-07c8bc5c1ce9598c3, ...",
                "EventSubType": "progress"
            },
            "EventType": "fleetRequestChange",
            "Timestamp": "2020-09-01T18:26:17.000Z"
        },
        {
            "EventInformation": {
                "EventDescription": "{\"instanceType\":\"t2.small\", ...}",
                "EventSubType": "launched",
                "InstanceId": "i-083a1c446e66085d2"
            },
            "EventType": "instanceChange",
            "Timestamp": "2020-09-01T18:26:17.000Z"
        },
        {
            "EventInformation": {
                "EventDescription": "{\"instanceType\":\"t2.small\", ...}",
                "EventSubType": "launched",
                "InstanceId": "i-090db02406cc3c2d6"
            },
            "EventType": "instanceChange",
            "Timestamp": "2020-09-01T18:26:17.000Z"
        }
    ], 
    "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", 
    "LastEvaluatedTime": "1970-01-01T00:00:00.000Z", 
    "StartTime": "2020-06-01T00:00:00.000Z"
}
```

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

**描述指定 EC2 機群的事件**  
使用 [Get-EC2FleetHistory](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2FleetHistory.html) cmdlet。

```
Get-EC2FleetHistory `
    -FleetId fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE `
    -UtcStartTime 2020-06-01T00:00:00Z
```

------

# 修改 EC2 Fleet
<a name="modify-ec2-fleet"></a>

您可以修改 EC2 機群的總目標容量、Spot 容量和隨需容量。如果機群新的總目標容量減少到低於機群的目前大小，您也可以修改是否應終止執行中的執行個體。

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

修改 EC2 機群時，請考慮下列事項：
+ **機群類型** – 您僅可以修改 `maintain` 類型的 EC2 機群。您無法修改 `request` 或 `instant` 類型的 EC2 機群。
+ **機群參數** – 您可以修改 EC2 機群的下列參數：
  + `target-capacity-specification` – 增加或減少以下的目標容量：
    + `TotalTargetCapacity`
    + `OnDemandTargetCapacity`
    + `SpotTargetCapacity`
  + `excess-capacity-termination-policy` – 如果機群的總目標容量減少到低於 EC2 Fleet 的目前大小，是否應終止執行中的執行個體。有效的值如下：
    + `no-termination`
    + `termination`
+ **增加總目標容量時的機群行為** – 當您增加總目標容量時，EC2 機群會根據為 `DefaultTargetCapacityType` 指定的執行個體購買選項 (即隨需執行個體或 Spot 執行個體) 並根據指定的[配置策略](ec2-fleet-allocation-strategy.md)啟動其他執行個體。
+ **減少 Spot 目標容量時的機群行為** – 當您降低 Spot 目標容量時，EC2 機群會刪除超過新目標容量的任何開放請求。您可以請求機群終止 Spot 執行個體，直到機群大小達到新的目標容量。當 EC2 Fleet 因為目標容量減少而終止 Spot 執行個體時，執行個體會收到 Spot 執行個體中斷通知。

  會根據配置策略選取要終止的執行個體：
  + `capacity-optimized` – 從可用容量最少的集區中終止執行個體。
  + `price-capacity-optimized` – 使用價格與可用容量的組合：從可用容量最少，且在這些集區中價格最高的集區終止執行個體。
  + `diversified` – 在所有集區中終止執行個體。
  + `lowest-price` – 從價格最高的集區終止執行個體。

  或者，您可以請求該 EC2 機群將機群保持為目前的大小，但不能取代任何中斷的或您手動終止的 Spot 執行個體。
+ **機群狀態** – 您可以修改處於 `submitted` 或 `active` 狀態中的 EC2 機群。當您修改機群時，機群會進入 `modifying` 狀態。

## 修改 EC2 機群的命令
<a name="modify-ec2-fleet-commands"></a>

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

**修改 EC2 機群的總目標容量**  
使用 [modify-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-fleet.html) 命令。

```
aws ec2 modify-fleet \
    --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --target-capacity-specification TotalTargetCapacity=20
```

如果您要降低目標容量，但希望保持目前的大小，則可以按照下列方式修改前一個範例。

```
aws ec2 modify-fleet \
    --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --target-capacity-specification TotalTargetCapacity=10 \
    --excess-capacity-termination-policy no-termination
```

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

**修改 EC2 機群的總目標容量**  
使用 [Edit-EC2Fleet](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2Fleet.html) cmdlet。

```
Edit-EC2Fleet `
    -FleetId "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -TargetCapacitySpecification_TotalTargetCapacity 20
```

如果您要降低目標容量，但希望保持目前的大小，則可以按照下列方式修改前一個範例。

```
Edit-EC2Fleet `
    -FleetId "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -TargetCapacitySpecification_TotalTargetCapacity 20 `
    -ExcessCapacityTerminationPolicy "NoTermination"
```

------

# 刪除 EC2 機群請求和機群中的執行個體
<a name="delete-fleet"></a>

如果您不再需要某個 EC2 機群請求，可以將其刪除。刪除機群請求後，也會取消與機群相關的所有 Spot 請求，因此不會啟動新的 Spot 執行個體。

您在刪除 EC2 機群時，必須指定是否也要終止其所有執行個體。這包含隨需執行個體和 Spot 執行個體。對於 `instant` 機群，EC2 機群必須在機群刪除時終止執行個體。不支援具有執行中執行個體的已刪除 `instant` 機群。

**警告**  
**終止執行個體的操作為永久性且無法復原。**  
終止執行個體後，您將無法再連線至該執行個體，且無法復原該執行個體。所有設定為終止時刪除的已連接 Amazon EBS 磁碟區，也會被永久刪除且無法復原。儲存在執行個體儲存體磁碟區的所有資料將永久遺失。如需詳細資訊，請參閱[終止執行個體的運作方式](how-ec2-instance-termination-works.md)。  
在終止執行個體之前，確認您已將終止使用後需要保留的全部資料備份至持久性儲存體。

如果指定在刪除機群請求時必須終止執行個體，則機群請求會進入 `deleted_terminating` 狀態。否則會進入 `deleted_running` 狀態，且執行個體會一直執行直到中斷或您手動終止。

**限制**
+ 您可以在單一操作中刪除多達 25 個 `instant` 類型的機群。
+ 您可以在單一操作中刪除多達 100 個 `maintain` 或 `request` 類型的機群。
+ 您可以在單一操作中刪除最多 125 個機群，前提是您不超過以上所指定每個機群類型的配額。
+ 如果您超過要刪除的指定機群數量，則不會刪除任何機群。
+ 不支援具有執行中執行個體的已刪除 `instant` 機群。刪除 `instant` 機群時，Amazon EC2 會自動終止其所有執行個體。對於包含超過 1000 個執行個體的 `instant` 機群，刪除請求可能會失敗。若您的機群有超過 1000 個執行個體，請先手動終止大部分執行個體，留下 1000 個或以下的執行個體。接著刪除機群，剩餘的執行個體將會自動終止。

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

**若要刪除 EC2 機群請求並終止其執行個體**  
使用 [delete-fleets](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-fleets.html) 命令並搭配 `--terminate-instances` 選項。

```
aws ec2 delete-fleets \
    --fleet-ids fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --terminate-instances
```

以下為範例輸出。

```
{
    "UnsuccessfulFleetDeletions": [], 
    "SuccessfulFleetDeletions": [
        {
            "CurrentFleetState": "deleted_terminating", 
            "PreviousFleetState": "active", 
            "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE"
        }
    ]
}
```

**若要刪除 EC2 機群請求但不終止其執行個體**  
請改用 `--no-terminate-instances` 選項來修改之前的範例。請注意，`--no-terminate-instances` 不支援 `instant` 機群。

```
aws ec2 delete-fleets \
    --fleet-ids fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --no-terminate-instances
```

以下為範例輸出。

```
{
    "UnsuccessfulFleetDeletions": [], 
    "SuccessfulFleetDeletions": [
        {
            "CurrentFleetState": "deleted_running", 
            "PreviousFleetState": "active", 
            "FleetId": "fleet-4b8aaae8-dfb5-436d-a4c6-3dafa4c6b7dcEXAMPLE"
        }
    ]
}
```

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

**若要刪除 EC2 機群請求並終止其執行個體**  
使用 [Remove-EC2Fleet](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2Fleet.html) cmdlet 搭配 `-TerminateInstance` 參數。

```
Remove-EC2Fleet `
    -FleetId "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -TerminateInstance $true
```

**若要刪除 EC2 機群請求但不終止其執行個體**  
透過變更 `-TerminateInstance` 參數的值來修改之前的範例。

```
Remove-EC2Fleet `
    -FleetId "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -TerminateInstance $false
```

------

## 當機群無法刪除時進行故障診斷
<a name="troubleshoot-delete-fleet"></a>

如果刪除 EC2 機群請求刪除失敗，則輸出中的 `UnsuccessfulFleetDeletions` 會傳回的 EC2 機群 ID、錯誤碼和錯誤訊息。

錯誤代碼為：
+ `ExceededInstantFleetNumForDeletion`
+ `fleetIdDoesNotExist`
+ `fleetIdMalformed`
+ `fleetNotInDeletableState`
+ `NoTerminateInstancesNotSupported`
+ `UnauthorizedOperation`
+ `unexpectedError`

**`ExceededInstantFleetNumForDeletion` 疑難排解**  
如果您在單一請求中嘗試刪除超過 25 個 `instant` 機群，則會傳回 `ExceededInstantFleetNumForDeletion` 錯誤。下列為此錯誤的範例輸出。

```
{
    "UnsuccessfulFleetDeletions": [
     {
          "FleetId": " fleet-5d130460-0c26-bfd9-2c32-0100a098f625",
          "Error": {
                  "Message": "Can’t delete more than 25 instant fleets in a single request.",
                  "Code": "ExceededInstantFleetNumForDeletion"
           }
     },
     {
           "FleetId": "fleet-9a941b23-0286-5bf4-2430-03a029a07e31",
           "Error": {
                  "Message": "Can’t delete more than 25 instant fleets in a single request.",
                  "Code": "ExceededInstantFleetNumForDeletion"
            }
     }
     .
     .
     .
     ],
     "SuccessfulFleetDeletions": []
}
```

**`NoTerminateInstancesNotSupported` 疑難排解**  
如果您指定在刪除 `instant` 機群時不得終止該機群中的執行個體，則會傳回 `NoTerminateInstancesNotSupported` 錯誤。`--no-terminate-instances` 不支援 `instant` 機群。下列為此錯誤的範例輸出。

```
{
      "UnsuccessfulFleetDeletions": [
            {
                  "FleetId": "fleet-5d130460-0c26-bfd9-2c32-0100a098f625",
                  "Error": {
                          "Message": "NoTerminateInstances option is not supported for instant fleet",
                          "Code": "NoTerminateInstancesNotSupported"
                   }
            }
       ],
       "SuccessfulFleetDeletions": []
}
```

**`UnauthorizedOperation` 疑難排解**  
如果沒有終止執行個體的許可，您在刪除必須終止其執行個體的機群時，會收到 `UnauthorizedOperation` 錯誤。以下是錯誤回應。

```
<Response><Errors><Error><Code>UnauthorizedOperation</Code><Message>You are not authorized to perform this 
operation. Encoded authorization failure message: VvuncIxj7Z_CPGNYXWqnuFV-YjByeAU66Q9752NtQ-I3-qnDLWs6JLFd
KnSMMiq5s6cGqjjPtEDpsnGHzzyHasFHOaRYJpaDVravoW25azn6KNkUQQlFwhJyujt2dtNCdduJfrqcFYAjlEiRMkfDHt7N63SKlweKUl
BHturzDK6A560Y2nDSUiMmAB1y9UNtqaZJ9SNe5sNxKMqZaqKtjRbk02RZu5V2vn9VMk6fm2aMVHbY9JhLvGypLcMUjtJ76H9ytg2zRlje
VPiU5v2s-UgZ7h0p2yth6ysUdhlONg6dBYu8_y_HtEI54invCj4CoK0qawqzMNe6rcmCQHvtCxtXsbkgyaEbcwmrm2m01-EMhekLFZeJLr
DtYOpYcEl4_nWFX1wtQDCnNNCmxnJZAoJvb3VMDYpDTsxjQv1PxODZuqWHs23YXWVywzgnLtHeRf2o4lUhGBw17mXsS07k7XAfdPMP_brO
PT9vrHtQiILor5VVTsjSPWg7edj__1rsnXhwPSu8gI48ZLRGrPQqFq0RmKO_QIE8N8s6NWzCK4yoX-9gDcheurOGpkprPIC9YPGMLK9tug
</Message></Error></Errors><RequestID>89b1215c-7814-40ae-a8db-41761f43f2b0</RequestID></Response>
```

若要解決錯誤，您必須將 `ec2:TerminateInstances` 動作新增至 IAM 政策，如下列範例所示。

# 使用 Spot 機群
<a name="work-with-spot-fleets"></a>

若要開始使用 Spot 機群，請建立包含 Spot 執行個體總目標容量的請求、選用隨需部分，並手動指定 AMI 和金鑰對，或是指定包含機群中執行個體組態的啟動範本。您可以選擇性地指定其他參數，或讓機群使用預設值。您在建立機群時，也可以標記機群請求及其執行個體和磁碟區。

機群會在有可用容量時啟動隨需執行個體，並在最高價格超過 Spot 價格且容量可用時，啟動 Spot 執行個體。

機群啟動後，您可以描述機群請求、機群中的執行個體，以及任何機群事件。您也可以視需要指派其他標籤。

如果您需要變更任何機群參數 (例如總目標容量)，您可以修改機群，前提是其已設定為維持容量。提交之後，您就無法修改一次性請求的容量。

機群請求會一直保持作用中狀態，直到過期或您將其取消 (刪除) 為止。當您取消機群請求時，可以終止執行個體，或讓執行個體保持執行中狀態。如果您選擇讓執行個體保持執行中狀態，隨需執行個體會執行直到您將其終止為止，而 Spot 執行個體則會一直執行直到中斷或您將其終止為止。

**Topics**
+ [Spot Fleet 請求狀態](spot-fleet-states.md)
+ [Spot Fleet 許可](spot-fleet-prerequisites.md)
+ [建立 Spot 機群](create-spot-fleet.md)
+ [標記新的或現有的 Spot 機群請求及其啟動的執行個體和磁碟區](tag-spot-fleet.md)
+ [說明 Spot 機群請求、其執行個體和事件歷史記錄](manage-spot-fleet.md)
+ [修改 Spot Fleet 請求](modify-spot-fleet.md)
+ [取消 (刪除) Spot 機群請求](cancel-spot-fleet.md)
+ [了解 Spot 機群的自動擴展](spot-fleet-automatic-scaling.md)

# Spot Fleet 請求狀態
<a name="spot-fleet-states"></a>

Spot 機群請求可以是各種狀態之一，每個狀態都會指出請求生命週期的不同階段，以及其執行個體管理。

Spot Fleet 請求可以是下列任一狀態：

`submitted`  
正在評估 Spot 機群請求且 Amazon EC2 正準備啟動執行個體的目標數量。超出 Spot 機群配額的請求會立即取消。

`active`  
已驗證 Spot 機群且 Amazon EC2 正在嘗試維持執行中的 Spot 執行個體目標數量。此請求會一直維持在該狀態，直到修改或取消。

`modifying`  
正在修改 Spot 機群請求。請求會一直維持在此狀態，直到已完成修改或是已取消請求。只有 `maintain` 機群類型可以修改。此狀態不適用於一次性 `request` 機群類型。

`cancelled_running`  
Spot 機群已取消 (已刪除)，且不會啟動額外的 Spot 執行個體。其現有執行個體將繼續執行直到中斷或手動終止。此請求會一直維持在該狀態，直到所有執行個體中斷或終止。

`cancelled_terminating`  
Spot 機群已取消 (已刪除)，且其執行個體已終止。此請求會一直維持在該狀態，直到所有執行個體終止。

`cancelled`  
Spot 機群已取消 (已刪除)，且無執行中的執行個體。請求會在其執行個體終止之後兩天刪除。

# Spot Fleet 許可
<a name="spot-fleet-prerequisites"></a>

如果使用者將會建立或管理 Spot 機群，您必須授予這些使用者所需的許可。

如果使用 Amazon EC2 主控台來建立 Spot Fleet，它會建立名為 `AWSServiceRoleForEC2SpotFleet` 和 `AWSServiceRoleForEC2Spot` 的兩個服務連結角色，以及名為 `aws-ec2-spot-fleet-tagging-role` 的角色來授與 Spot Fleet 許可，以代表您請求、啟動、終止和標記資源。如果您使用 AWS CLI 或 API，您必須確保這些角色存在。

請使用下列指示，授與必要的許可並建立角色。

**Topics**
+ [將 Spot 機群的許可授予使用者](#spot-fleet-iam-users)
+ [Spot Fleet 的服務連結角色](#service-linked-roles-spot-fleet-requests)
+ [Spot 執行個體的服務連結角色](#service-linked-roles-spot-instances)
+ [標記 Spot Fleet 的 IAM 角色](#spot-fleet-service-linked-role)

## 將 Spot 機群的許可授予使用者
<a name="spot-fleet-iam-users"></a>

如果使用者將會建立或管理 Spot 機群，請務必授予這些使用者所需的許可。

**為 Spot 機群建立政策**

1. 在以下網址開啟 IAM 主控台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在導覽窗格中，選擇**政策**、**建立政策**。

1. 在**建立政策**頁面上，選擇 **JSON**，使用下列內容來替代其文字。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:RunInstances",
                   "ec2:CreateTags",
                   "ec2:RequestSpotFleet",
                   "ec2:ModifySpotFleetRequest",
                   "ec2:CancelSpotFleetRequests",
                   "ec2:DescribeSpotFleetRequests",
                   "ec2:DescribeSpotFleetInstances",
                   "ec2:DescribeSpotFleetRequestHistory"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::*:role/aws-ec2-spot-fleet-tagging-role"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "iam:CreateServiceLinkedRole",
                   "iam:ListRoles",
                   "iam:ListInstanceProfiles"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

   上述範例政策會向使用者授予大多數 Spot Fleet 使用案例所需的許可。若要將使用者限制於特定的 API 動作，請改為僅指定這些 API 動作。

   **需要的 EC2 和 IAM API**

   必須在原則中包含下列 API：
   + `ec2:RunInstances` – 在 Spot Fleet 中啟動執行個體所需
   + `ec2:CreateTags` – 標記 Spot Fleet 請求、執行個體或磁碟區所需
   + `iam:PassRole` – 指定 Spot Fleet 角色所需
   + `iam:CreateServiceLinkedRole` – 建立服務連結角色所需
   + `iam:ListRoles` – 列舉現有 IAM 角色所需
   + `iam:ListInstanceProfiles` – 列舉現有執行個體描述檔所需
**重要**  
如果您在啟動規格或啟動範本中為 IAM 執行個體設定檔指定角色，您必須授予使用者許可，以將角色傳遞到服務。若要執行此操作，請在 IAM 政策中包含 `"arn:aws:iam::*:role/IamInstanceProfile-role"`，做為 `iam:PassRole` 動作的資源。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[授予使用者將角色傳遞至 AWS 服務的許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)。

   **Spot Fleet API**

   視需要將下列 Spot Fleet API 動作新增至您的政策：
   + `ec2:RequestSpotFleet`
   + `ec2:ModifySpotFleetRequest`
   + `ec2:CancelSpotFleetRequests`
   + `ec2:DescribeSpotFleetRequests`
   + `ec2:DescribeSpotFleetInstances`
   + `ec2:DescribeSpotFleetRequestHistory`

   **選用的 IAM API**

   (選用) 若要讓使用者能夠使用 IAM 主控台建立角色或執行個體設定檔，您必須將下列動作新增至政策中：
   + `iam:AddRoleToInstanceProfile`
   + `iam:AttachRolePolicy`
   + `iam:CreateInstanceProfile`
   + `iam:CreateRole`
   + `iam:GetRole`
   + `iam:ListPolicies`

1. 選擇**檢閱政策**。

1. 在 **Review policy (檢閱政策)** 頁面上，輸入政策名稱和說明，然後選擇 **Create policy (建立政策)**。

1. 若要提供存取權，請新增權限至您的使用者、群組或角色：
   + 中的使用者和群組 AWS IAM Identity Center：

     建立權限合集。請按照《*AWS IAM Identity Center 使用者指南*》中的[建立權限合集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)說明進行操作。
   + 透過身分提供者在 IAM 中管理的使用者：

     建立聯合身分的角色。遵循《*IAM 使用者指南*》的[為第三方身分提供者 (聯合) 建立角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)中的指示。
   + IAM 使用者：
     + 建立您的使用者可擔任的角色。請按照《*IAM 使用者指南*》的[為 IAM 使用者建立角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)中的指示。
     + (不建議) 將政策直接附加至使用者，或將使用者新增至使用者群組。請遵循《*IAM 使用者指南*》的[新增許可到使用者 (主控台)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) 中的指示。

## Spot Fleet 的服務連結角色
<a name="service-linked-roles-spot-fleet-requests"></a>

Amazon EC2 使用許可的服務連結角色，它需要代表您呼叫其他 AWS 服務。服務連結角色是直接連結至 AWS 服務的唯一 IAM 角色類型。服務連結角色提供將許可委派給 AWS 服務的安全方式，因為只有連結的服務可以擔任服務連結角色。如需詳細資訊，請參閱「IAM 使用者指南」**中的[服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create-service-linked-role.html)。

Amazon EC2 使用名為 **AWSServiceRoleForEC2SpotFleet** 的服務連結角色來代您管理執行個體。

**重要**  
如果您在 Spot 機群中指定[加密的 AMI](AMIEncryption.md) 或加密的 Amazon EBS 快照，則必須授予 **AWSServiceRoleForEC2SpotFleet** 角色許可才能使用 CMK，使得 Amazon EC2 可以代表您啟動執行個體。如需詳細資訊，請參閱[授與 CMK 的存取權，以便與加密的 AMI 和 EBS 快照搭配使用](#spot-fleet-service-linked-roles-access-to-cmks)。

### AWSServiceRoleForEC2SpotFleet 授與的許可
<a name="service-linked-role-permissions-granted-by-AWSServiceRoleForEC2SpotFleet"></a>

**AWSServiceRoleForEC2SpotFleet** 角色會授予 Spot 機群許可，以代表您請求、啟動、終止及標記執行個體。Amazon EC2 會使用此服務連結角色來完成下列動作：
+ `ec2:RequestSpotInstances` - 請求 競價型執行個體
+ `ec2:RunInstances` - 啟動執行個體
+ `ec2:TerminateInstances` - 終止執行個體
+ `ec2:DescribeImages` - 描述 Amazon Machine Images (AMI) 的執行個體
+ `ec2:DescribeInstanceStatus` - 監控執行個體的狀態
+ `ec2:DescribeSubnets` - 描述執行個體的子網絡
+ `ec2:CreateTags` - 將標籤新增至 Spot Fleet 請求、執行個體和磁碟區
+ `elasticloadbalancing:RegisterInstancesWithLoadBalancer` - 將指定執行個體新增到指定的負載平衡器
+ `elasticloadbalancing:RegisterTargets` - 向指定的目標群組登錄指定的目標

### 建立服務連結角色
<a name="service-linked-role-creating-for-spot-fleet"></a>

在大部分情況下，您不需要手動建立服務連結角色。您第一次使用主控台建立 Spot Fleet 時，Amazon EC2 會建立 **AWSServiceRoleForEC2SpotFleet** 服務連結角色。

如果您在 2017 年 10 月之前擁有使用中的 Spot Fleet 請求，則當 Amazon EC2 開始支援此服務連結角色時，Amazon EC2 會在您的 AWS 帳戶中建立 **AWSServiceRoleForEC2SpotFleet** 角色。如需詳細資訊，請參閱[《IAM 使用者指南》中的我的 AWS 帳戶中出現的新角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html#troubleshoot_roles_new-role-appeared)。 **

如果您使用 AWS CLI 或 API 來建立 Spot 機群，您必須先確保此角色存在。

**使用主控台為 Spot 機群建立 AWSServiceRoleForEC2SpotFleet 角色**

1. 在以下網址開啟 IAM 主控台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在導覽窗格中，選擇**角色**。

1. 選擇 **Create Role** (建立角色)。

1. 在 **Select trusted entity** (選取信任的實體) 頁面上，執行以下作業：

   1. 針對**信任的實體類型**，請選擇 **AWS 服務**。

   1. 在**使用案例**下，針對**服務或使用案例**，選擇 **EC2**。

   1. 針對**使用案例**，請選擇 **EC2 - Spot 機群**。
**注意**  
**EC2 - Spot 機群**使用案例會自動建立具有必要 IAM 許可的政策，並將 **AWSEC2SpotFleetServiceRolePolicy** 建議做為角色名稱。

   1. 選擇**下一步**。

1. 在 **Add permissions** (新增許可) 頁面上，選擇 **Next** (下一步)。

1. 在**命名、檢閱和建立**頁面上，選擇**建立角色**。

**使用 建立 Spot Fleet 的 AWSServiceRoleForEC2SpotFleet 角色 AWS CLI**  
使用如下所示的 [create-service-linked-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-service-linked-role.html) 命令。

```
aws iam create-service-linked-role --aws-service-name spotfleet.amazonaws.com
```

如果您不再需要使用 Spot Fleet，建議您刪除 **AWSServiceRoleForEC2SpotFleet** 角色。從您的帳戶中刪除此角色後，如果您使用主控台請求 Spot Fleet，Amazon EC2 會再次建立此角色。如需詳細資訊，請參閱「IAM 使用者指南」**中的[刪除服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html#id_roles_manage_delete_slr)。

### 授與 CMK 的存取權，以便與加密的 AMI 和 EBS 快照搭配使用
<a name="spot-fleet-service-linked-roles-access-to-cmks"></a>

如果您在 Spot 機群請求中指定[加密的 AMI](AMIEncryption.md) 或加密的 Amazon EBS 快照，並且使用客戶受管金鑰進行加密，則您必須授予 **AWSServiceRoleForEC2SpotFleet** 角色許可才能使用 CMK，使得 Amazon EC2 可以代表您啟動執行個體。若要執行此動作，您必須新增授與至 CMK，如以下列程序所示。

提供許可時，授與為金鑰政策的替代方案。如需詳細資訊，請參閱 *AWS Key Management Service 開發人員指南*中的[使用授予](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)和[在 AWS KMS中使用金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。

**授與 AWSServiceRoleForEC2SpotFleet 角色許可以使用 CMK**
+ 使用 [create-grant](https://docs.aws.amazon.com/cli/latest/reference/kms/create-grant.html) 命令來新增授與至 CMK，並指定獲授與許可能夠執行授與所允許作業的委託人 (**AWSServiceRoleForEC2SpotFleet** 服務連結角色)。CMK 是透過 `key-id` 參數和 CMK 的 ARN 指定。委託人是透過 `grantee-principal` 參數和 **AWSServiceRoleForEC2SpotFleet** 服務連結角色的 ARN 指定。

  ```
  aws kms create-grant \
      --region us-east-1 \
      --key-id arn:aws:kms:us-east-1:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab \
      --grantee-principal arn:aws:iam::111122223333:role/aws-service-role/spotfleet.amazonaws.com/AWSServiceRoleForEC2SpotFleet \
      --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"
  ```

## Spot 執行個體的服務連結角色
<a name="service-linked-roles-spot-instances"></a>

Amazon EC2 使用名為 **AWSServiceRoleForEC2Spot** 的服務連結角色來代您管理 競價型執行個體。如需詳細資訊，請參閱[Spot 執行個體請求的服務連結角色](service-linked-roles-spot-instance-requests.md)。

## 標記 Spot Fleet 的 IAM 角色
<a name="spot-fleet-service-linked-role"></a>

`aws-ec2-spot-fleet-tagging-role` IAM 角色授予 Spot Fleet 許可，以標記 Spot Fleet 請求、執行個體和磁碟區。如需詳細資訊，請參閱[標記新的或現有的 Spot 機群請求及其啟動的執行個體和磁碟區](tag-spot-fleet.md)。

**重要**  
如果您選擇標記機群中的執行個體，並也選擇維護目標容量 (Spot 機群請求為類型 `maintain`)，為使用者與 `IamFleetRole` 所設定的許可差異可能會導致機群中執行個體標記行為的不一致。如果 `IamFleetRole` 不包含 `CreateTags` 許可，則可能無法標記由機群啟動的某些執行個體。雖然我們正在努力修正此不一致，但為了確保標記由機群啟動的所有執行個體，建議您針對 `IamFleetRole` 使用 `aws-ec2-spot-fleet-tagging-role` 角色。或者，若要使用現有角色，請將 `AmazonEC2SpotFleetTaggingRole` AWS 受管政策連接至現有角色。否則，您需要手動將 `CreateTags` 許可新增至現有政策。

**若要建立用於標記 Spot Fleet 的 IAM 角色**

1. 在以下網址開啟 IAM 主控台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在導覽窗格中，選擇**角色**。

1. 選擇 **Create Role** (建立角色)。

1. 在 **Select trusted entity** (選取受信任實體) 頁面，於 **Trusted entity type** (受信任實體的類型) 下，選擇 **AWS service** ( 服務)。

1. 在 **Use case** (使用案例) 下，從 **Use cases for other AWS services** (其他服務的使用案例)，選擇 **EC2**，然後選擇 **EC2 - Spot Fleet Tagging** (EC2 - Spot 機群標記)。

1. 選擇**下一步**。

1. 在 **Add permissions** (新增許可) 頁面上，選擇 **Next** (下一步)。

1. 在 **Name, review, and create** (名稱，檢閱和建立) 頁面上，針對 **Role name** (角色名稱) 輸入角色的名稱 (例如 **aws-ec2-spot-fleet-tagging-role**)。

1. 檢視頁面上的資訊，然後選擇 **Create role** (建立角色)。

### 預防跨服務混淆代理人
<a name="cross-service-confused-deputy-prevention"></a>

[混淆代理人問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)屬於安全性議題，其中沒有執行動作許可的實體可以強制具有更多權限的實體執行該動作。若要限制 Spot 機群為資源提供另一項服務的許可，我們建議在 `aws-ec2-spot-fleet-tagging-role` 信任政策中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全域條件內容金鑰。

**將 aws:SourceArn 和 aws:SourceAccount 條件金鑰新增至 `aws-ec2-spot-fleet-tagging-role` 信任政策**

1. 在以下網址開啟 IAM 主控台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在導覽窗格中，選擇**角色**。

1. 尋找您先前建立的 `aws-ec2-spot-fleet-tagging-role`，並選擇連結 (而非核取方塊)。

1. 在 **Summary** (摘要) 下，選擇 **Trust relationships** (信任關係) 索引標籤，然後選擇 **Edit trust policy** (編輯信任政策)。

1. 在 JSON 陳述式中，加入一個 `Condition` 元素，其中包含 `aws:SourceAccount` 和 `aws:SourceArn` 全域條件內容金鑰來防止[混淆代理問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)，如下所式：

   ```
   "Condition": {
         "ArnLike": {
           "aws:SourceArn": "arn:aws:ec2:us-east-1:111122223333:spot-fleet-request/sfr-*"
         },
         "StringEquals": {
           "aws:SourceAccount": "111122223333"
         }
   ```
**注意**  
如果 `aws:SourceArn` 值包含帳戶 ID，且同時使用這兩個全域條件內容金鑰，則在相同政策陳述式中使用 `aws:SourceAccount` 值和 `aws:SourceArn` 值中的帳戶時，必須使用相同的帳戶 ID。

   最終信任政策如下所示：

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": {
       "Sid": "ConfusedDeputyPreventionExamplePolicy",
       "Effect": "Allow",
       "Principal": {
         "Service": "spotfleet.amazonaws.com"
       },
       "Action": "sts:AssumeRole",
       "Condition": {
         "ArnLike": {
           "aws:SourceArn": "arn:aws:ec2:us-east-1:111122223333:spot-fleet-request/sfr-*"
         },
         "StringEquals": {
           "aws:SourceAccount": "111122223333"
         }
       }
     }
   }
   ```

------

1. 選擇**更新政策**。

下表提供了 `aws:SourceArn` 的潛在值，以不同程度地限制 `aws-ec2-spot-fleet-tagging-role` 的範圍。


****  

| API 操作 | 呼叫的服務 | Scope (範圍) | `aws:SourceArn` | 
| --- | --- | --- | --- | 
| RequestSpotFleet | AWS STS (AssumeRole) | 將 aws-ec2-spot-fleet-tagging-role 上的 AssumeRole 功能限制為指定帳戶中的 spot-fleet-requests。 | arn:aws:ec2:\$1:123456789012:spot-fleet-request/sfr-\$1 | 
| RequestSpotFleet | AWS STS (AssumeRole) | 將 aws-ec2-spot-fleet-tagging-role 上的 AssumeRole 功能限制為指定帳戶和指定區域中的 spot-fleet-requests。請注意，此角色在其他區域中無法使用。 | arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-\$1 | 
| RequestSpotFleet | AWS STS (AssumeRole) | 將 aws-ec2-spot-fleet-tagging-role 上的 AssumeRole 功能限制為僅限影響機群 sfr-11111111-1111-1111-1111-111111111111 的動作。請注意，此角色可能無法用於其他 Spot 機群。此外，此角色無法用於透過 request-spot-fleet 啟動任何新的 Spot 機群。 | arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-11111111-1111-1111-1111-111111111111 | 

# 建立 Spot 機群
<a name="create-spot-fleet"></a>

使用 AWS 管理主控台，您可以僅選擇 AMI 和所需的總目標容量，快速建立 Spot 機群請求。Amazon EC2 會設定最符合您的需求且遵循 Spot 最佳實務的機群。或者，您可以修改任何預設設定。

如果您想要在機群中包含隨需執行個體，則必須在請求中指定啟動範本，並指定所需的隨需容量。

機群會在有可用容量時啟動隨需執行個體，並在您的最高價格超過 Spot 價格且容量可用時，啟動 Spot 執行個體。

如果您的機群包含 Spot 執行個體，且類型為 `maintain`，則 Amazon EC2 會在 Spot 執行個體中斷時，嘗試維護機群目標容量。

**所需的許可**  
如需詳細資訊，請參閱[Spot Fleet 許可](spot-fleet-prerequisites.md)。

**Topics**
+ [快速建立 Spot 機群請求](#create-spot-fleet-quick)
+ [使用已定義的參數建立 Spot 機群請求](#create-spot-fleet-advanced)
+ [建立 Spot 機群，可取代運作狀態不佳的 Spot 執行個體](#spot-fleet-health-checks)

## 快速建立 Spot 機群請求
<a name="create-spot-fleet-quick"></a>

依照這些步驟使用 Amazon EC2 主控台，快速建立 Spot 機群請求。

**若要使用建議的設定建立 Spot 機群請求**

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

1. 在瀏覽窗格中，選擇 **Spot 請求**。

1. 如果您是第一次使用 Spot，將會顯示歡迎頁面；請選擇**開始使用**。否則，選擇**建立 Spot 機群請求**。

1. 在 **Launch parameters** (啟動參數) 下，選擇 **Manually configure launch parameters** (手動設定啟動參數)。

1. 對於 **AMI**，選擇 AMI。

1. 在 **Target capacity** (目標容量) 下， 針對 **Total target capacity** (總目標容量)，指定要請求的單位數目。對於單位類型，您可以選擇**執行個體**、**vCPU** 或**記憶體 (GiB)**。

1. 在**您的機群請求一覽**，檢閱您的機群組態，然後選擇**啟動**。

## 使用已定義的參數建立 Spot 機群請求
<a name="create-spot-fleet-advanced"></a>

您可以使用您定義的參數建立 Spot Fleet。

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

**使用已定義的參數建立 Spot 機群請求**

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

1. 在瀏覽窗格中，選擇 **Spot 請求**。

1. 如果您是第一次使用 Spot，將會顯示歡迎頁面；請選擇**開始使用**。否則，選擇**建立 Spot 機群請求**。

1. 對於**啟動參數**，您可以手動設定啟動參數，也可以使用啟動範本，如下所示：

   1. [手動設定] 若要在 Amazon EC2 主控台中定義啟動參數，請選擇**手動設定啟動參數**，然後執行下列動作：

      1. 針對 **AMI**，請選擇 提供的基本 AMIs AWS，或選擇**搜尋 AMI** 以使用來自我們使用者社群 AWS Marketplace、 或您自己的 AMI。
**注意**  
如果取消註冊或停用啟動參數中指定的 AMI，則無法從 AMI 啟動新的執行個體。對於設定為維持目標容量的機群，將不會維持目標容量。

      1. (選用) 針對**金鑰對名稱**，選擇現有的金鑰對或建立新的金鑰對。

         [現有的金鑰對] 選擇金鑰對。

         [新的金鑰對] 選擇**建立新的金鑰對**，以前往**金鑰對**頁面。當您完成時，請返回 **Spot Requests** (Spot 請求) 頁面並重新整理清單。

      1. (選用) 展開 **Additional launch parameters** (其他啟動參數)，並執行下列動作：

         1. (選用) 若要啟用 Amazon EBS 最佳化，請針對 **EBS-optimized** (EBS 最佳化)，選取 **Launch EBS-optimized instances** (啟動 EBS 最佳化的執行個體)。

         1. (選用) 若要新增執行個體的暫時區塊層級儲存，請針對**執行個體存放區**，選擇**連接啟動**。

         1. (選用) 若要新增儲存空間，請選擇 **Add new volume** (新增磁碟區)，並指定其他的執行個體存放區磁碟區或 Amazon EBS 磁碟區，取決於執行個體類型。

         1. (選用) 執行個體預設為啟用基本監控。若要啟用詳細的監控，請針對 **Monitoring** (監控)，選取 **Enable CloudWatch detailed monitoring** (啟用 CloudWatch 詳細監控)。

         1. (選用) 若要執行專用 Spot 執行個體，對於**租用**，請選擇 **Dedicated - run a dedicated instance** (專用 - 執行專用執行個體)。

         1. (選用) 針對**安全群組**，選擇一或多個安全群組或建立新的安全群組。

            [現有的安全群組] 選擇一或多個安全群組。

            [新的安全群組] 選擇 **Create new security group** (建立新安全群組) 以前往 **Security Groups** (安全群組) 頁面。當您完成時，請返回 **Spot Requests** (Spot 請求) 並重新整理清單。

         1. (選用) 若要從網際網路連線到您的執行個體，請針對**自動指派 IPv4 公有 IP**，選擇**啟用**。

         1. (選用) 若要啟動包含 IAM 角色的 競價型執行個體，請針對 **IAM 執行個體描述檔**，選擇該角色。

         1. (選用) 若要執行啟動指令碼，請將指令碼複製到**使用者資料**。

         1. (選用) 若要新增標籤，請選擇 **Create tag** (建立標籤) 並輸入標籤的鍵和值，然後選擇 **Create** (建立)。針對每個標籤，重複執行上述動作。

            對於每個標籤，若要使用相同標籤標記執行個體和 Spot Fleet 請求，請確定同時選取 **Instances** (執行個體) 和 **Fleet** (機群)。若只要標記由機群啟動的執行個體，請清除 **Fleet** (機群)。若只要標記 Spot Fleet 請求，請清除 **Instances** (執行個體)。

   1. [啟動範本] 若要使用您在啟動範本中建立的組態，請選擇**使用啟動範本**，對於**啟動範本**，請選擇一個啟動範本。
**注意**  
如果您想要 Spot 機群中的隨需容量，則必須指定啟動範本。

1. 針對**其他請求詳細資訊**，執行下列操作：

   1. 檢閱其他的請求詳細資訊。若要進行變更，請清除**套用預設值**。

   1. (選用) 針對 **IAM 叢集角色**，您可使用預設角色或選擇不同的角色。若要在變更角色後使用預設角色，請選擇**使用預設角色**。

   1. (選用) 若要建立僅在特定期間內有效的請求，請編輯**請求有效性起始日期**和**請求有效性結束日期**。

   1. (選用) 根據預設，當 Spot 機群請求過期時，Amazon EC2 會終止您的 Spot 執行個體。若要在請求過期後繼續執行這些執行個體，請清除**在請求過期時終止執行個體**。

   1. (選用) 若要登錄 競價型執行個體與負載平衡器，請選擇**從一個或多個負載平衡器接收流量**，然後選擇一個或多個 Classic Load Balancer 或目標群組。

1. 針對 **Target capacity** (目標容量)，執行下列動作：

   1. 針對 **Total target capacity** (總目標容量)，指定目標容量要請求的單位數目。對於單位類型，您可以選擇 **Instances** (執行個體)、**vCPUs**, 或 **Memory (MiB)** (記憶體 (MiB))。若要指定目標容量為 0，以便稍後可新增容量，您必須先選取**維持目標容量**。

   1. (選用) 針對 **Include On-Demand base capacity** (包含隨需基礎容量)，指定要請求的隨需單位數量。數量必須小於**總目標容量**。Amazon EC2 會計算差額，並將差額分配給要請求的 Spot 單位。
**重要**  
 若要指定選用的隨需容量，您必須先選擇啟動範本。

   1. (選用) Amazon EC2 預設會在 Spot 執行個體中斷時終止。若要維持目標容量，請選取**維持目標容量**。然後您就可以在 Spot 執行個體中斷時，指定 Amazon EC2 終止、停止或休眠。若要這麼做，請在**中斷行為**中選擇對應的選項。
**注意**  
如果取消註冊或停用啟動參數中指定的 AMI，則無法從 AMI 啟動新的執行個體。在此情況下，對於設定為維持目標容量的機群，將不會維持目標容量。

   1. (選用) 若要允許 Spot Fleet 在機群中為現有的 Spot 執行個體發出執行個體重新平衡通知時啟動替代 Spot 執行個體，請選取 **Capacity rebalance** (容量重新平衡)，然後選擇執行個體取代策略。如果選擇**終止前啟動**，請指定 Amazon EC2 終止舊執行個體之前的延遲 (以秒為單位)。如需詳細資訊，請參閱[在 EC2 機群和 Spot 機群中使用容量重新平衡，來取代具有風險的 Spot 執行個體](ec2-fleet-capacity-rebalance.md)。

   1. (選用) 若要控制您為了在機群中所有的 Spot 執行個體所支付的每小時金額，請選取 **Set maximum cost for Spot Instances** (設定 Spot 執行個體的最大成本)，然後輸入您願意支付的每小時金額上限。達到總額上限時，Spot Fleet 會停止啟動 Spot 執行個體，即使它未符合目標容量亦然。如需詳細資訊，請參閱[設定 EC2 機群或 Spot 機群的花費限制](ec2-fleet-control-spending.md)。

1. 針對 **Network** (網路)，請執行下列動作：

   1. 針對**網路**，選擇現有的 VPC 或建立新的 VPC。

      [現有的 VPC] 選擇 VPC。

      [新的 VPC] 選擇**建立新的 VPC** 以進入 Amazon VPC 主控台。當您完成時，請返回此畫面，並重新整理清單。

   1. (選用) 對於**可用區域**，讓 Amazon EC2 為您的 Spot 執行個體選擇可用區域，或指定一個或多個可用區域。

      如果您在可用區域中擁有一或多個子網，請從**子網**選擇適當的子網。若要新增子網，請選擇**建立新的子網**，以進入 Amazon VPC 主控台。當您完成時，請返回此畫面，並重新整理清單。

1. 針對 **Instance type requirements** (執行個體類型需求)，您可以指定執行個體屬性，並讓 Amazon EC2 利用這些屬性識別最的執行個體類型，或者您可以指定執行個體清單。如需詳細資訊，請參閱[指定屬性，為 EC2 機群或 Spot 機群選取執行個體類型](ec2-fleet-attribute-based-instance-type-selection.md)。

   1. 如果選擇 **Specify instance attributes that match your compute requirements** (指定符合運算需求的執行個體屬性)，請指定您的執行個體屬性，如下所示：

      1. 對於 **vCPUs**，輸入所需的 vCPU 數量下限和上限。若要指定無限制，請選取**無下限**和/或**無上限**。

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

      1. (選用) 對於**其他執行個體屬性**，您可以選擇性地指定一或多個屬性，以更詳細地表達您的運算需求。每個額外屬性都會將進一步的限制新增至您的請求。您可以省略額外屬性；省略時，就會使用預設值。如需每個屬性及其預設值的描述，請參閱 [get-spot-placement-scores](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-spot-placement-scores.html)。

      1. (選用) 若要檢視具有所指定屬性的執行個體類型，請展開 **Preview matching instance types** (預覽相符的執行個體類型)。若要排除執行個體類型，使其不在請求中使用，請選取執行個體，然後選擇 **Exclude selected instance types** (排除選取的執行個體類型)。

   1. 如果選擇 **Manually select instance types** (手動選取執行個體類型)，Spot Fleet 會提供預設的執行個體類型清單。若要選取更多執行個體類型，請選擇 **Add instance types** (新增執行個體類型)、選取要在請求中使用的執行個體類型，然後選擇 **Select** (選取)。若要刪除執行個體類型，請選取執行個體類型並選擇 **Delete** (刪除)。

1. 對於**配置策略**，選擇符合您需求的 Spot 配置策略和隨需配置策略。如需詳細資訊，請參閱[使用配置策略來判斷 EC2 機群或 Spot 機群如何達成 Spot 和隨需容量](ec2-fleet-allocation-strategy.md)。

1. 針對 **Your fleet request at a glance** (您的機群請求一覽)，檢閱您的機群配置，並視需要進行任何調整。

1. （選用） 若要下載啟動組態的副本以搭配 使用 AWS CLI，請選擇 **JSON 組態**。

1. 當您準備好啟動 Spot 機群時，選擇**啟動**。

   Spot 機群請求類型為 `fleet`。請求處理完成時，會新增類型為 `instance` 的請求，其狀態為 `active` 和 `fulfilled`。

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

**建立 Spot 機群請求**  
使用 [request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html) 命令。

```
aws ec2 request-spot-fleet --spot-fleet-request-config file://config.json
```

如需組態檔案範例，請參閱 [範例 CLI 組態 Spot 機群](spot-fleet-examples.md)。

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

**建立 Spot 機群請求**  
使用 [Request-EC2SpotFleet](https://docs.aws.amazon.com/powershell/latest/reference/items/Request-EC2SpotFleet.html) cmdlet。下列範例在容量最佳化機群中啟動 Spot 執行個體。

```
Request-EC2SpotFleet `
    -SpotFleetRequestConfig_TargetCapacity 50 `
    -SpotFleetRequestConfig_AllocationStrategy "CapacityOptimized" `
    -SpotFleetRequestConfig_IamFleetRole "arn:aws:iam::123456789012:role/my-spot-fleet-role" `
    -SpotFleetRequestConfig_LaunchTemplateConfig @($launchConfig)
```

如下所示，定義啟動組態，設定所需啟動範本與覆寫屬性。如需組態範例，請參閱 [範例 CLI 組態 Spot 機群](spot-fleet-examples.md)。

```
$lcSpec = Amazon.EC2.Model.FleetLaunchTemplateSpecification
# To do - Set FleetLaunchTemplateSpecification properties
$lcOverrides = New-Object Amazon.EC2.Model.LaunchTemplateOverrides
# To do - Set LaunchTemplateOverrides properties
$launchConfig = New-Object Amazon.EC2.Model.LaunchTemplateConfig
$launchConfig.LaunchTemplateSpecification $lcSpec
$launchConfig.Overrides @($lcOverrides)
```

------

## 建立 Spot 機群，可取代運作狀態不佳的 Spot 執行個體
<a name="spot-fleet-health-checks"></a>

Spot Fleet 會每兩分鐘定期檢查機群中 Spot 執行個體的運作狀態。執行個體的運作狀態會是 `healthy` 或 `unhealthy`。

Spot Fleet 會根據 Amazon EC2 提供的狀態檢查資訊，來判定執行個體的運作狀態。如果執行個體狀態檢查或系統狀態檢查等運作狀態檢查，出現連續三次為 `unhealthy`，則該執行個體即為 `impaired`。如需詳細資訊，請參閱 [Amazon EC2 執行個體的狀態檢查](monitoring-system-instance-status-check.md)。

您可以設定機群以取代運作狀態不佳的 競價型執行個體。啟用運作狀態檢查取代後，Spot 執行個體會在被報告為 `unhealthy` 時被取代。當取代一個狀態不佳的 Spot 執行個體時，機群可能會低於其目標容量長達幾分鐘。

**要求**
+ 運作狀態檢查替代僅支援維持目標容量的 Spot Fleets (類型 `maintain` 的機群)，不支援一次性的 Spot Fleets (類型 `request` 的機群)。
+ 運作狀態檢查取代僅支援 競價型執行個體。此功能不支援 隨需執行個體。
+ 您可以設定 Spot Fleet，只在建立執行個體時取代狀況不良的執行個體。
+ 使用者只有在擁有呼叫 `ec2:DescribeInstanceStatus` 動作的許可時，才能使用運作狀態檢查取代功能。

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

**設定 Spot 機群以取代運作狀態不佳的 Spot 執行個體**

1. 遵循下列步驟，在 [使用已定義的參數建立 Spot 機群請求](#create-spot-fleet-advanced) 中建立 Spot 機群。

1. 若要設定機群以取代運作狀態不佳的 Spot 執行個體，請展開**其他啟動參數**，然後在**運作狀態檢查**下，選取**取代運作狀態不佳的執行個體**。若要啟用此選項，首先必須選擇**維護目標容量**。

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

**設定 Spot 機群以取代運作狀態不佳的 Spot 執行個體**  
使用 [request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html) 命令並搭配 `SpotFleetRequestConfig` 的 `ReplaceUnhealthyInstances` 屬性。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "lowestPrice",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "TargetCapacity": 10,
        "ReplaceUnhealthyInstances": true
    }
}
```

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

**設定 Spot 機群請求以取代運作狀態不佳的 Spot 執行個體**  
使用 [Request-EC2SpotFleet](https://docs.aws.amazon.com/powershell/latest/reference/items/Request-EC2SpotFleet.html) cmdlet 搭配 `-SpotFleetRequestConfig_ReplaceUnhealthyInstance` 參數。

```
-SpotFleetRequestConfig_ReplaceUnhealthyInstance $true
```

------

# 標記新的或現有的 Spot 機群請求及其啟動的執行個體和磁碟區
<a name="tag-spot-fleet"></a>

為便於將 Spot 機群請求及其啟動的執行個體和磁碟區分類並進行管理，您可以利用自訂中繼資料來標記這些請求。您可以在建立 Spot Fleet 請求時或之後將標記指派給請求。同樣地，您可以在機群啟動執行個體和磁碟區時或之後，將標籤指派給執行個體和磁碟區。

當您標記機群請求時，由機群啟動的執行個體和磁碟區不會自動加上標記。您需要明確標記由機群啟動的執行個體和磁碟區。您可以選擇僅將標籤指派給機群請求，或僅指派給機群啟動的執行個體，或僅指派給連接至機群啟動之執行個體的磁碟區，或指派給前述所有項目。

**注意**  
您只能為連接至隨需執行個體的磁碟區加標籤。您無法為連接至 競價型執行個體 的磁碟區加標籤。

您可以使用 Amazon EC2 主控台或命令列工具來指派標籤。

如需標籤運作方式的詳細資訊，請參閱[標記您的 Amazon EC2 資源](Using_Tags.md)。

**Topics**
+ [必要條件](#tag-spot-fleet-prereqs)
+ [標記新的 Spot Fleet 以及執行個體和其啟動的磁碟區](#tag-new-spot-fleet-and-resources)
+ [標記現有 Spot Fleet](#tag-existing-spot-fleet)
+ [檢視 Spot Fleet 請求標籤](#view-spot-fleet-tags)

## 必要條件
<a name="tag-spot-fleet-prereqs"></a>

授予使用者標記資源的許可。如需詳細資訊，請參閱[範例：標籤資源](ExamplePolicies_EC2.md#iam-example-taggingresources)。

**授予使用者標記資源的許可**  
建立包含下列項目的 IAM 政策：
+ `ec2:CreateTags` 動作。這會授予使用者建立標籤的許可。
+ `ec2:RequestSpotFleet` 動作。這會授予使用者建立 Spot 機群請求的許可。
+ 對於 `Resource`，您必須指定 `"*"`。這可讓使用者標記所有資源類型。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "TagSpotFleetRequest",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags",
                "ec2:RequestSpotFleet"
            ],
            "Resource": "*"
        }
    ]
}
```

------

**重要**  
我們目前不支援 `spot-fleet-request` 資源的資源層級許可。如果您指定 `spot-fleet-request` 作為資源，當您嘗試標記機群時，會收到未經授權的例外狀況。下列範例說明如何*不要*設定政策。  

```
{
    "Effect": "Allow",
    "Action": [
        "ec2:CreateTags",
        "ec2:RequestSpotFleet"
    ],
    "Resource": "arn:aws:ec2:us-east-1:111122223333:spot-fleet-request/*"
}
```

若要提供存取權，請新增權限至您的使用者、群組或角色：
+ 中的使用者和群組 AWS IAM Identity Center：

  建立權限合集。請按照《*AWS IAM Identity Center 使用者指南*》中的[建立權限合集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)說明進行操作。
+ 透過身分提供者在 IAM 中管理的使用者：

  建立聯合身分的角色。遵循《*IAM 使用者指南*》的[為第三方身分提供者 (聯合) 建立角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)中的指示。
+ IAM 使用者：
  + 建立您的使用者可擔任的角色。請按照《*IAM 使用者指南*》的[為 IAM 使用者建立角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)中的指示。
  + (不建議) 將政策直接附加至使用者，或將使用者新增至使用者群組。請遵循《*IAM 使用者指南*》的[新增許可到使用者 (主控台)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) 中的指示。

## 標記新的 Spot Fleet 以及執行個體和其啟動的磁碟區
<a name="tag-new-spot-fleet-and-resources"></a>

**若要標記新的 Spot 機群請求及其使用主控台啟動的執行個體和磁碟區**

1. 遵循[使用已定義的參數建立 Spot 機群請求](create-spot-fleet.md#create-spot-fleet-advanced)程序。

1. 新增標籤的方式取決於您是手動設定機群，還是使用啟動範本。
   + 如果您是手動設定機群，請執行下列動作：

     若要新增標籤，請展開**其他啟動參數**，選擇**新增標籤**，然後輸入標籤鍵和值。針對每個標籤，重複執行上述動作。

     對於每個標籤，您可以標記 Spot Fleet 請求和具有相同標籤的執行個體。若要標記兩者，請確定已同時選取**執行個體**和**機群**。若只要標記 Spot Fleet 請求，請清除 **Instances** (執行個體)。若只要標記由機群啟動的執行個體，請清除 **Fleet** (機群)。
**注意**  
當您手動設定機群時，並沒有標記磁碟區的選項。磁碟區標籤僅支援連接至 隨需執行個體 的磁碟區。當您手動設定機群時，無法指定隨需執行個體。
   + 如果您是使用啟動範本，請執行下列動作：

     若要將標籤新增至機群請求，請在**標籤**下選擇**建立標籤**，然後輸入標籤鍵和值。針對每個標籤，重複執行上述動作。

     若要標記機群中的資源，您必須在[啟動範本](create-launch-template.md)中指定標籤。

**使用 標記新的 Spot Fleet 請求及其啟動的執行個體和磁碟區 AWS CLI**  
若要在建立 Spot Fleet 請求時加上標記，並在機群啟動執行個體和磁碟區時給它們加上標記，請依下列方式設定 Spot Fleet 請求組態：

**Spot Fleet 請求標籤：**
+ 在 `SpotFleetRequestConfig` 中指定 Spot Fleet 請求的標籤。
+ 對於 `ResourceType`，請指定 `spot-fleet-request`。若指定其他值，機群請求將會失敗。
+ 對於 `Tags`，指定金鑰值對。您可以指定多個金鑰值對。

**執行個體標籤：**
+ 在 `LaunchSpecifications` 中指定執行個體的標籤。
+ 對於 `ResourceType`，請指定 `instance`。若指定其他值，機群請求將會失敗。
+ 對於 `Tags`，指定金鑰值對。您可以指定多個金鑰值對。

  或者，您可以在 Spot Fleet 請求中參照的[啟動範本](create-launch-template.md)中，指定執行個體的標籤。

**磁碟區標籤：**
+ 在 Spot Fleet 請求中參照的[啟動範本](create-launch-template.md)中，指定磁碟區的標籤。不支援在 `LaunchSpecifications` 中標記磁碟區。

在下面的例子中，Spot Fleet 請求標記了兩個標籤：Key=Environment and Value=Production 和 Key=Cost-Center and Value=123。由機群啟動的執行個體標記了一個標籤 (這與 Spot Fleet 請求的標籤之一相同)：Key=Cost-Center and Value=123。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::111122223333:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchSpecifications": [
            {
                "ImageId": "ami-0123456789EXAMPLE",
                "InstanceType": "c4.large",
                "TagSpecifications": [
                    {
                        "ResourceType": "instance",
                        "Tags": [
                            {
                                "Key": "Cost-Center",
                                "Value": "123"
                            }
                        ]
                    }
                ]
            }
        ],
        "SpotPrice": "5",
        "TargetCapacity": 2,
        "TerminateInstancesWithExpiration": true,
        "Type": "maintain",
        "ReplaceUnhealthyInstances": true,
        "InstanceInterruptionBehavior": "terminate",
        "InstancePoolsToUseCount": 1,
        "TagSpecifications": [
            {
                "ResourceType": "spot-fleet-request",
                "Tags": [
                    {
                        "Key": "Environment",
                        "Value":"Production"
                    },
                    {
                        "Key": "Cost-Center",
                        "Value":"123"
                    }
                ]
            }
        ]
    }
}
```

**使用 標記 Spot 機群啟動的執行個體 AWS CLI**  
若要在機群啟動執行個體時加上標記，您可以在 Spot Fleet 請求中參照的[啟動範本](create-launch-template.md)中指定標籤，或者您可以指定 Spot Fleet 請求組態中的標籤，如下所示：
+ 在 `LaunchSpecifications` 中指定執行個體的標籤。
+ 對於 `ResourceType`，請指定 `instance`。若指定其他值，機群請求將會失敗。
+ 對於 `Tags`，指定金鑰值對。您可以指定多個金鑰值對。

在下列範例中，機群啟動的執行個體均標記了一個標籤：Key=Cost-Center and Value=123。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::111122223333:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchSpecifications": [
            {
                "ImageId": "ami-0123456789EXAMPLE",
                "InstanceType": "c4.large",
                "TagSpecifications": [
                    {
                        "ResourceType": "instance",
                        "Tags": [
                            {
                                "Key": "Cost-Center",
                                "Value": "123"
                            }
                        ]
                    }
                ]
            }
        ],
        "SpotPrice": "5",
        "TargetCapacity": 2,
        "TerminateInstancesWithExpiration": true,
        "Type": "maintain",
        "ReplaceUnhealthyInstances": true,
        "InstanceInterruptionBehavior": "terminate",
        "InstancePoolsToUseCount": 1
    }
}
```

**使用 標記連接至 Spot 機群啟動之隨需執行個體的磁碟區 AWS CLI**  
若要在機群建立磁碟區時標記磁碟區，請在 Spot Fleet 請求中參考的[啟動範本](create-launch-template.md)中指定標籤。

**注意**  
磁碟區標籤僅支援連接至 隨需執行個體 的磁碟區。您無法為連接至 競價型執行個體 的磁碟區加標籤。  
不支援在 `LaunchSpecifications` 中標記磁碟區。

## 標記現有 Spot Fleet
<a name="tag-existing-spot-fleet"></a>

**若要使用主控台標記現有的 Spot Fleet 請求**

建立 Spot 機群請求後，您可以使用主控台為機群請求新增標籤。

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

1. 在瀏覽窗格中，選擇 **Spot 請求**。

1. 選取您的 Spot Fleet 請求。

1. 選擇**標籤**索引標籤，然後選擇**建立標籤**。

**使用 標記現有的 Spot Fleet 請求 AWS CLI**  
使用 [create-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-tags.html) 命令來標記現有資源。在下面的例子中，現有的 Spot Fleet 請求會使用 Key=purpose 和 Value=test 標籤。

```
aws ec2 create-tags \
    --resources sfr-11112222-3333-4444-5555-66666EXAMPLE \
    --tags Key=purpose,Value=test
```

## 檢視 Spot Fleet 請求標籤
<a name="view-spot-fleet-tags"></a>

**若要使用主控台檢視 Spot Fleet 請求標籤**

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

1. 在瀏覽窗格中，選擇 **Spot 請求**。

1. 選取您的 Spot Fleet 請求並選擇 **Tags** (標籤)。

**若要描述 Spot Fleet 請求標籤**  
使用 [describe-tag](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-tags.html) 命令檢視指定資源的標籤。在下面的範例中，會描述指定 Spot Fleet 請求的標籤。

```
aws ec2 describe-tags \
    --filters "Name=resource-id,Values=sfr-11112222-3333-4444-5555-66666EXAMPLE"
```

```
{
    "Tags": [
        {
            "Key": "Environment",
            "ResourceId": "sfr-11112222-3333-4444-5555-66666EXAMPLE",
            "ResourceType": "spot-fleet-request",
            "Value": "Production"
        },
        {
            "Key": "Another key",
            "ResourceId": "sfr-11112222-3333-4444-5555-66666EXAMPLE",
            "ResourceType": "spot-fleet-request",
            "Value": "Another value"
        }
    ]
}
```

您也可以透過描述 Spot Fleet 請求來檢視 Spot Fleet 請求的標籤。

使用 [describe-spot-fleet-requests](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-spot-fleet-requests.html) 命令來檢視指定 Spot Fleet 請求的組態，這包括針對機群請求指定的任何標籤。

```
aws ec2 describe-spot-fleet-requests \
    --spot-fleet-request-ids sfr-11112222-3333-4444-5555-66666EXAMPLE
```

```
{
    "SpotFleetRequestConfigs": [
        {
            "ActivityStatus": "fulfilled",
            "CreateTime": "2020-02-13T02:49:19.709Z",
            "SpotFleetRequestConfig": {
                "AllocationStrategy": "capacityOptimized",
                "OnDemandAllocationStrategy": "lowestPrice",
                "ExcessCapacityTerminationPolicy": "Default",
                "FulfilledCapacity": 2.0,
                "OnDemandFulfilledCapacity": 0.0,
                "IamFleetRole": "arn:aws:iam::111122223333:role/aws-ec2-spot-fleet-tagging-role",
                "LaunchSpecifications": [
                    {
                        "ImageId": "ami-0123456789EXAMPLE",
                        "InstanceType": "c4.large"
                    }
                ],
                "TargetCapacity": 2,
                "OnDemandTargetCapacity": 0,
                "Type": "maintain",
                "ReplaceUnhealthyInstances": false,
                "InstanceInterruptionBehavior": "terminate"
            },
            "SpotFleetRequestId": "sfr-11112222-3333-4444-5555-66666EXAMPLE",
            "SpotFleetRequestState": "active",
            "Tags": [
                {
                    "Key": "Environment",
                    "Value": "Production"
                },
                {
                    "Key": "Another key",
                    "Value": "Another value"
                }
            ]
        }
    ]
}
```

# 說明 Spot 機群請求、其執行個體和事件歷史記錄
<a name="manage-spot-fleet"></a>

您可以說明您的 Spot 機群組態、您 Spot 機群中的執行個體，以及您 Spot 機群的事件歷史記錄。

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

**說明您的 Spot 機群**

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

1. 在瀏覽窗格中，選擇 **Spot 請求**。

1. 選取您的 Spot Fleet 請求。ID 開頭為 **sfr-**。若要查看組態的詳細資訊，請選擇**描述**。

1. 若要列出 Spot Fleet 的 Spot 執行個體，請選擇 **Instances** (執行個體)。

1. 若要檢視 Spot Fleet 的歷史記錄，請選擇 **History** (歷史記錄)。

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

**說明 Spot 機群請求標籤**  
使用 [describe-spot-fleet-requests](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-spot-fleet-requests.html) 命令。

```
aws ec2 describe-spot-fleet-requests \
    --spot-fleet-request-ids sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
```

**說明指定 Spot 機群請求的執行中執行個體**  
使用 [describe-fleet-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-spot-fleet-instances.html) 命令。

```
aws ec2 describe-spot-fleet-instances \
    --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
```

**說明指定 Spot 機群請求的事件歷史記錄**  
使用 [describe-spot-fleet-request-history](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-spot-fleet-request-history.html) 命令。

```
aws ec2 describe-spot-fleet-request-history \
    --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --start-time 2024-05-18T00:00:00Z
```

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

**說明 Spot 機群請求標籤**  
使用 [Get-EC2SpotFleetRequest](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2SpotFleetRequest.html) cmdlet。

```
Get-EC2SpotFleetRequest
```

**說明指定 Spot 機群請求的執行中執行個體**  
使用 [Get-EC2SpotFleetInstance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2SpotFleetInstance.html) cmdlet。

```
Get-EC2SpotFleetInstance `
    -SpotFleetRequestId "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE"
```

**說明指定 Spot 機群請求的事件歷史記錄**  
使用 [Get-EC2SpotFleetRequestHistory](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2SpotFleetRequestHistory.html) cmdlet。

```
Get-EC2SpotFleetRequestHistory `
    -SpotFleetRequestId "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -UtcStartTime 2024-05-18T00:00:00Z
```

------

# 修改 Spot Fleet 請求
<a name="modify-spot-fleet"></a>

您可以修改作用中的 Spot Fleet 請求，來完成下列任務：
+ 增加總目標容量和隨需部分
+ 減少總目標容量和隨需部分

當您增加總目標容量時，Spot 機群會根據其 Spot 機群請求的[配置策略](ec2-fleet-allocation-strategy.md)，啟動額外的 Spot 執行個體。當您增加隨需部分時，Spot Fleet 會啟動額外的隨需執行個體。

當您減少總目標容量時，Spot 機群會取消超出新目標容量的所有開放請求。您可以請求 Spot Fleet 終止 Spot 執行個體，直到機群大小達到新的目標容量。如果分配策略為 `diversified`，則 Spot Fleet 會在集區中終止執行個體。或者，您可以請求該 Spot Fleet 將機群保持為目前的大小，但不能取代任何中斷的或您手動終止的 Spot 執行個體。

**考量事項**
+ 您無法修改一次性的 Spot Fleet 請求。當您建立 Spot Fleet 請求時，如果已選取 **Maintain target capacity** (維護目標容量)，則只能修改 Spot Fleet 請求。
+ 當 Spot Fleet 因為目標容量減少而終止執行個體時，執行個體會收到 Spot 執行個體中斷通知。

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

**修改 Spot 機群請求**

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

1. 在瀏覽窗格中，選擇 **Spot 請求**。

1. 選取您的 Spot Fleet 請求。

1. 選擇**動作**和**修改目標容量**。

1. 在**修改目標容量**中，執行下列動作：

   1. 輸入新的目標容量和隨需部分。

   1. (選用) 如果您正在減少目標容量，但希望叢集保持目前的大小，請清除**終止執行個體**。

   1. 選擇**提交**。

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

**修改 Spot 機群請求**  
請使用 [modify-spot-fleet-request](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-spot-fleet-request.html) 命令更新指定 Spot Fleet 請求的目標容量。

```
aws ec2 modify-spot-fleet-request \
    --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --target-capacity 20
```

如果要減少所指定 Spot Fleet 的目標容量，而不會因此終止任何 Spot 執行個體，您可以如下修改先前的命令：

```
aws ec2 modify-spot-fleet-request \
    --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --target-capacity 10 \
    --excess-capacity-termination-policy NoTermination
```

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

**修改 Spot 機群請求**  
使用 [Edit-EC2SpotFleetRequest](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2SpotFleetRequest.html) cmdlet，更新指定 Spot 機群請求的目標容量。

```
Edit-EC2SpotFleetRequest `
    -SpotFleetRequestId "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -TargetCapacity 20
```

如果要減少所指定 Spot Fleet 的目標容量，而不會因此終止任何 Spot 執行個體，您可以如下修改先前的命令：

```
Edit-EC2SpotFleetRequest `
    -SpotFleetRequestId "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -TargetCapacity 20 `
    -ExcessCapacityTerminationPolicy "NoTermination"
```

------

# 取消 (刪除) Spot 機群請求
<a name="cancel-spot-fleet"></a>

如果不再需要 Spot 機群，則可取消 Spot 機群請求，即會刪除請求。取消機群請求後，也會取消與機群相關的所有 Spot 請求，因此不會啟動新的 Spot 執行個體。

刪除時 Spot 機群請求時，必須指定是否也要終止其全部執行個體。這包含隨需執行個體和 Spot 執行個體。

**警告**  
**終止執行個體的操作為永久性且無法復原。**  
終止執行個體後，您將無法再連線至該執行個體，且無法復原該執行個體。所有設定為終止時刪除的已連接 Amazon EBS 磁碟區，也會被永久刪除且無法復原。儲存在執行個體儲存體磁碟區的所有資料將永久遺失。如需詳細資訊，請參閱[終止執行個體的運作方式](how-ec2-instance-termination-works.md)。  
在終止執行個體之前，確認您已將終止使用後需要保留的全部資料備份至持久性儲存體。

如果指定在刪除機群請求時必須終止執行個體，則機群請求會進入 `cancelled_terminating` 狀態。否則會進入 `cancelled_running` 狀態，且執行個體會一直執行直到中斷或您手動終止。

**限制**
+ 您可以在單一請求中取消多達 100 個機群。如果您超過指定的數量，則不會取消任何機群。

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

**取消 (刪除) Spot 機群請求**

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

1. 在瀏覽窗格中，選擇 **Spot 請求**。

1. 選取您的 Spot Fleet 請求。

1. 選擇**動作**、**取消請求**。

1. 在**取消 Spot 請求**對話方塊中，執行下列操作：

   1. 若要在取消 Spot 機群請求的同時終止關聯的執行個體，請將**終止執行個體**核取方塊保持為選取狀態。若要取消 Spot 機群請求，而不終止關聯的執行個體，請取消勾選**終止執行個體**核取方塊。

   1. 選擇**確認**。

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

**取消 (刪除) Spot 機群請求並終止其執行個體**  
使用 [cancel-spot-fleet-requests](https://docs.aws.amazon.com/cli/latest/reference/ec2/cancel-spot-fleet-requests.html) 命令並搭配 `--terminate-instances` 選項。

```
aws ec2 cancel-spot-fleet-requests \
    --spot-fleet-request-ids sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --terminate-instances
```

以下為範例輸出。

```
{
    "SuccessfulFleetRequests": [
        {
            "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE",
            "CurrentSpotFleetRequestState": "cancelled_terminating",
            "PreviousSpotFleetRequestState": "active"
        }
    ],
    "UnsuccessfulFleetRequests": []
}
```

**取消 (刪除) Spot 機群請求，而不終止其執行個體**  
請改用 `--no-terminate-instances` 選項來修改之前的範例。

```
aws ec2 cancel-spot-fleet-requests \
    --spot-fleet-request-ids sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --no-terminate-instances
```

以下為範例輸出。

```
{
    "SuccessfulFleetRequests": [
        {
            "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE",
            "CurrentSpotFleetRequestState": "cancelled_running",
            "PreviousSpotFleetRequestState": "active"
        }
    ],
    "UnsuccessfulFleetRequests": []
}
```

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

**取消 (刪除) Spot 機群請求並終止其執行個體**  
使用 [Stop-EC2SpotFleetRequest](https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2SpotFleetRequest.html) cmdlet 搭配 `-TerminateInstance` 參數。

```
Stop-EC2SpotFleetRequest `
    -SpotFleetRequestId "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -TerminateInstance $true
```

**取消 (刪除) Spot 機群請求，而不終止其執行個體**  
透過變更 `-TerminateInstance` 參數的值來修改之前的範例。

```
Stop-EC2SpotFleetRequest `
    -SpotFleetRequestId "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -TerminateInstance $false
```

------

# 了解 Spot 機群的自動擴展
<a name="spot-fleet-automatic-scaling"></a>

*自動擴展*讓您的 Spot 機群可根據需求增加或減少其目標容量。Spot 機群可以利用自動擴展，在指定的範圍內啟動執行個體 (擴展) 或終止執行個體 (縮減)，以回應一個或多個擴展政策。

透過結合 Amazon EC2、Amazon CloudWatch 和 Application Auto Scaling API 可實現 Spot Fleet 的自動擴展。Spot Fleet 請求是使用 Amazon EC2 建立的，警示是使用 CloudWatch 建立的，而擴展政策是使用 Application Auto Scaling 建立的。

**自動擴展的類型**

Spot Fleet 支援以下類型的自動擴展：
+ [目標追蹤擴展](spot-fleet-target-tracking.md) – 透過為特定指標設定目標值，增加或減少機群目前的容量。這類似於您家中溫控器維持溫度的方式 — 您只要選擇所需溫度，溫控器就會完成其餘的動作。
+ [步進擴展](spot-fleet-step-scaling.md) – 根據一組擴展調整 (也稱為步進調整)，來增加或減少機群目前的容量，其會根據警示違規的程度而有不同。
+ [排程的擴展](spot-fleet-scheduled-scaling.md) – 根據日期和時間，來增加或減少機群目前的容量。

## 考量事項
<a name="considerations-for-spot-fleet-automatic-scaling"></a>

針對您的 Spot 機群使用自動擴展時，請考慮下列事項：
+ **執行個體權重** – 如果您要使用[執行個體權重](ec2-fleet-instance-weighting.md)，請記住，Spot 機群可視需要超過目標容量。已實現的容量可以是浮點數，但目標容量必須是整數，因此 Spot Fleet 會四捨五入為下一個整數。如果檢視警示觸發時擴展政策的結果，您必須將這些行為列入考量。例如，假設目標容量為 30、已實現的容量為 30.1，則規模調整政策會減掉 1。當警示觸發時，自動擴展程序會從 30.1 減掉 1 而得出 29.1，然後再四捨五入為 30，因此不需採取規模調整動作。在另一個範例中，假設選擇了 2、4 和 8 的執行個體權重，而目標容量為 10，但沒有可用的權重 2 執行個體，因此 Spot Fleet 針對已實現的容量 12 佈建權重為 4 和 8 的執行個體。如果規模調整政策將目標容量減少了 20%，而且警示已觸發，則自動擴展程序會從 12 減掉 12\$10.2 而得出 9.6，然後再四捨五入為 10，因此不需採取規模調整動作。
+ **冷卻時間** – 您為 Spot 機群建立的擴展政策支援冷卻時間。這是在擴展活動完成之後，先前的觸發相關擴展活動還能影響未來擴展活動的秒數。如果使用向外擴展政策，則在冷卻時間仍有效時，由先前起始冷卻時間的向外擴展事件所新增的容量，會在計算時列入下次向外擴展所需容量的一部分。這種做法的目的是連續的向外擴展 (但並非過度)。如果使用向內擴展政策，在冷卻時間尚未到期之前，會利用此期間來封鎖請求中後續的擴展。這種做法的目的是保守地進行擴展，以保障應用程式的可用性。不過，如果在向內擴展後的冷卻時間內，有另一個警示觸發了向外擴展政策，則自動擴展功能會立即擴展可擴展的目標。
+ **使用詳細監控** – 建議您依據每分鐘更新的執行個體指標進行擴展，因為這樣能更快速地響應使用率變更。5 分鐘頻率的擴展指標可能會導致較慢的回應時間和用到過時的指標資料進行擴展。若要將執行個體的指標資料每隔 1 分鐘傳送至 CloudWatch，您必須指定啟用執行個體的詳細監控。如需詳細資訊，請參閱[管理 EC2 執行個體的詳細監控](manage-detailed-monitoring.md)及[使用已定義的參數建立 Spot 機群請求](create-spot-fleet.md#create-spot-fleet-advanced)。
+ **AWS CLI** – 如果您使用 AWS CLI 來設定 Spot Fleet 的擴展，您將使用[應用程式自動擴展](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling)命令。

# Spot Fleet 自動擴展所需的 IAM 許可
<a name="spot-fleet-auto-scaling-IAM"></a>

透過結合 Amazon EC2、Amazon CloudWatch 和 Application Auto Scaling API 可實現 Spot Fleet 的自動擴展。Spot Fleet 請求是使用 Amazon EC2 建立的，警示是使用 CloudWatch 建立的，而擴展政策是使用 Application Auto Scaling 建立的。除了 [Spot 機群](spot-fleet-prerequisites.md#spot-fleet-iam-users)和 Amazon EC2 所需的 IAM 許可之外，存取機群擴展設定的使用者還必須擁有支援自動擴展服務的適當許可。

若要針對 Spot 機群使用自動擴展，使用者必須具備許可，才能使用下列範例政策中所顯示的各項動作。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "application-autoscaling:*",
                "ec2:DescribeSpotFleetRequests",
                "ec2:ModifySpotFleetRequest",
                "cloudwatch:DeleteAlarms",
                "cloudwatch:DescribeAlarmHistory",
                "cloudwatch:DescribeAlarms",
                "cloudwatch:DescribeAlarmsForMetric",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics",
                "cloudwatch:PutMetricAlarm",
                "cloudwatch:DisableAlarmActions",
                "cloudwatch:EnableAlarmActions",
                "iam:CreateServiceLinkedRole",
                "sns:CreateTopic",
                "sns:Subscribe",
                "sns:Get*",
                "sns:List*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

您也可以建立自己的 IAM 政策，以便具有更精細的 Application Auto Scaling API 呼叫許可。如需詳細資訊，請參閱「Application Auto Scaling 使用者指南」[https://docs.aws.amazon.com/autoscaling/application/userguide/auth-and-access-control.html](https://docs.aws.amazon.com/autoscaling/application/userguide/auth-and-access-control.html)中*適用於 Application Auto Scaling 的 Identity and Access Management*。

Application Auto Scaling 服務也需要描述 Spot Fleet 和 CloudWatch 警示的許可，以及代表您修改 Spot Fleet 目標容量的許可。如果您為 Spot Fleet 啟用自動擴展，則會建立名為 `AWSServiceRoleForApplicationAutoScaling_EC2SpotFleetRequest` 的服務連結角色。此服務連結角色會授與 Application Auto Scaling 許可以描述政策的警示、監控機群目前的容量，以及修改機群的容量。Application Auto Scaling 的原始受管 Spot Fleet 角色為 `aws-ec2-spot-fleet-autoscale-role`，但已不再需要。服務連結的角色預設為 Application Auto Scaling。如需詳細資訊，請參閱「Application Auto Scaling 使用者指南」**中的[適用於 Application Auto Scaling 的服務連結角色](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html)。

# 目標追蹤擴展：透過為特定指標設定目標值，擴展 Spot 機群
<a name="spot-fleet-target-tracking"></a>

您可以使用目標追蹤擴展，藉由選取指標及設定目標值來建立目標追蹤擴展政策。接著，Spot 機群會建立及管理可觸發擴展政策的 CloudWatch 警示，並根據選擇的指標和目標值來計算擴展。擴展政策會視需要新增或移除執行個體來調整容量，讓指標保持在等於或接近指定目標值。目標追蹤政策不僅會讓指標保持在接近目標值，還會進行調整，以配合指標中因負載模式波動而造成的波動，並將快速容量波動降到最低。

您可以為 Spot 機群建立多個目標追蹤擴展政策，但前提是每個政策都是使用不同的指標。機群會根據指定最大機群容量的政策來進行擴展。這可讓您涵蓋多個案例，以確保有足夠的容量可供您的應用程式工作負載使用。

為了確保應用程式的可用性，機群可以配合指標按比例快速地擴展規模，但是以更漸進的方式縮減規模。

當 Spot 機群因為目標容量減少而終止 Spot 執行個體時，執行個體會收到 Spot 執行個體中斷通知。

**注意**  
請勿編輯或刪除 CloudWatch 警示，Spot Fleet 管理它們用於目標追蹤擴展政策。當您刪除目標追蹤擴展政策時，Spot Fleet 會自動刪除警示。

**先決條件**
+ Spot 機群請求必須具有 `maintain` 的請求類型。類型 `request` 的請求不支援自動擴展功能。
+ 設定 [Spot Fleet 自動擴展所需的 IAM 許可](spot-fleet-auto-scaling-IAM.md)。
+ 請參閱[考量事項](spot-fleet-automatic-scaling.md#considerations-for-spot-fleet-automatic-scaling)。

**設定目標追蹤政策**

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

1. 在瀏覽窗格中，選擇 **Spot 請求**。

1. 選取您的 Spot Fleet 請求。

1. 選擇畫面底部附近的**自動擴展**索引標籤。如果您已選取 Spot 機群的連結，則沒有索引標籤；而是向下捲動至**自動擴展**區段。

1. 如果未設定自動擴展，請選擇**設定**。

1. 利用**容量擴展的範圍**來設定機群的最低和最高容量。自動擴展功能不會將機群的規模擴展到小於最低容量或大於最高容量。

1. 針對 **Policy Name (政策名稱)**，請輸入政策的名稱。

1. 選擇**目標指標**。

1. 輸入指標的**目標值**。

1. 針對**冷卻時間**，請指定一個新值 (以秒為單位) 或保留預設值。

1. (選用) 若要略過根據目前的組態建立縮減政策，請選取**停用縮減**。您可以使用不同的組態來建立向內擴展政策。

1. 選擇**儲存**。

**使用 設定目標追蹤政策 AWS CLI**

1. 使用 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 命令，將 Spot Fleet 請求註冊為可擴充的目標。

1. 使用 [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) 命令，來建立擴展政策。

# 步驟擴展：使用步驟擴展政策來擴展 Spot 機群
<a name="spot-fleet-step-scaling"></a>

如果使用步進規模調整政策，您可以指定 CloudWatch 警示來觸發規模調整程序。例如，如果想在 CPU 的利用率達到某個水準時擴展，請使用 Amazon EC2 所提供的 `CPUUtilization` 指標來建立警示。

建立步進規模調整政策時，您必須指定下列規模調整類型的其中一種：
+ **新增** – 根據指定的容量單位數量或指定的目前容量百分比，來增加機群的目標容量。
+ **移除** – 根據指定的容量單位數量或指定的目前容量百分比，來減少機群的目標容量。
+ **設定為** – 將機群的目標容量設定為指定的容量單位數量。

警示觸發時，自動擴展程序會利用已實現的容量和規模調整政策，來計算出新的目標容量，然後據以更新目標容量。例如，假設目標容量為和已實現的容量為 10，而且規模調整政策會增加 1。當警示觸發時，自動擴展程序會將 10 加上 1 而得出 11，因此 Spot Fleet 會啟動 1 個執行個體。

當 Spot 機群因為目標容量減少而終止 Spot 執行個體時，執行個體會收到 Spot 執行個體中斷通知。

**先決條件**
+ Spot 機群請求必須具有 `maintain` 的請求類型。類型 `request` 的請求不支援自動擴展功能。
+ 設定 [Spot Fleet 自動擴展所需的 IAM 許可](spot-fleet-auto-scaling-IAM.md)。
+ 思考哪些 CloudWatch 指標對您的應用程式是重要的。您可以根據 提供的指標 AWS 或您自己的自訂指標來建立 CloudWatch 警示。
+ 對於您將在擴展政策中使用的 AWS 指標，如果提供指標的服務預設不會啟用 CloudWatch 指標集合。
+ 請參閱[考量事項](spot-fleet-automatic-scaling.md#considerations-for-spot-fleet-automatic-scaling)。

**建立 CloudWatch 警示**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，展開**警示**，然後選擇**所有警示**。

1. 選擇**建立警示**。

1. 在**指定指標和條件**頁面上，選擇**選取指標**。

1. 選擇 **EC2 Spot**、**機群請求指標**，選取指標 (例如，**TargetCapacity**)，然後選擇**選取指標**。

   **指定指標和條件**頁面隨即出現，顯示您選取指標的圖形及其他資訊。

1. 針對**期間**，選擇警示的評估期間，例如 **1 分鐘**。評估警示時，每個期間都會彙整為一個資料點。
**注意**  
期間越短會建立更敏感的警示。

1. 針對**條件**，透過定義閾值條件來定義警示。例如，您可以定義一個閾值，設定每當指標值大於或等於 80% 時，即會觸發警示。

1. 在**其他組態** 下，針對**要產生警示的資料點**，指定多少資料點 (評估期間) 必須處於 ALARM 狀態才會觸發警示，例如，1 評估期間或 3 個中的 2 個評估期間。這樣建立的警示會在連續超過這麼多期間時進入 ALARM 狀態。如需詳細資訊，請參閱 *Amazon CloudWatch 使用者指南* 中的[評估警示](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarm-evaluation)。

1. 對於**遺失資料處理**，選擇其中之一個選項 (或保留預設的 **將遺失資料視為遺失**)。如需詳細資訊，請參閱「Amazon CloudWatch 使用者指南」**中的[設定 CloudWatch 警示如何處理遺失資料](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarms-and-missing-data)。

1. 選擇**下一步**。

1. (選用) 若要接收擴展事件的通知，針對**通知**，您可以選擇或建立您要用於接收通知的 Amazon SNS 主題。否則，您可以立即刪除通知，並根據需要在之後新增通知。

1. 選擇**下一步**。

1. 在**新增名稱和描述**下，輸入警示的名稱和描述，然後選擇**下一步**。

1. 選擇 **Create alarm** (建立警示)。

**為您的 Spot 機群設定步進擴展政策**

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

1. 在瀏覽窗格中，選擇 **Spot 請求**。

1. 選取您的 Spot Fleet 請求。

1. 選擇畫面底部附近的**自動擴展**索引標籤。如果您已選取 Spot 機群的連結，則沒有索引標籤；而是向下捲動至**自動擴展**區段。

1. 如果未設定自動擴展，請選擇**設定**。

1. 利用**容量擴展的範圍**來設定機群的最低和最高容量。擴展政策不會將機群的規模擴展到小於最低容量或大於最高容量。

1. 在**擴展政策**下，針對**政策類型**，選擇**步驟擴展政策**。

1. 一開始，**擴展政策**包含名為 **ScaleUp** 和 **ScaleDown** 的步驟擴展政策。您可以完成這些政策，或是選擇**移除政策**來刪除政策。您也可以選擇**新增政策**。

1. 若要定義政策，請執行下列的動作：

   1. 針對 **Policy Name (政策名稱)**，請輸入政策的名稱。

   1. 針對**政策觸發器**，選擇現有的警示，或是選擇**建立警示**來開啟 Amazon CloudWatch 主控台，然後建立警示。

   1. 針對**修改容量**，請定義要擴展的量以及步驟調整的下限與上限。您可以新增或移除特定數量的執行個體，或現有機群大小的百分比，或將機群設為確切大小。

      例如，若要建立可將機群容量增加 30% 的步驟擴展政策，請選擇**新增**，在下一個欄位中輸入 **30**，然後選擇**百分比**。根據預設，新增政策的下限為警示閾值，而上限為無限大正數 (\$1) 值。根據預設，移除政策的上限為警示閾值，而下限為無限小負數 (-) 值。

   1. (選用) 若要新增另一個步驟，請選擇**新增步驟**。

   1. 針對**冷卻時間**，請指定一個新值 (以秒為單位) 或保留預設值。

1. 選擇**儲存**。

**使用 為您的 Spot 機群設定步驟擴展政策 AWS CLI**

1. 使用 [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 命令，將 Spot Fleet 請求註冊為可擴充的目標。

1. 使用 [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) 命令，來建立擴展政策。

1. 使用 [put-metric-alarm](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/put-metric-alarm.html) 命令，來建立觸發擴展政策的警示。

# 排程擴展：依排程擴展 Spot 機群
<a name="spot-fleet-scheduled-scaling"></a>

按照排程擴展機群，讓您能夠因應可預測的需求變化，據以擴展您的應用程式。透過建立*排程動作*，您可以指示 Spot 機群在特定時間執行擴展活動。若要建立排程的動作，您必須指定現有的 Spot 機群、應該發生擴展活動的時間，以及所需的最小和最大容量。排程動作可設定為擴展一次，或依週期性排程擴展。如果您需要變更，可以編輯或刪除排程的動作。

**先決條件**
+ 只能針對現有的 Spot 機群建立排程的動作。您在建立 Spot 機群時，無法建立排程的動作。
+ Spot 機群請求必須具有 `maintain` 的請求類型。類型 `request` 的請求不支援自動擴展功能。
+ 設定 [Spot Fleet 自動擴展所需的 IAM 許可](spot-fleet-auto-scaling-IAM.md)。
+ 請參閱[考量事項](spot-fleet-automatic-scaling.md#considerations-for-spot-fleet-automatic-scaling)。

**建立一次性排程動作**

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

1. 在瀏覽窗格中，選擇 **Spot 請求**。

1. 選取您的 Spot Fleet 請求。

1. 選擇畫面底部附近的**排程擴展**索引標籤。如果您已選取 Spot 機群的連結，則沒有索引標籤；而是向下捲動至**排程擴展**區段。

1. 選擇**建立排程動作**。

1. 在**名稱** 中，為排程動作指定名稱。

1. 為**容量下限**、**容量上限**或兩者輸入一值。

1. 針對**重複**，選擇**一次**。

1. (選用) 針對**開始時間**、**結束時間**或兩者選擇日期和時間。

1. 選擇**建立**。

**若要建立週期性排程動作**

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

1. 在瀏覽窗格中，選擇 **Spot 請求**。

1. 選取您的 Spot Fleet 請求。

1. 選擇畫面底部附近的**排程擴展**索引標籤。如果您已選取 Spot 機群的連結，則沒有索引標籤；而是向下捲動至**排程擴展**區段。

1. 在**名稱** 中，為排程動作指定名稱。

1. 為**容量下限**、**容量上限**或兩者輸入一值。

1. 針對**重複**，選擇其中一個預先定義的排程 (例如，**每天**)，或選擇 **自訂**，然後輸入 Cron 表達式。如需排程擴展所支援 Cron 表達式的詳細資訊，請參閱「Amazon EventBridge 使用者指南」**中的 [Cron 表達式](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-scheduled-rule-pattern.html#eb-cron-expressions)。

1. (選用) 針對**開始時間**、**結束時間**或兩者選擇日期和時間。

1. 選擇**提交**。

**編輯排程動作**

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

1. 在瀏覽窗格中，選擇 **Spot 請求**。

1. 選取您的 Spot Fleet 請求。

1. 選擇畫面底部附近的**排程擴展**索引標籤。如果您已選取 Spot 機群的連結，則沒有索引標籤；而是向下捲動至**排程擴展**區段。

1. 選取排程動作，然後選擇**動作**、**編輯**。

1. 執行需要的變更，然後選擇**提交**。

**刪除排程動作**

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

1. 在瀏覽窗格中，選擇 **Spot 請求**。

1. 選取您的 Spot Fleet 請求。

1. 選擇畫面底部附近的**排程擴展**索引標籤。如果您已選取 Spot 機群的連結，則沒有索引標籤；而是向下捲動至**排程擴展**區段。

1. 選取排程動作，然後選擇**動作**、**刪除**。

1. 出現確認提示時，請選擇 **Delete (刪除)**。

**使用 管理排程擴展 AWS CLI**

使用下列命令：
+ [put-scheduled-action](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scheduled-action.html)
+ [describe-scheduled-actions](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scheduled-actions.html)
+ [delete-scheduled-action](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/delete-scheduled-action.html)

# 監控您的 EC2 機群或 Spot 機群
<a name="fleet-monitor"></a>

EC2 機群或 Spot 機群的有效監控，是維持最佳效能並確保可靠性的必要條件。有各種工具可協助您達成此目標，包括本主題所涵蓋的 Amazon CloudWatch 和 Amazon EventBridge。

您可以使用 CloudWatch 收集和追蹤指標、設定警示及自動對機群狀態的變更做出反應。

您可以使用 EventBridge 透過程式設計方式監控和回應機群發出的事件。透過在 EventBridge 中定義規則，您可以自動化對特定機群事件的回應，例如執行個體終止或機群狀態變更，從而提高您的營運效率。

**Topics**
+ [使用 CloudWatch 監控 EC2 機群或 Spot 機群](ec2-fleet-cloudwatch-metrics.md)
+ [使用 Amazon EventBridge 監控和以程式設計方式回應 EC2 機群或 Spot 機群發出的事件](monitor-ec2-fleet-using-eventbridge.md)

# 使用 CloudWatch 監控 EC2 機群或 Spot 機群
<a name="ec2-fleet-cloudwatch-metrics"></a>

您可以使用本節所述的 Amazon CloudWatch 指標來監控 EC2 機群或 Spot 機群。

**重要**  
為確保準確性，建議您在使用這些指標時，啟用詳細監控功能。如需詳細資訊，請參閱[管理 EC2 執行個體的詳細監控](manage-detailed-monitoring.md)。

如需使用 CloudWatch 的詳細資訊，請參閱 [使用 CloudWatch 監控您的執行個體](using-cloudwatch.md)。

## EC2 機群和 Spot 機群指標
<a name="ec2-fleet-metrics"></a>

`AWS/EC2Spot` 命名空間包含您機群的下列指標，加上機群中 Spot 執行個體的 CloudWatch 指標。如需詳細資訊，請參閱[執行個體指標](viewing_metrics_with_cloudwatch.md#ec2-cloudwatch-metrics)。


| 指標 | Description | 
| --- | --- | 
| AvailableInstancePoolsCount |  機群請求中指定的 Spot 容量集區。 單位：Count  | 
| BidsSubmittedForCapacity |  Amazon EC2 已提交機群請求的容量。 單位：Count  | 
| EligibleInstancePoolCount |  在機群請求中指定的 Spot 容量集區，Amazon EC2 可在其中實現請求。在您願意為 Spot 執行個體支付的最高價格低於 Spot 價格或 Spot 價格高於隨需執行個體價格的集區中，Amazon EC2 不會實現請求。 單位：計數  | 
| FulfilledCapacity |  Amazon EC2 已履行的容量。 單位：Count  | 
| MaxPercentCapacityAllocation |  在機群請求中指定的所有機群集區的 `PercentCapacityAllocation` 的最大值。 單位：百分比  | 
| PendingCapacity |  `TargetCapacity` 與 `FulfilledCapacity` 之間的差異。 單位：計數  | 
| PercentCapacityAllocation |  已為指定維度的 Spot 容量集區配置的容量。若要取得所有 Spot 容量集區所記錄的最大值，請使用 `MaxPercentCapacityAllocation`。 單位：百分比  | 
| TargetCapacity |  機群請求的目標容量。 單位：Count  | 
| TerminatingCapacity |  由於佈建容量而終止的容量大於目標容量。 單位：計數  | 

如果指標的測量單位是 `Count`，則最有用的統計資訊是 `Average`。

## EC2 機群和 Spot 機群維度
<a name="ec2-fleet-dimensions"></a>

若要篩選機群的資料，請使用下列維度。


| 維度 | 描述 | 
| --- | --- | 
| AvailabilityZone |  依可用區域篩選資料。  | 
| FleetRequestId |  依機群請求篩選資料。  | 
| InstanceType |  依執行個體類型篩選資料。  | 

## 檢視 EC2 機群或 Spot 機群的 CloudWatch 指標
<a name="view-ec2-fleet-metrics"></a>

您可以使用 Amazon CloudWatch 主控台來檢視機群的 CloudWatch 指標。這些指標會以監控圖表的形式顯示。如果機群正在使用中，這些圖表會顯示資料點。

指標會先依據命名空間進行分組，然後再根據各命名空間內不同的維度組合來分組。例如，您可以按機群請求 ID、執行個體類型或可用區域來檢視所有機群指標或機群指標群組。

**檢視機群指標**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，擴充**指標**，然後選擇**所有指標**。

1. 選擇 **EC2 Spot** 命名空間。
**注意**  
若未顯示 **EC2 Spot** 命名空間，這有兩個原因。您可能從未在 區域中使用過 EC2 機群或 Spot 機群 - 只有您使用 AWS 的服務才會將指標傳送至 Amazon CloudWatch。或是因為您過去內兩週未曾在該區域使用 EC2 機群或 Spot 機群，因此沒有顯示此命名空間。

1. 若要根據維度來篩選指標，請選擇下列其中一個選項：
   + **機群請求指標** – 依機群請求分組
   + **根據可用區域** – 依機群請求和可用區域分組
   + **根據執行個體類型** – 依機群請求和執行個體類型分組
   + **根據可用區域/執行個體類型** – 依機群請求、可用區域和執行個體類型分組

1. 若要檢視指標的資料，請勾選指標旁的核取方塊。

# 使用 Amazon EventBridge 監控和以程式設計方式回應 EC2 機群或 Spot 機群發出的事件
<a name="monitor-ec2-fleet-using-eventbridge"></a>

當 EC2 機群或 Spot 機群的狀態發生變化時，機群會發出通知。通知會以傳送至 Amazon EventBridge (先前稱為 Amazon CloudWatch Events) 的事件形式提供使用。盡可能發出事件。

使用 Amazon EventBridge，您可以建立觸發程式設計動作以回應事件的規則。例如，您可以建立兩個 EventBridge 規則：一個是在機群狀態變更時觸發的規則，另一個是在機群中的執行個體終止時觸發的規則。在此例中，如果機群狀態變化，您可以設定第一個規則，以便規則可叫用 SNS 主題來向您傳送電子郵件通知。如果機群中的執行個體終止，您可以設定第二個規則，以便規則可叫用 Lambda 函數來啟動新執行個體。

**注意**  
只有類型 `maintain` 和 `request` 的機群會發出事件。類型 `instant` 的機群不會發出事件，因為它們提交一次性的同步請求，而且在回應中會立即知道機群的狀態。若要使用 Amazon EventBridge 監控機群事件，請求類型必須為 `maintain` 或 `request`。

如需如何描述機群事件歷史記錄的說明，請參閱 [說明 EC2 機群的事件歷史記錄](describe-ec2-fleet.md#describe-ec2-fleet-event-history)。

**Topics**
+ [建立 Amazon EventBridge 規則來監控 EC2 機群或 Spot 機群事件](#fleet_create-eventbridge-rules)
+ [EC2 機群 事件類型](#ec2-fleet-event-types)
+ [Spot 機群事件類型](#spot-fleet-event-types)

## 建立 Amazon EventBridge 規則來監控 EC2 機群或 Spot 機群事件
<a name="fleet_create-eventbridge-rules"></a>

當發出 EC2 機群或 Spot 機群的狀態變化通知時，該通知會以 JSON 檔案，以事件的形式傳送至 Amazon EventBridge。如果 EventBridge 偵測到事件模式符合規則中定義的模式，EventBridge 會叫用規則中指定的目標 (或多個目標)。

您可以撰寫 EventBridge 規則，根據相符的事件模式自動執行動作。

事件中的下列欄位會形成規則中定義的事件模式：

`"source": "aws.ec2fleet"`  
識別事件來自 EC2 機群。

`"detail-type": "EC2 Fleet State Change"`  
識別事件類型。

`"detail": { "sub-type": "submitted" }`  
識別事件子類型。

如需 EC2 機群和 Spot 機群事件和範例事件資料的清單，請參閱 [EC2 機群 事件類型](#ec2-fleet-event-types) 和 [Spot 機群事件類型](#spot-fleet-event-types)。

**Topics**
+ [建立傳送通知的 EventBridge 規則](#eventbridge-send-notification)
+ [建立一個 EventBridge 規則來觸發 Lambda 函數](#eventbridge-trigger-lambda)

### 建立傳送通知的 EventBridge 規則
<a name="eventbridge-send-notification"></a>

下列範例會建立 EventBridge 規則，以在每次 Amazon EC2 發出 EC2 機群狀態變更通知時傳送電子郵件、文字訊息或行動推送通知。將發出此範例中的訊號作為 `EC2 Fleet State Change` 事件，這會觸發規則定義的動作。

**先決條件**  
建立 EventBridge 規則之前，您必須針對電子郵件、文字訊息或行動推送通知建立 Amazon SNS 主題。

**建立 EventBridge 規則以在 EC2 機群狀態變更時傳送通知**

1. 在 [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/) 開啟 Amazon EventBridge 主控台。

1. 選擇 **Create rule** (建立規則)。

1. 針對 **Define rule detail** (定義規則詳細資訊) 執行下列動作：

   1. 輸入規則的**Name (名稱)**，或者輸入描述。

      在同一個區域和同一個事件匯流排上，規則不能與另一個規則同名。

   1. 針對**事件匯流排**選擇**預設值**。當您帳戶中 AWS 的服務產生事件時，一律會前往您帳戶的預設事件匯流排。

   1. 針對**規則類型**，選擇**具有事件模式的規則**。

   1. 選擇**下一步**。

1. 針對 **Build event pattern** (建置事件模式) 執行下列動作：

   1. 在 **Event source** (事件來源) 欄位中，選擇 **AWS events or EventBridge partner events** (事件或 EventBridge 合作夥伴事件)。

   1. 針對此範例的 **Event pattern** (事件模式)，您需指定下列事件模式，以便與 `EC2 Fleet Instance Change` 事件相符。

      ```
      {
       "source": ["aws.ec2fleet"],
       "detail-type": ["EC2 Fleet Instance Change"]
      }
      ```

      若要新增事件模式，您可以透過選擇 **Event pattern form** (事件模式表單) 使用範本，或者透過選擇 **Custom pattern (JSON editor)** (自定義模式 (JSON 編輯器)) 指定自有模式，如下：

      1. 若要使用範本建立事件模式，請執行下列動作：

         1. 選擇 **Event pattern form** (事件模式表單)。

         1. 在 **Event source** (事件來源) 欄位中，選擇 **AWS services** (服務)。

         1. 針對 **AWS Service** (服務)，請選擇 **EC2 Fleet** (EC2 機群)。

         1. 針對 **Event type** (事件類型)，選擇 **EC2 Fleet Instance Change** (EC2 機群執行個體變更)。

         1. 若要自訂範本，請選擇 **Edit pattern** (編輯模式) 並進行變更以與範例事件模式相符。

      1. (替代) 若要指定自訂事件模式，請執行下列動作：

         1. 選擇 **Custom pattern (JSON editor)** (自訂模式 (JSON 編輯器))。

         1. 在 **Event pattern** (事件模式) 方塊中，為此範例新增事件模式。

   1. 選擇**下一步**。

1. 針對 **Select target(s)** (選取目標) 執行下列動作：

   1. 在 **Target types** (目標類型) 欄位中，選擇 **AWS service** (服務)。

   1. 針對 **Select a target** (選取目標) 選取 ** SNS topic** (SNS 主題)，以便在事件發生時傳送電子郵件、簡訊或行動裝置推送通知。

   1. 針對 **Topic (主題)**，請選擇現有的主題。您首先需要使用 Amazon SNS 主控台建立 Amazon SNS 主題。如需詳細資料，請參閱「Amazon Simple Notification Service 開發人員指南」**中的[使用 Amazon SNS 進行應用程式至人員 (A2P) 訊息](https://docs.aws.amazon.com//sns/latest/dg/sns-user-notifications.html)。

   1. (選用) 在 **Additional settings** (其他設定) 下，您可以選擇性地設定其他設定。如需詳細資訊，請參閱「Amazon EventBridge 使用者指南」**中的[建立對事件做出反應的 Amazon EventBridge 規則](https://docs.aws.amazon.com//eventbridge/latest/userguide/eb-create-rule.html) (步驟 16)。

   1. 選擇**下一步**。

1. (選用) 針對 **Tags** (標籤)，您可以選擇性地將一或多個標籤指派給您的規則，然後選擇 **Next** (下一步)。

1. 針對 **Review and create** (檢閱和建立) 執行下列動作：

   1. 檢閱規則的詳細資訊，然後視需求進行修改。

   1. 選擇**建立規則**。

如需詳細資訊，請參閱 *Amazon EventBridge 使用者指南*中的 [Amazon EventBridge 規則](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)和 [Amazon EventBridge 事件模式](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)。

### 建立一個 EventBridge 規則來觸發 Lambda 函數
<a name="eventbridge-trigger-lambda"></a>

下列範例會建立 EventBridge 規則，以在每次 Amazon EC2 因執行個體啟動時發出 EC2 機群執行個體變更通知時觸發 Lambda 函數。將發出此範例中的訊號作為 `EC2 Fleet Instance Change` 事件 (子類型 `launched`)，這會觸發規則定義的動作。

在建立 EventBridge 規則之前，您必須建立 Lambda 函數。

**建立要在 EventBridge 規則中使用的 Lambda 函數**

1. 在 https：//[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) 開啟 AWS Lambda 主控台。

1. 選擇 **Create function** (建立函式)。

1. 輸入函數的名稱、設定程式碼，然後選擇 **Create function (建立函數)**。

   如需詳細資訊，請參閱《*AWS Lambda 開發人員指南*》中的[建立您的第一個 Lambda 函式](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)。

**建立 EventBridge 規則以在執行個體處於 EC2 機群變更狀態時觸發 Lambda 函數**

1. 在 [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/) 開啟 Amazon EventBridge 主控台。

1. 選擇 **Create rule** (建立規則)。

1. 針對 **Define rule detail** (定義規則詳細資訊) 執行下列動作：

   1. 輸入規則的**Name (名稱)**，或者輸入描述。

      在同一個區域和同一個事件匯流排上，規則不能與另一個規則同名。

   1. 針對**事件匯流排**選擇**預設值**。當您帳戶中 AWS 的服務產生事件時，一律會前往您帳戶的預設事件匯流排。

   1. 針對**規則類型**，選擇**具有事件模式的規則**。

   1. 選擇**下一步**。

1. 針對 **Build event pattern** (建置事件模式) 執行下列動作：

   1. 在 **Event source** (事件來源) 欄位中，選擇 **AWS events or EventBridge partner events** (事件或 EventBridge 合作夥伴事件)。

   1. 針對此範例的 **Event pattern** (事件模式)，您需指定下列事件模式，以便與 `EC2 Fleet Instance Change` 事件和 `launched` 子類型相符。

      ```
      {
       "source": ["aws.ec2fleet"],
       "detail-type": ["EC2 Fleet Instance Change"],
       "detail": {
         "sub-type": ["launched"]
      }
      ```

      若要新增事件模式，您可以透過選擇 **Event pattern form** (事件模式表單) 使用範本，或者透過選擇 **Custom pattern (JSON editor)** (自定義模式 (JSON 編輯器)) 指定自有模式，如下：

      1. 若要使用範本建立事件模式，請執行下列動作：

         1. 選擇 **Event pattern form** (事件模式表單)。

         1. 在 **Event source** (事件來源) 欄位中，選擇 **AWS services** (服務)。

         1. 針對 **AWS Service** (服務)，請選擇 **EC2 Fleet** (EC2 機群)。

         1. 針對 **Event type** (事件類型)，選擇 **EC2 Fleet Instance Change** (EC2 機群執行個體變更)。

         1. 選擇 **Edit pattern** (編輯模式)，並新增 `"detail": {"sub-type": ["launched"]` 以符合範例事件模式。若要獲得正確的 JSON 格式，請在前方括號 (`]`) 之後插入一個逗號 (`,`)。

      1. (替代) 若要指定自訂事件模式，請執行下列動作：

         1. 選擇 **Custom pattern (JSON editor)** (自訂模式 (JSON 編輯器))。

         1. 在 **Event pattern** (事件模式) 方塊中，為此範例新增事件模式。

   1. 選擇**下一步**。

1. 針對 **Select target(s)** (選取目標) 執行下列動作：

   1. 在 **Target types** (目標類型) 欄位中，選擇 **AWS service** (服務)。

   1. 針對 **Select a target** (選取目標) 選取 ** SNS topic** (SNS 主題)，以便在事件發生時傳送電子郵件、簡訊或行動裝置推送通知。

   1. 針對 **Topic** (主題)，請選擇 **Lambda function** (Lambda 函數)，然後在 **Function** (函數) 中選擇您建立的函數，以便在事件發生時回應。

   1. (選用) 在 **Additional settings** (其他設定) 下，您可以選擇性地設定其他設定。如需詳細資訊，請參閱「Amazon EventBridge 使用者指南」**中的[建立對事件做出反應的 Amazon EventBridge 規則](https://docs.aws.amazon.com//eventbridge/latest/userguide/eb-create-rule.html) (步驟 16)。

   1. 選擇**下一步**。

1. (選用) 針對 **Tags** (標籤)，您可以選擇性地將一或多個標籤指派給您的規則，然後選擇 **Next** (下一步)。

1. 針對 **Review and create** (檢閱和建立) 執行下列動作：

   1. 檢閱規則的詳細資訊，然後視需求進行修改。

   1. 選擇**建立規則**。

如需如何建立 Lambda 函數和執行 Lambda 函數的 EventBridge 規則的教學課程，請參閱 *AWS Lambda 開發人員指南*中的[教學課程：使用 EventBridge 記錄 Amazon EC2 執行個體的狀態](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-log-ec2-instance-state.html)。

## EC2 機群 事件類型
<a name="ec2-fleet-event-types"></a>

有五種 EC2 機群 事件類型。每個事件類型都有數個子類型。

**Topics**
+ [EC2 機群狀態變更](#ec2-fleet-state-change)
+ [EC2 機群Spot 執行個體請求變更](#ec2-fleet-spot-instance-request-change)
+ [EC2 機群執行個體變更](#ec2-fleet-instance-change)
+ [EC2 機群資訊](#ec2-fleet-info)
+ [EC2 機群錯誤](#ec2-fleet-config-not-valid)

### EC2 機群狀態變更
<a name="ec2-fleet-state-change"></a>

EC2 機群會在 EC2 機群變更狀態時將 `EC2 Fleet State Change` 事件傳送至 Amazon EventBridge。

以下是此事件的範例資料。

```
{
    "version": "0",
    "id": "715ed6b3-b8fc-27fe-fad6-528c7b8bf8a2",
    "detail-type": "EC2 Fleet State Change",
    "source": "aws.ec2fleet",
    "account": "123456789012",
    "time": "2020-11-09T09:00:20Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:fleet/fleet-598fb973-87b7-422d-be4d-6b0809bfff0a"
    ],
    "detail": {
        "sub-type": "active"
    }
}
```

`sub-type` 的可能值為：

`active`  
EC2 機群請求已驗證且 Amazon EC2 正在嘗試維持執行中的執行個體目標數目。

`deleted`  
EC2 機群 請求已刪除，且無執行中的執行個體。EC2 機群 會在其執行個體終止之後兩天刪除。

`deleted_running`  
EC2 機群 請求已刪除，且不會啟動其他執行個體。其現有執行個體將繼續執行直到中斷或終止。此請求會一直維持在該狀態，直到所有執行個體中斷或終止。

`deleted_terminating`  
EC2 機群請求已刪除，且其執行個體已終止。此請求會一直維持在該狀態，直到所有執行個體終止。

`expired`  
EC2 機群請求已過期。如果請求是使用 `TerminateInstancesWithExpiration` 集建立的，後續 `terminated` 事件會指出已終止執行個體。

`modify_in_progress`  
正在修改 EC2 機群請求。請求會一直維持在此狀態，直到已完成修改。

`modify_succeeded`  
EC2 機群請求已修改。

`submitted`  
正在評估 EC2 機群請求且 Amazon EC2 正準備啟動執行個體的目標數量。

`progress`  
EC2 機群請求正在履行的過程中。

### EC2 機群Spot 執行個體請求變更
<a name="ec2-fleet-spot-instance-request-change"></a>

EC2 機群會在機群中的 Spot 執行個體請求變更狀態時將 `EC2 Fleet Spot Instance Request Change` 事件傳送至 Amazon EventBridge。

以下是此事件的範例資料。

```
{
    "version": "0",
    "id": "19331f74-bf4b-a3dd-0f1b-ddb1422032b9",
    "detail-type": "EC2 Fleet Spot Instance Request Change",
    "source": "aws.ec2fleet",
    "account": "123456789012",
    "time": "2020-11-09T09:00:05Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:fleet/fleet-83fd4e48-552a-40ef-9532-82a3acca5f10"
    ],
    "detail": {
        "spot-instance-request-id": "sir-rmqske6h",
        "description": "SpotInstanceRequestId sir-rmqske6h, PreviousState: cancelled_running",
        "sub-type": "cancelled"
    }
}
```

`sub-type` 的可能值為：

`active`  
Spot 執行個體請求已履行，並具有關聯的 Spot 執行個體。

`cancelled`  
您已取消 Spot 執行個體請求，或 Spot 執行個體請求已過期。

`disabled`  
您已停用 Spot 執行個體。

`submitted`  
已提交 Spot 執行個體請求。

### EC2 機群執行個體變更
<a name="ec2-fleet-instance-change"></a>

EC2 機群會在機群中的執行個體變更狀態時將 `EC2 Fleet Instance Change` 事件傳送至 Amazon EventBridge。

以下是此事件的範例資料。

```
{
    "version": "0",
    "id": "542ce428-c8f1-0608-c015-e8ed6522c5bc",
    "detail-type": "EC2 Fleet Instance Change",
    "source": "aws.ec2fleet",
    "account": "123456789012",
    "time": "2020-11-09T09:00:23Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:fleet/fleet-598fb973-87b7-422d-be4d-6b0809bfff0a"
    ],
    "detail": {
        "instance-id": "i-0c594155dd5ff1829",
        "description": "{\"instanceType\":\"c5.large\",\"image\":\"ami-6057e21a\",\"productDescription\":\"Linux/UNIX\",\"availabilityZone\":\"us-east-1d\"}",
        "sub-type": "launched"
    }
}
```

`sub-type` 的可能值為：

`launched`  
已啟動新執行個體。

`terminated`  
已終止執行個體。

`termination_notified`  
Amazon EC2 在縮減規模期間終止 Spot 執行個體，也就是機群的目標容量向下修改 (例如，從目標容量 4 變為 3) 時，系統會傳送執行個體終止通知。

### EC2 機群資訊
<a name="ec2-fleet-info"></a>

EC2 機群會在履行期間發生錯誤時傳送 `EC2 Fleet Information` 事件至 Amazon EventBridge。此資訊事件不會封鎖機群嘗試履行其目標容量。

以下是此事件的範例資料。

```
{
    "version": "0",
    "id": "76529817-d605-4571-7224-d36cc1b2c0c4",
    "detail-type": "EC2 Fleet Information",
    "source": "aws.ec2fleet",
    "account": "123456789012",
    "time": "2020-11-09T08:17:07Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:fleet/fleet-8becf5fe-bb9e-415d-8f54-3fa5a8628b91"
    ],
    "detail": {
        "description": "c4.xlarge, ami-0947d2ba12ee1ff75, Linux/UNIX, us-east-1a, Spot price in either SpotFleetRequestConfigData or SpotFleetLaunchSpecification or LaunchTemplate or LaunchTemplateOverrides is less than Spot market price $0.0619",
        "sub-type": "launchSpecUnusable"
    }
}
```

`sub-type` 的可能值為：

`fleetProgressHalted`  
每個啟動規格中的價格無效，因為價格低於 Spot 價格 (所有啟動規格都已產生 `launchSpecUnusable` 事件)。如果 Spot 價格變動，啟動規格則可能會變成有效。

`launchSpecTemporarilyBlacklisted`  
組態無效，且多次嘗試啟動執行個體失敗。如需詳細資訊，請參閱事件的描述。

`launchSpecUnusable`  
啟動規格中的價格無效，因為價格低於 Spot 價格。

`registerWithLoadBalancersFailed`  
嘗試在負載平衡器失敗時註冊執行個體。如需詳細資訊，請參閱事件的描述。

### EC2 機群錯誤
<a name="ec2-fleet-config-not-valid"></a>

EC2 機群會在履行期間發生錯誤時傳送 `EC2 Fleet Error` 事件至 Amazon EventBridge。錯誤事件會阻止機群嘗試履行其目標容量。

以下是此事件的範例資料。

```
{
    "version": "0",
    "id": "69849a22-6d0f-d4ce-602b-b47c1c98240e",
    "detail-type": "EC2 Fleet Error",
    "source": "aws.ec2fleet",
    "account": "123456789012",
    "time": "2020-10-07T01:44:24Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:fleet/fleet-9bb19bc6-60d3-4fd2-ae47-d33e68eafa08"
    ],
    "detail": {
        "description": "m3.large, ami-00068cd7555f543d5, Linux/UNIX: IPv6 is not supported for the instance type 'm3.large'. ",
        "sub-type": "spotFleetRequestConfigurationInvalid"
    }
}
```

`sub-type` 的可能值為：

`iamFleetRoleInvalid`  
EC2 機群沒有啟動或終止執行個體所需的許可。

`allLaunchSpecsTemporarilyBlacklisted`  
沒有任何組態是有效的，且多次嘗試啟動執行個體失敗。如需詳細資訊，請參閱事件的描述。

`spotInstanceCountLimitExceeded`  
您已達到可啟動 Spot 執行個體的數目上限。

`spotFleetRequestConfigurationInvalid`  
組態無效。如需詳細資訊，請參閱事件的描述。

## Spot 機群事件類型
<a name="spot-fleet-event-types"></a>

有五種 Spot 機群事件類型。每個事件類型都有數個子類型。

**Topics**
+ [EC2 Spot 機群狀態變更](#spot-fleet-state-change)
+ [EC2 Spot 機群Spot 執行個體請求變更](#spot-fleet-spot-instance-request-change)
+ [EC2 Spot 機群執行個體變更](#spot-fleet-instance-change)
+ [EC2 Spot 機群資訊](#spot-fleet-info)
+ [EC2 Spot 機群錯誤](#spot-fleet-config-not-valid)

### EC2 Spot 機群狀態變更
<a name="spot-fleet-state-change"></a>

Spot 機群會在 Spot 機群變更狀態時將 `EC2 Spot Fleet State Change` 事件傳送至 Amazon EventBridge 。

以下是此事件的範例資料。

```
{
    "version": "0",
    "id": "d1af1091-6cc3-2e24-203a-3b870e455d5b",
    "detail-type": "EC2 Spot Fleet State Change",
    "source": "aws.ec2spotfleet",
    "account": "123456789012",
    "time": "2020-11-09T08:57:06Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-4b6d274d-0cea-4b2c-b3be-9dc627ad1f55"
    ],
    "detail": {
        "sub-type": "submitted"
    }
}
```

`sub-type` 的可能值為：

`active`  
已驗證 Spot 機群請求，且 Amazon EC2 正在嘗試維持執行中的執行個體目標數目。

`cancelled`  
Spot 機群請求已取消，且無執行中的執行個體。Spot 機群將會在其執行個體終止後兩天刪除。

`cancelled_running`  
Spot 機群請求已取消，不會啟動其他執行個體。其現有執行個體將繼續執行直到中斷或終止。此請求會一直維持在該狀態，直到所有執行個體中斷或終止。

`cancelled_terminating`  
Spot 機群請求已取消，其執行個體正在終止。此請求會一直維持在該狀態，直到所有執行個體終止。

`expired`  
Spot 機群請求已過期。如果請求是使用 `TerminateInstancesWithExpiration` 集建立的，後續 `terminated` 事件會指出已終止執行個體。

`modify_in_progress`  
正在修改 Spot 機群請求。請求會一直維持在此狀態，直到已完成修改。

`modify_succeeded`  
已修改 Spot 機群請求。

`submitted`  
正在評估 Spot 機群請求且 Amazon EC2 正準備啟動執行個體的目標數量。

`progress`  
正在履行 Spot 機群請求。

### EC2 Spot 機群Spot 執行個體請求變更
<a name="spot-fleet-spot-instance-request-change"></a>

Spot 機群會在機群中的 Spot 執行個體請求變更狀態時將 `EC2 Spot Fleet Spot Instance Request Change` 事件傳送至 Amazon EventBridge。

以下是此事件的範例資料。

```
{
    "version": "0",
    "id": "cd141ef0-14af-d670-a71d-fe46e9971bd2",
    "detail-type": "EC2 Spot Fleet Spot Instance Request Change",
    "source": "aws.ec2spotfleet",
    "account": "123456789012",
    "time": "2020-11-09T08:53:21Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-a98d2133-941a-47dc-8b03-0f94c6852ad1"
    ],
    "detail": {
        "spot-instance-request-id": "sir-a2w9gc5h",
        "description": "SpotInstanceRequestId sir-a2w9gc5h, PreviousState: cancelled_running",
        "sub-type": "cancelled"
    }
}
```

`sub-type` 的可能值為：

`active`  
Spot 執行個體請求已履行，並具有關聯的 Spot 執行個體。

`cancelled`  
您已取消 Spot 執行個體請求，或 Spot 執行個體請求已過期。

`disabled`  
您已停用 Spot 執行個體。

`submitted`  
已提交 Spot 執行個體請求。

### EC2 Spot 機群執行個體變更
<a name="spot-fleet-instance-change"></a>

Spot 機群會在機群中的執行個體變更狀態時將 `EC2 Spot Fleet Instance Change` 事件傳送至 Amazon EventBridge 。

以下是此事件的範例資料。

```
{
    "version": "0",
    "id": "11591686-5bd7-bbaa-eb40-d46529c2710f",
    "detail-type": "EC2 Spot Fleet Instance Change",
    "source": "aws.ec2spotfleet",
    "account": "123456789012",
    "time": "2020-11-09T07:25:02Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-c8a764a4-bedc-4b62-af9c-0095e6e3ba61"
    ],
    "detail": {
        "instance-id": "i-08b90df1e09c30c9b",
        "description": "{\"instanceType\":\"r4.2xlarge\",\"image\":\"ami-032930428bf1abbff\",\"productDescription\":\"Linux/UNIX\",\"availabilityZone\":\"us-east-1a\"}",
        "sub-type": "launched"
    }
}
```

`sub-type` 的可能值為：

`launched`  
已啟動新執行個體。

`terminated`  
已終止執行個體。

`termination_notified`  
Amazon EC2 在縮減規模期間終止 Spot 執行個體，也就是機群的目標容量向下修改 (例如，從目標容量 4 變為 3) 時，系統會傳送執行個體終止通知。

### EC2 Spot 機群資訊
<a name="spot-fleet-info"></a>

當履行期間發生錯誤時，Spot 機群將 `EC2 Spot Fleet Information` 事件傳送至 Amazon EventBridge。此資訊事件不會封鎖機群嘗試履行其目標容量。

以下是此事件的範例資料。

```
{
    "version": "0",
    "id": "73a60f70-3409-a66c-635c-7f66c5f5b669",
    "detail-type": "EC2 Spot Fleet Information",
    "source": "aws.ec2spotfleet",
    "account": "123456789012",
    "time": "2020-11-08T20:56:12Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-2531ea06-af18-4647-8757-7d69c94971b1"
    ],
    "detail": {
        "description": "r3.8xlarge, ami-032930428bf1abbff, Linux/UNIX, us-east-1a, Spot bid price is less than Spot market price $0.5291",
        "sub-type": "launchSpecUnusable"
    }
}
```

`sub-type` 的可能值為：

`fleetProgressHalted`  
每個啟動規格中的價格無效，因為價格低於 Spot 價格 (所有啟動規格都已產生 `launchSpecUnusable` 事件)。如果 Spot 價格變動，啟動規格則可能會變成有效。

`launchSpecTemporarilyBlacklisted`  
組態無效，且多次嘗試啟動執行個體失敗。如需詳細資訊，請參閱事件的描述。

`launchSpecUnusable`  
啟動規格中的價格無效，因為價格低於 Spot 價格。

`registerWithLoadBalancersFailed`  
嘗試在負載平衡器失敗時註冊執行個體。如需詳細資訊，請參閱事件的描述。

### EC2 Spot 機群錯誤
<a name="spot-fleet-config-not-valid"></a>

當履行期間發生錯誤時，Spot 機群將 `EC2 Spot Fleet Error` 事件傳送至 Amazon EventBridge。錯誤事件會阻止機群嘗試履行其目標容量。

以下是此事件的範例資料。

```
{
    "version": "0",
    "id": "10adc4e7-675c-643e-125c-5bfa1b1ba5d2",
    "detail-type": "EC2 Spot Fleet Error",
    "source": "aws.ec2spotfleet",
    "account": "123456789012",
    "time": "2020-11-09T06:56:07Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-38725d30-25f1-4f30-83ce-2907c56dba17"
    ],
    "detail": {
        "description": "r4.2xlarge, ami-032930428bf1abbff, Linux/UNIX: The associatePublicIPAddress parameter can only be specified for the network interface with DeviceIndex 0. ",
        "sub-type": "spotFleetRequestConfigurationInvalid"
    }
}
```

`sub-type` 的可能值為：

`iamFleetRoleInvalid`  
Spot 機群沒有啟動或終止執行個體所需的許可。

`allLaunchSpecsTemporarilyBlacklisted`  
沒有任何組態是有效的，且多次嘗試啟動執行個體失敗。如需詳細資訊，請參閱事件的描述。

`spotInstanceCountLimitExceeded`  
您已達到可啟動 Spot 執行個體的數目上限。

`spotFleetRequestConfigurationInvalid`  
組態無效。如需詳細資訊，請參閱事件的描述。

# EC2 機群的教學課程
<a name="fleet-tutorials"></a>

有不同的方法可以設定 EC2 機群。您選擇的組態取決於您的特定使用案例。

下列教學課程涵蓋一些可能的使用案例，並提供實作這些案例所需的任務。


| 使用案例 | 教學課程連結 | 
| --- | --- | 
|  **使用執行個體權重來管理 EC2 機群的可用性和效能。** 執行個體加權，可讓您為 EC2 機群中的每個執行個體類型指派權重，以代表其運算容量和效能。根據權重，機群可以使用指定執行個體類型的任意組合，只要機群可以滿足所需的目標容量即可。  | [教學課程：使用執行個體權重設定 EC2 機群](ec2-fleet-instance-weighting-walkthrough.md) | 
|  **使用隨需容量以確保尖峰時段的可用性，但可受益於以較低的成本獲得額外的 Spot 容量。** 將 EC2 機群設定為使用隨需執行個體做為主要容量，以確保尖峰時段的可用容量。此外，將一些容量配置給 Spot 執行個體，以受益於折扣定價，同時請記住，如果 Amazon EC2 需要恢復容量，Spot 執行個體可能會中斷。  | [教學課程：將 EC2 機群設定為使用隨需執行個體做為主要容量](ec2-fleet-on-demand-walkthrough.md) | 
|  **使用容量保留，為您的隨需執行個體保留運算容量。** 將 EC2 機群設定為在啟動隨需執行個體時，先使用 `targeted` 容量保留。如果您有嚴格的容量需求，並且正在執行需要特定層級長期或短期容量保證的業務關鍵工作負載，建議您建立容量保留，以確保只要在需要時，即可有 Amazon EC2 容量存取權。  | [教學課程：使用目標容量保留設定 EC2 機群啟動隨需執行個體](ec2-fleet-launch-on-demand-instances-using-targeted-capacity-reservations-walkthrough.md) | 
|  **使用容量區塊為您的 ML 工作負載保留需求高的 GPU 執行個體。** 設定您的 EC2 機群以啟動執行個體至容量區塊。  | [教學課程：設定您的 EC2 機群以啟動執行個體至容量區塊](ec2-fleet-launch-instances-capacity-blocks-walkthrough.md) | 
|  **使用可中斷的容量預留來暫時重新利用整個 AWS 組織的閒置容量並節省成本。** 將 EC2 機群設定為在可中斷的容量保留中啟動執行個體，其代表 AWS 組織內的備用容量。容量擁有者可以隨時回收容量。回收後，EC2 會在 2 分鐘後終止執行個體。  | [教學課程：設定您的 EC2 機群，在可中斷的容量保留中啟動執行個體](ec2-fleet-launch-instances-interruptible-cr-walkthrough.md) | 

# 教學課程：使用執行個體權重設定 EC2 機群
<a name="ec2-fleet-instance-weighting-walkthrough"></a>

本教學課程使用一間稱為 Example Corp 的虛構公司，說明使用執行個體權重來請求 EC2 Fleet 的程序。

## 目標
<a name="ec2-fleet-instance-weighting-walkthrough-objective"></a>

Example Corp 是一間製藥公司，希望利用 Amazon EC2 的計算能力篩選可能用於抗癌的化合物。

## 規劃
<a name="ec2-fleet-instance-weighting-walkthrough-planning"></a>

Example Corp 首先檢視了 [Spot 最佳實務](https://aws.amazon.com/ec2/spot/getting-started/#bestpractices)。接下來，Example Corp 決定他們的 EC2 Fleet 需求。

**執行個體類型**  
Example Corp 擁有運算和記憶體密集型應用程式，該應用程式在至少 60 GB 記憶體和八個虛擬 CPU (vCPU) 情況下效能最佳。他們希望以最低的價格為應用程式最大限度利用這些資源。Example Corp 認為以下任一個 EC2 執行個體類型都能滿足他們的需求：


| 執行個體類型 | 記憶體 (GiB) | vCPU | 
| --- | --- | --- | 
|  r3.2xlarge  |  61  |  8  | 
|  r3.4xlarge  |  122  |  16  | 
|  r3.8xlarge  |  244  |  32  | 

**目標容量 (單位)**  
透過執行個體權重，目標容量可以等於多個執行個體 (預設) 或多個因素如核心 (vCPU)、記憶體 (GiB) 和儲存空間 (GB) 的組合。Example Corp 將其應用程式基礎 (60 GB RAM 和 8 個 vCPU) 做為一個單位考慮，Example Corp 決定此數量的 20 倍將可滿足他們的需求。因此，該公司將其 EC2 機群請求的目標容量設定為 20 個單位。

**執行個體權重**  
Example Corp 決定目標容量後，即計算執行個體權重。為了計算每個執行個體類型的執行個體權重，將決定達成目標容量所需的每個執行個體類型單位，如下所示：
+ r3.2xlarge (61.0 GB, 8 vCPUs) = 1 單位 (共 20 單位)
+ r3.4xlarge (122.0 GB, 16 vCPUs) = 2 單位 (共 20 單位)
+ r3.8xlarge (244.0 GB, 32 vCPUs) = 4 單位 (共 20 單位)

因此，Example Corp 會針對其 EC2 Fleet 請求中的各個啟動組態，指派 1、2 和 4 的執行個體權重。

**每個單位小時的價格**  
Example Corp 會使用每執行個體小時的[隨需價格](https://aws.amazon.com/ec2/pricing/)，來做為其價格的起點。他們也可以使用最近的 Spot 價格，或兩者的組合。為計算每單位小時價格，他們將每個執行個體小時的起始價格除以權重。例如：


| 執行個體類型 | 隨需價格 | 執行個體權重 | 每個單位小時的價格 | 
| --- | --- | --- | --- | 
|  r3.2xLarge  |  0.7 USD  |  1  |  0.7 USD  | 
|  r3.4xLarge  |  1.4 USD  |  2  |  0.7 USD  | 
|  r3.8xLarge  |  \$12.8  |  4  |  0.7 USD  | 

Example Corp 可以使用每單位小時 0.7 USD 的全球價格，並且對於所有三種執行個體類型都具有競爭力。在 `r3.8xlarge` 啟動規格中，他們也可以使用每單位小時 0.7 USD 全局價格和 0.9 USD 每單位小時特定價格。

## 驗證許可
<a name="ec2-fleet-instance-weighting-walkthrough-permissions"></a>

Example Corp 在建立 EC2 Fleet 之前，驗證其具有所需許可的 IAM 角色。如需詳細資訊，請參閱[EC2 Fleet 先決條件](ec2-fleet-prerequisites.md)。

## 建立啟動範本
<a name="ec2-fleet-instance-weighting-create-launch-template"></a>

接下來，範例公司會建立一個啟動範本。啟動範本 ID 會在下列步驟中使用。如需詳細資訊，請參閱[建立 Amazon EC2 啟動範本](create-launch-template.md)。

## 建立 EC2 Fleet
<a name="ec2-fleet-instance-weighting-walkthrough-request"></a>

Example Corp 會建立一個檔案 `config.json`，且其 EC2 Fleet 組態如下。在下列範例中，以您自己的資源識別符取代資源識別符。

```
{ 
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "lt-07b3bc7625cdab851", 
                "Version": "1"
            }, 
            "Overrides": [
                {
                    "InstanceType": "r3.2xlarge", 
                    "SubnetId": "subnet-482e4972", 
                    "WeightedCapacity": 1
                },
                {
                    "InstanceType": "r3.4xlarge", 
                    "SubnetId": "subnet-482e4972", 
                    "WeightedCapacity": 2
                },
                {
                    "InstanceType": "r3.8xlarge", 
                    "MaxPrice": "0.90", 
                    "SubnetId": "subnet-482e4972", 
                    "WeightedCapacity": 4
                }
            ]
        }
    ], 
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20, 
        "DefaultTargetCapacityType": "spot"
    }
}
```

Example Corp 使用以下 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 命令來建立 EC2 Fleet。

```
aws ec2 create-fleet --cli-input-json file://config.json
```

如需詳細資訊，請參閱 [建立 EC2 Fleet](create-ec2-fleet.md)。

## 履行
<a name="ec2-fleet-instance-weighting-walkthrough-fulfillment"></a>

分配策略決定您的 競價型執行個體 來自哪個 Spot 容量集區。

採用 `lowest-price` 策略 (預設的策略)，競價型執行個體 來自實現時每單位價格最低的集區。為提供 20 個單位的容量，EC2 Fleet 將啟動 20 個 `r3.2xlarge` 執行個體 (20 除以 1)、10 個 `r3.4xlarge` 執行個體 (20 除以 2) 或 5 個 `r3.8xlarge` 執行個體 (20 除以 4)。

如果 Example Corp 使用 `diversified` 策略，競價型執行個體 將來自所有三個集區。EC2 Fleet 將啟動 6 個 `r3.2xlarge` 執行個體 (提供 6 個單位)、3 個 `r3.4xlarge` 執行個體 (提供 6 個單位) 和 2 個 `r3.8xlarge` 執行個體 (提供 8 個單位)，共計 20 個單位。

# 教學課程：將 EC2 機群設定為使用隨需執行個體做為主要容量
<a name="ec2-fleet-on-demand-walkthrough"></a>

本教學課程使用一間稱為 ABC Online 的虛構公司來說明請求 EC2 Fleet 的隨需做為主要容量的程序，以及 Spot 容量 (如果可用)。

## 目標
<a name="ec2-fleet-on-demand-walkthrough-objective"></a>

餐飲外送公司 ABC Online 致力於跨 EC2 執行個體類型佈建 Amazon EC2 容量和購買選項，以實現該公司所要的規模、效能和成本。

## 計畫
<a name="ec2-fleet-on-demand-walkthrough-planning"></a>

ABC Online 需要固定容量以應付尖峰期，但希望以更低的價格獲得額外容量。該公司決定下列的 EC2 機群需求：
+ 隨需執行個體容量 – ABC Online 需要 15 個隨需執行個體來確保其可以在尖峰期間容納流量。
+ Spot 執行個體容量 – ABC Online 打算佈建 5 個 Spot 執行個體，以更低的價格提高效能。

## 驗證許可
<a name="ec2-fleet-on-demand-walkthrough-permissions"></a>

ABC Online 在建立 EC2 Fleet 之前，驗證其具有所需許可的 IAM 角色。如需詳細資訊，請參閱[EC2 Fleet 先決條件](ec2-fleet-prerequisites.md)。

## 建立啟動範本
<a name="ec2-fleet-on-demand-walkthrough-create-launch-template"></a>

接下來，ABC Online 會建立啟動範本。啟動範本 ID 會在下列步驟中使用。如需詳細資訊，請參閱[建立 Amazon EC2 啟動範本](create-launch-template.md)。

## 建立 EC2 Fleet
<a name="ec2-fleet-on-demand-walkthrough-request"></a>

ABC Online 會建立一個檔案 `config.json`，且其 EC2 Fleet 組態如下。在下列範例中，以您自己的資源識別符取代資源識別符。

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "lt-07b3bc7625cdab851",
                "Version": "2"
            }

        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "OnDemandTargetCapacity":15,
        "DefaultTargetCapacityType": "spot"
    }
}
```

ABC Online 使用以下 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 命令來建立 EC2 Fleet。

```
aws ec2 create-fleet --cli-input-json file://config.json
```

如需詳細資訊，請參閱 [建立 EC2 Fleet](create-ec2-fleet.md)。

## 履行
<a name="ec2-fleet-on-demand-walkthrough-fulfillment"></a>

分配策略決定隨需容量能始終實現，而如果有可用容量，則目標容量的剩餘部分將做為 Spot 實現。

# 教學課程：使用目標容量保留設定 EC2 機群啟動隨需執行個體
<a name="ec2-fleet-launch-on-demand-instances-using-targeted-capacity-reservations-walkthrough"></a>

本教學課程將逐步引導您完成必須執行的所有步驟，以便您的 EC2 Fleet 啟動隨需執行個體至 `targeted` 容量預留。

您將會了解到如何設定機群，以在啟動隨需執行個體時先使用 `targeted` 隨需容量預留。您也會了解到如何設定機群，以便機群在隨需目標容量總計超過可用的未使用容量預留數目時，使用指定的分配策略來選取要在其中啟動剩餘目標容量的執行個體集區。

**EC2 Fleet 組態**

本教學課程機群設定如下所示：
+ 目標容量：10 個隨需執行個體
+ 總計未使用的 `targeted` 容量保留：6 (小於機群的隨需目標容量：10 個隨需執行個體)
+ 容量保留集區數目：2 (`us-east-1a` 和 `us-east-1b`)
+ 每個集區的容量保留數目：3
+ 隨需分配策略：`lowest-price` (當未使用的容量保留數目小於隨需目標容量時，機群會根據隨需分配策略決定要用來啟動剩餘隨需容量的集區。)

  請注意，您也可以使用 `prioritized` 分配策略，而不使用 `lowest-price` 分配策略。

**若要按照 `targeted` 容量預留來啟動隨需執行個體，必須執行以下幾個步驟：**
+ [步驟 1：建立容量預留](#ec2-fleet-odcr-step1)
+ [步驟 2：建立容量預留資源群組](#ec2-fleet-odcr-step2)
+ [步驟 3：將容量預留新增至容量預留資源群組](#ec2-fleet-odcr-step3)
+ [(選用) 步驟 4：檢視資源群組中的容量預留](#ec2-fleet-odcr-step4)
+ [步驟 5：建立啟動範本，此範本指定容量預留以特定資源群組為目標](#ec2-fleet-odcr-step5)
+ [(選用) 步驟 6：描述啟動範本](#ec2-fleet-odcr-step6)
+ [步驟 7：建立 EC2 Fleet](#ec2-fleet-odcr-step7)
+ [(選用) 步驟 8：檢視剩餘未使用的容量預留數目](#ec2-fleet-odcr-step8)

## 步驟 1：建立容量預留
<a name="ec2-fleet-odcr-step1"></a>

使用 [create-capacity-reservation](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-capacity-reservation.html) 命令來建立容量預留，其中三個用於 `us-east-1a`，另外三個用於 `us-east-1b`。除了可用區域之外，容量預留的其他屬性皆相同。

**在 `us-east-1a` 中的 3 個容量預留**

```
aws ec2 create-capacity-reservation \
    --availability-zone us-east-1a \
    --instance-type c5.xlarge \
    --instance-platform Linux/UNIX \
    --instance-count 3 \
    --instance-match-criteria targeted
```

最後產生的容量預留 ID 範例

```
cr-1234567890abcdef1
```

**在 `us-east-1b` 中的 3 個容量預留**

```
aws ec2 create-capacity-reservation \
    --availability-zone us-east-1b \
    --instance-type c5.xlarge \
    --instance-platform Linux/UNIX \
    --instance-count 3 \
    --instance-match-criteria targeted
```

最後產生的容量預留 ID 範例

```
cr-54321abcdef567890
```

## 步驟 2：建立容量預留資源群組
<a name="ec2-fleet-odcr-step2"></a>

使用 `resource-groups` 服務和 [create-group](https://docs.aws.amazon.com/cli/latest/reference/resource-groups/create-group.html) 命令來建立容量預留資源群組。在此範例中，資源群組會命名為 `my-cr-group`。如需為何必須建立資源群組的相關資訊，請參閱 [使用容量保留功能來保留 EC2 機群中的隨需容量](ec2-fleet-on-demand-capacity-reservations.md)。

```
aws resource-groups create-group \
    --name my-cr-group \
    --configuration '{"Type":"AWS::EC2::CapacityReservationPool"}' '{"Type":"AWS::ResourceGroups::Generic", "Parameters": [{"Name": "allowed-resource-types", "Values": ["AWS::EC2::CapacityReservation"]}]}'
```

## 步驟 3：將容量預留新增至容量預留資源群組
<a name="ec2-fleet-odcr-step3"></a>

使用 `resource-groups` 服務和 [group-resources](https://docs.aws.amazon.com/cli/latest/reference/resource-groups/group-resources.html) 命令，將您在步驟 1 中建立的容量預留新增至容量預留資源群組。請注意，您必須參考隨需容量預留的 ARN。

```
aws resource-groups group-resources \
    --group my-cr-group \
    --resource-arns \
      arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1 \
      arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890
```

範例輸出

```
{
   "Failed": [], 
   "Succeeded": [ 
   "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1", 
   "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890" 
   ] 
}
```

## (選用) 步驟 4：檢視資源群組中的容量預留
<a name="ec2-fleet-odcr-step4"></a>

使用 `resource-groups` 服務和 [list-group-resources](https://docs.aws.amazon.com/cli/latest/reference/resource-groups/list-group-resources.html) 命令可選擇性地描述資源群組以檢視其容量預留。

```
aws resource-groups list-group-resources --group my-cr-group
```

範例輸出

```
{
    "ResourceIdentifiers": [
        {
            "ResourceType": "AWS::EC2::CapacityReservation",
            "ResourceArn": "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1"
        },
        {
            "ResourceType": "AWS::EC2::CapacityReservation",
            "ResourceArn": "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890"
        }
    ]
}
```

## 步驟 5：建立啟動範本，此範本指定容量預留以特定資源群組為目標
<a name="ec2-fleet-odcr-step5"></a>

使用 [create-launch-template](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-launch-template.html) 命令來建立啟動範本，使用此範本來指定要使用的容量預留。在此範例中，機群會使用新增至資源群組的 `targeted` 容量預留。因此，啟動範本資料會指定容量預留以特定資源群組為目標。在此範例中，啟動範本會命名為 `my-launch-template`。

```
aws ec2 create-launch-template \
    --launch-template-name my-launch-template \
    --launch-template-data \
        '{"ImageId": "ami-0123456789example",
          "CapacityReservationSpecification": 
            {"CapacityReservationTarget": 
                { "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-cr-group" }
            }
        }'
```

## (選用) 步驟 6：描述啟動範本
<a name="ec2-fleet-odcr-step6"></a>

使用 [describe-launch-template-versions](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-launch-template-versions.html) 命令可選擇性地描述啟動範本，以檢視其組態。

```
aws ec2 describe-launch-template-versions --launch-template-name my-launch-template
```

範例輸出

```
{
    "LaunchTemplateVersions": [
        {
            "LaunchTemplateId": "lt-01234567890example",
            "LaunchTemplateName": "my-launch-template",
            "VersionNumber": 1,
            "CreateTime": "2021-01-19T20:50:19.000Z",
            "CreatedBy": "arn:aws:iam::123456789012:user/Admin",
            "DefaultVersion": true,
            "LaunchTemplateData": {
                "ImageId": "ami-0947d2ba12ee1ff75",
                "CapacityReservationSpecification": {
                    "CapacityReservationTarget": {
                        "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-cr-group"
                    }
                }
            }
        }
    ]
}
```

## 步驟 7：建立 EC2 Fleet
<a name="ec2-fleet-odcr-step7"></a>

建立 EC2 Fleet，該機群會指定將啟動之執行個體的組態資訊。下列 EC2 Fleet 組態僅顯示此範例的相關組態。啟動範本 `my-launch-template` 是您在步驟 5 中建立的啟動範本。有兩個執行個體集區，每個集區內的執行個體類型相同 (`c5.xlarge`)，但使用不同的可用區域 (`us-east-1a` 和 `us-east-1b`)。執行個體集區的價格相同，因為定價是根據區域界定，而不是根據可用區域界定的。總目標容量為 10，預設目標容量類型為 `on-demand`。隨需分配策略為 `lowest-price`。容量預留的使用策略為 `use-capacity-reservations-first`。

**注意**  
機群類型必須為 `instant`。其他機群類型不支援 `use-capacity-reservations-first`。

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-launch-template",
                "Version": "1"
            },
            "Overrides": [
               {
                   "InstanceType": "c5.xlarge",
                   "AvailabilityZone": "us-east-1a"
               },
               {
                    "InstanceType": "c5.xlarge",
                    "AvailabilityZone": "us-east-1b"
               }
            ]
        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 10,
        "DefaultTargetCapacityType": "on-demand"
    },
    "OnDemandOptions": {
        "AllocationStrategy": "lowest-price",
        "CapacityReservationOptions": {
             "UsageStrategy": "use-capacity-reservations-first"
         }
    },
    "Type": "instant"
}
```

使用上述組態建立 `instant` 機群之後，會啟動以下 10 個執行個體以符合目標容量：
+ 會先使用容量保留來啟動 6 個隨需執行個體，如下所示：
  + 3 個隨需執行個體已在 `us-east-1a` 中啟動至 3 個 `c5.xlarge` `targeted` 容量保留
  + 3 個隨需執行個體已在 `c5.xlarge` 中啟動至 3 個 `targeted` `us-east-1b` 容量保留
+ 為了滿足目標容量，會根據隨需分配策略 (在本例中為 `lowest-price`) 使用一般隨需容量來啟動 4 個額外的隨需執行個體。不過，由於集區的價格相同 (因為價格是按區域而非可用區域計價)，因此機群會使用任一個集區來啟動剩餘的 4 個隨需執行個體。

## (選用) 步驟 8：檢視剩餘未使用的容量預留數目
<a name="ec2-fleet-odcr-step8"></a>

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

```
{ "CapacityReservationId":  "cr-111",
     "InstanceType":  "c5.xlarge",  
     "AvailableInstanceCount":  0
}

 { "CapacityReservationId":  "cr-222",
     "InstanceType":  "c5.xlarge", 
     "AvailableInstanceCount":  0
}
```

# 教學課程：設定您的 EC2 機群以啟動執行個體至容量區塊
<a name="ec2-fleet-launch-instances-capacity-blocks-walkthrough"></a>

本教學課程將逐步引導您完成必須執行的所有步驟，以便 EC2 Fleet 在容量區塊中啟動您的執行個體。

在大多數情況下，EC2 機群請求的目標容量應小於或等於您所鎖定容量區塊的保留可用容量。超出容量區塊預留上限的目標容量請求將無法滿足。如果目標容量請求超出容量區塊保留上限，您會收到 `Insufficient Capacity Exception`，告知您請求超出容量區塊的保留上限。

**注意**  
對於容量區塊，EC2 Fleet 將不會撤回至針對所需的目標剩餘容量啟動隨需執行個體。

如果 EC2 Fleet 無法在可用的預留容量區塊中滿足所要求的目標容量，EC2 Fleet 會盡可能滿足容量需求，並傳回能夠啟動的執行個體。您可以再次重複呼叫 EC2 Fleet，直到佈建所有執行個體為止。

設定 EC2 Fleet 請求後，您必須等待至容量區塊預留的開始日期。如果您請求 EC2 機群啟動至尚未啟動的容量區塊，則會收到 `Insufficient Capacity Error`。

預留的容量區塊啟用後，您就可以執行 EC2 Fleet 的 API 呼叫，並根據您選取的參數將執行個體佈建到容量區塊中。在容量區塊中執行的執行個體會繼續執行，直到您手動停止或終止這些執行個體，或 Amazon EC2 在容量區塊保留結束時終止這些執行個體。

如需關於容量區塊的詳細資訊，請參閱 [ML 的容量區塊](ec2-capacity-blocks.md)。

**考量事項**
+ 在容量區塊中啟動執行個體時，僅支援 `instant` 類型的 EC2 機群請求。如需詳細資訊，請參閱[設定 instant 類型的 EC2 機群](instant-fleet.md)。
+ 同一 EC2 機群請求不支援多個容量區塊。
+ 不支援在使用 `OnDemandTargetCapacity` 或 `SpotTargetCapacity` 時，同時將 `capacity-block` 設為 `DefaultTargetCapacity`。
+ 如果將 `DefaultTargetCapacityType` 設為 `capacity-block`，則無法提供 `OnDemandOptions::CapacityReservationOptions`。一旦提供，便會發生例外狀況。

**設定 EC2 機群以啟動執行個體至容量區塊**

1. **建立啟動範本。**

   在啟動範本中，執行下列動作：
   + 針對 `InstanceMarketOptionsRequest`，將 `MarketType` 設定為 `capacity-block`。
   + 若要鎖定容量區塊保留，請為 `CapacityReservationID` 指定容量區塊保留 ID。

   請記下啟動範本名稱和版本。在下一個步驟中，您將用到這項資訊。

   如需建立啟動範本的詳細資訊，請參閱 [建立 Amazon EC2 啟動範本](create-launch-template.md)。

1. **設定 EC2 機群。**

   建立檔案 `config.json`，並為您的 EC2 機群採用以下組態。在下列範例中，以您自己的資源識別符取代資源識別符。

   如需有關設定 EC2 機群的詳細資訊，請參閱 [建立 EC2 Fleet](create-ec2-fleet.md)。

   ```
   { 
       "LaunchTemplateConfigs": [
           {
               "LaunchTemplateSpecification": {
                   "LaunchTemplateName": "CBR-launch-template", 
                   "Version": "1"
               }, 
               "Overrides": [
                   {
                       "InstanceType": "p5.48xlarge", 
                       "AvailabilityZone": "us-east-1a"   
                   },
               ]
           }
       ], 
       "TargetCapacitySpecification": {
           "TotalTargetCapacity": 10, 
           "DefaultTargetCapacityType": "capacity-block"
       },
       "Type": "instant"
   }
   ```

1. **啟動機群。**

   使用以下 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 命令。

   ```
   aws ec2 create-fleet --cli-input-json file://config.json
   ```

   如需詳細資訊，請參閱[建立 EC2 Fleet](create-ec2-fleet.md#create-ec2-fleet-procedure)。

# 教學課程：設定您的 EC2 機群，在可中斷的容量保留中啟動執行個體
<a name="ec2-fleet-launch-instances-interruptible-cr-walkthrough"></a>

本教學課程會逐步解說您必須執行的步驟，以便 EC2 機群在可中斷的容量保留中啟動執行個體。

可中斷容量預留代表 AWS 組織內隨需容量預留擁有者提供給您的備用容量。這些保留適用於可中斷的工作負載，因為容量擁有者可以隨時透過 2 分鐘的中斷通知回收容量，之後 EC2 會終止執行個體。如需可中斷容量保留的詳細資訊，請參閱 [可中斷的容量保留](interruptible-capacity-reservations.md)。

EC2 機群請求的目標容量應小於或等於您要鎖定的可中斷容量保留的可用容量。如果目標容量請求超過可中斷容量保留的可用容量，EC2 機群會盡可能啟動執行個體，並在 API 回應中報告啟動的執行個體。

在可中斷容量保留中執行的執行個體會繼續執行，直到您手動停止或終止，或容量擁有者回收容量為止。當容量擁有者回收容量時，Amazon EC2 會在終止執行個體前 2 分鐘傳送 Amazon EventBridge 通知。

## 考量事項
<a name="ec2-fleet-interruptible-cr-considerations"></a>
+ 只有 類型的 EC2 機群請求`instant`支援在可中斷容量保留中啟動執行個體。
+ `DefaultTargetCapacityType` 不支援使用 `OnDemandTargetCapacity`或 `SpotTargetCapacity`同時`reserved-capacity`將 設定為 。
+ 當您指定多個啟動範本時，每個範本都以不同的可中斷容量保留為目標，EC2 機群會跨所有相符的保留佈建執行個體。
+ 對於可中斷的容量保留，EC2 機群不會回復為在所需目標容量的剩餘時間內啟動隨需執行個體或 Spot 執行個體。

## 驗證許可
<a name="ec2-fleet-interruptible-cr-verify-permissions"></a>

在建立 EC2 機群之前，請確認您擁有具有必要許可的 IAM 角色。如需詳細資訊，請參閱[EC2 Fleet 先決條件](ec2-fleet-prerequisites.md)。

若要在可中斷容量保留中啟動執行個體，您必須執行下列步驟：

## 步驟 1：建立啟動範本
<a name="ec2-fleet-interruptible-cr-step1"></a>

使用 [create-launch-template](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-launch-template.html) 命令來建立啟動範本，以指定要鎖定的可中斷容量保留。在啟動範本中，`MarketType`將 設定為 ，`interruptible-capacity-reservation`並指定可中斷容量保留`CapacityReservationId`的 。

啟動範本組態範例：

```
{
    "LaunchTemplateName": "interruptible-cr-launch-template",
    "LaunchTemplateData": {
        "InstanceType": "m5.large",
        "ImageId": "ami-0abcdef1234567890",
        "CapacityReservationSpecification": {
            "CapacityReservationTarget": {
                "CapacityReservationId": "cr-0123456789abcdef0"
            }
        },
        "InstanceMarketOptions": {
            "MarketType": "interruptible-capacity-reservation"
        }
    }
}
```

範例輸出

```
{
    "LaunchTemplate": {
        "LaunchTemplateId": "lt-0123456789example",
        "LaunchTemplateName": "interruptible-cr-launch-template",
        "CreateTime": "2026-03-12T10:00:00.000Z",
        "CreatedBy": "arn:aws:iam::123456789012:user/Admin",
        "DefaultVersionNumber": 1,
        "LatestVersionNumber": 1
    }
}
```

如需詳細資訊，請參閱[建立 Amazon EC2 啟動範本](create-launch-template.md)。

## 步驟 2：設定 EC2 機群
<a name="ec2-fleet-interruptible-cr-step2"></a>

為 EC2 機群建立指定啟動範本和目標容量的組態檔案。下列組態使用`interruptible-cr-launch-template`您在步驟 1 中建立的啟動範本。

使用 `reserved-capacity`做為 `interruptible-capacity-reservation`時，您必須指定 `ReservedCapacityOptions` ，並將 `ReservationType`設定為 `DefaultTargetCapacityType`。

建立名為 `config.json` 且具有下列內容的檔案：

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "interruptible-cr-launch-template",
                "Version": "1"
            },
            "Overrides": [
                {
                    "InstanceType": "m5.large",
                    "AvailabilityZone": "us-east-1a"
                }
            ]
        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 10,
        "DefaultTargetCapacityType": "reserved-capacity"
    },
    "ReservedCapacityOptions": {
        "ReservationType": ["interruptible-capacity-reservation"]
    },
    "Type": "instant"
}
```

金鑰組態參數：


| 參數 | Description | 
| --- | --- | 
| DefaultTargetCapacityType | 設定為 reserved-capacity，表示執行個體應該以預留容量啟動。 | 
| ReservedCapacityOptions | 指定預留容量的類型。對於可中斷的容量保留，請將 ReservationType設定為 ["interruptible-capacity-reservation"]。 | 
| Type | 必須設定為 instant。中斷容量保留僅支援即時機群。 | 

## 步驟 3：啟動機群並檢視結果
<a name="ec2-fleet-interruptible-cr-step3"></a>

使用 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 命令來建立機群：

```
aws ec2 create-fleet \
    --cli-input-json file://config.json
```

使用上述組態建立機`instant`群後，EC2 機群會在可中斷容量保留中啟動 10 個執行個體，以符合目標容量。

**注意**  
如果機群無法滿足完整目標容量，回應會包含已啟動的執行個體，以及未滿足容量的任何錯誤。

範例輸出

```
{
    "FleetId": "fleet-12345678-1234-1234-1234-123456789012",
    "Instances": [
        {
            "LaunchTemplateAndOverrides": {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateId": "lt-0123456789example",
                    "Version": "1"
                },
                "Overrides": {
                    "InstanceType": "m5.large",
                    "AvailabilityZone": "us-east-1a"
                }
            },
            "Lifecycle": "interruptible-capacity-reservation",
            "InstanceIds": [
                "i-0123456789example1",
                "i-0123456789example2",
                "i-0123456789example3",
                "i-0123456789example4",
                "i-0123456789example5",
                "i-0123456789example6",
                "i-0123456789example7",
                "i-0123456789example8",
                "i-0123456789example9",
                "i-0123456789example0"
            ],
            "InstanceType": "m5.large",
            "Platform": "Linux/UNIX"
        }
    ],
    "Errors": []
}
```

如需詳細資訊，請參閱[建立 EC2 Fleet](create-ec2-fleet.md)。

## 清除
<a name="ec2-fleet-interruptible-cr-cleanup"></a>

若要停止產生費用，請在不再需要執行個體時將其終止。請注意，當容量擁有者回收容量時，EC2 也會自動終止在可中斷容量保留中啟動的執行個體。

## 相關資源
<a name="ec2-fleet-interruptible-cr-related-resources"></a>
+ [可中斷的容量保留](interruptible-capacity-reservations.md)
+ [使用 EC2 隨需容量保留來保留運算容量](ec2-capacity-reservations.md)
+ [使用 EC2 機群](manage-ec2-fleet.md)
+ [建立 EC2 Fleet](create-ec2-fleet.md)
+ [將執行個體啟動參數存放在 Amazon EC2 啟動範本中](ec2-launch-templates.md)

# EC2 機群的範例 CLI 組態
<a name="ec2-fleet-examples"></a>

您可以在 JSON 檔案中定義 EC2 機群組態，然後以 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 指令引用該檔案，以建立您的機群，如下所示：

```
aws ec2 create-fleet --cli-input-json file://file_name.json
```

下列範例說明各種 EC2 機群使用案例的啟動組態。如需組態參數的詳細資訊，請參閱 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html)。

**Topics**
+ [範例 1：啟動 Spot 執行個體做為預設購買選項](#ec2-fleet-config1)
+ [範例 2：啟動 隨需執行個體 做為預設購買選項](#ec2-fleet-config2)
+ [範例 3：啟動 隨需執行個體 做為主要容量](#ec2-fleet-config3)
+ [範例 4：使用多個容量保留來啟動隨需執行個體](#ec2-fleet-config5)
+ [範例 5：當總目標容量超過未使用的容量保留數目時，使用容量保留來啟動隨需執行個體](#ec2-fleet-config6)
+ [範例 6：使用目標容量保留啟動隨需執行個體](#ec2-fleet-config7)
+ [範例 7：設定容量重新平衡，以啟動取代 Spot 執行個體](#ec2-fleet-config8)
+ [範例 8：在容量最佳化機群中啟動 Spot 執行個體](#ec2-fleet-config9)
+ [範例 9：使用優先順序在容量最佳化機群中啟動 Spot 執行個體](#ec2-fleet-config10)
+ [範例 10：在 price-capacity-optimized 機群中啟動 Spot 執行個體](#ec2-fleet-config11)
+ [範例 11：設定屬性型執行個體類型選取](#ec2-fleet-config12)

如需類型 `instant` 機群的更多 CLI 範例，請參閱 [設定 instant 類型的 EC2 機群](instant-fleet.md)。

## 範例 1：啟動 Spot 執行個體做為預設購買選項
<a name="ec2-fleet-config1"></a>

下列範例指定 EC2 機群中所需的最小參數：啟動範本、目標容量和預設購買選項。啟動範本由其啟動範本 ID 和版本編號識別。機群的目標容量為 2 個執行個體，預設購買選項為 `spot`，會讓機群啟動 2 個 Spot 執行個體。

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "lt-0e8c754449b27161c",
                "Version": "1"
            }

        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 2,
        "DefaultTargetCapacityType": "spot"
    }
}
```

## 範例 2：啟動 隨需執行個體 做為預設購買選項
<a name="ec2-fleet-config2"></a>

下列範例指定 EC2 機群中所需的最小參數：啟動範本、目標容量和預設購買選項。啟動範本由其啟動範本 ID 和版本編號識別。機群的目標容量為 2 個執行個體，預設購買選項為 `on-demand`，會讓機群啟動 2 個 隨需執行個體。

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "lt-0e8c754449b27161c",
                "Version": "1"
            }

        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 2,
        "DefaultTargetCapacityType": "on-demand"
    }
}
```

## 範例 3：啟動 隨需執行個體 做為主要容量
<a name="ec2-fleet-config3"></a>

下列範例指定機群 2 個執行個體的總目標容量，以及 1 個隨需執行個體的目標容量。預設購買選項為 `spot`。機群依照指定啟動 1 個隨需執行個體，但需要再啟動一個執行個體才能實現總目標容量。其差值的購買選項計算式為 `TotalTargetCapacity` – `OnDemandTargetCapacity` = `DefaultTargetCapacityType`，這會讓機群啟動 1 個 Spot 執行個體。

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "lt-0e8c754449b27161c",
                "Version": "1"
            }

        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 2,
        "OnDemandTargetCapacity": 1,
        "DefaultTargetCapacityType": "spot"
    }
}
```

## 範例 4：使用多個容量保留來啟動隨需執行個體
<a name="ec2-fleet-config5"></a>

您可以將容量保留的使用策略設為 `use-capacity-reservations-first`，以將機群設定為在啟動隨需執行個體時首先使用隨需容量保留。本例示範當容量保留比所需目標容量更多時，機群如何選取要使用的容量保留。

本例使用的機群組態如下：
+ 目標容量：12 個隨需執行個體
+ 總計未使用的容量保留：15 (大於機群的目標容量：12 個隨需執行個體)
+ 容量保留集區數目：3 (`m5.large`、`m4.xlarge` 和 `m4.2xlarge`)
+ 每個集區的容量保留數目：5
+ 隨需分配策略：`lowest-price` (當多個執行個體集區中有多個未使用的容量保留時，機群會根據隨需分配策略決定要用來啟動隨需執行個體的集區。)

  請注意，您也可以使用 `prioritized` 分配策略，而不使用 `lowest-price` 分配策略。

**Capacity Reservations**

帳戶在 3 個不同的集區中有以下 15 個未使用的容量保留。每個集區中的容量保留數目由 `AvailableInstanceCount` 表示。

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

{
    "CapacityReservationId": "cr-222", 
    "InstanceType": "m4.xlarge", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1a", 
    "AvailableInstanceCount": 5, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}

{
    "CapacityReservationId": "cr-333", 
    "InstanceType": "m4.2xlarge", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1a", 
    "AvailableInstanceCount":5, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}
```

**機群組態**

下列機群組態僅顯示此範例的相關組態。總目標容量為 12，預設目標容量類型為 `on-demand`。隨需分配策略為 `lowest-price`。容量保留的使用策略為 `use-capacity-reservations-first`。

在此範例中， 隨需執行個體 價格如下：
+ `m5.large` – 每小時 0.096 美元
+ `m4.xlarge` – 每小時 0.20 美元
+ `m4.2xlarge` – 每小時 0.40 美元

**注意**  
機群類型必須為 `instant`。其他機群類型不支援 `use-capacity-reservations-first`。

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "lt-abc1234567example",
                "Version": "1"
            },
            "Overrides": [
                {
                  "InstanceType": "m5.large",
                  "AvailabilityZone": "us-east-1a",
                  "WeightedCapacity": 1
                },
                {
                  "InstanceType": "m4.xlarge",
                  "AvailabilityZone": "us-east-1a",
                  "WeightedCapacity": 1
                },
                {
                  "InstanceType": "m4.2xlarge",
                  "AvailabilityZone": "us-east-1a",
                  "WeightedCapacity": 1
                }
              ]

        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 12,
        "DefaultTargetCapacityType": "on-demand"
    },
    "OnDemandOptions": {
        "AllocationStrategy": "lowest-price",
        "CapacityReservationOptions": {
            "UsageStrategy": "use-capacity-reservations-first"
        }
    },
    "Type": "instant"
}
```

使用上述組態建立 `instant` 叢集之後，會啟動以下 12 個執行個體以符合目標容量：
+ 5 個 `m5.large` 隨需執行個體在 `us-east-1a` 中 (`us-east-1a` 中的 `m5.large` 價格最低)，並且有 5 個可用的未使用 `m5.large`容量保留。
+ 5 個 `m4.xlarge` 隨需執行個體在 us-east-1a 中 – `us-east-1a` 中的 `m4.xlarge` 價格次低，並且有 5 個可用的未使用 `m4.xlarge`容量保留。
+ 2 個 `m4.2xlarge` 隨需執行個體在 us-east-1a 中 – `us-east-1a` 中的 `m4.2xlarge` 價格第三低，並且有 5 個可用的未使用 `m4.2xlarge`容量保留，只需要其中 2 個就可滿足目標容量

啟動機群後，您可以執行 [describe-capacity-reservations](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html)，以查看還剩餘多少個未使用的容量保留。在本例中，您會看到下面回應，這顯示所有的 `m5.large` 和 `m4.xlarge` 容量保留都已使用，只剩 3 個 `m4.2xlarge`容量保留未使用。

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

{
    "CapacityReservationId": "cr-222",
    "InstanceType": "m4.xlarge", 
    "AvailableInstanceCount": 0
}

{
    "CapacityReservationId": "cr-333",
    "InstanceType": "m4.2xlarge", 
    "AvailableInstanceCount": 3
}
```

## 範例 5：當總目標容量超過未使用的容量保留數目時，使用容量保留來啟動隨需執行個體
<a name="ec2-fleet-config6"></a>

您可以將容量保留的使用策略設為 `use-capacity-reservations-first`，以將機群設定為在啟動隨需執行個體時首先使用隨需容量保留。本例示範當總計目標容量超過可用的未使用容量保留數目時，機群會如何選取用來啟動隨需執行個體的執行個體集區。

本例使用的機群組態如下：
+ 目標容量：16 個隨需執行個體
+ 總計未使用的容量保留：15 (小於機群的目標容量：16 個隨需執行個體)
+ 容量保留集區數目：3 (`m5.large`、`m4.xlarge` 和 `m4.2xlarge`)
+ 每個集區的容量保留數目：5
+ 隨需分配策略：`lowest-price` (當未使用的容量保留數目小於隨需目標容量時，機群會根據隨需分配策略決定要用來啟動剩餘隨需容量的集區。)

  請注意，您也可以使用 `prioritized` 分配策略，而不使用 `lowest-price` 分配策略。

**Capacity Reservations**

帳戶在 3 個不同的集區中有以下 15 個未使用的容量保留。每個集區中的容量保留數目由 `AvailableInstanceCount` 表示。

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

{
    "CapacityReservationId": "cr-222", 
    "InstanceType": "m4.xlarge", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1a", 
    "AvailableInstanceCount": 5, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}

{
    "CapacityReservationId": "cr-333", 
    "InstanceType": "m4.2xlarge", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1a", 
    "AvailableInstanceCount":5, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}
```

**機群組態**



下列機群組態僅顯示此範例的相關組態。總目標容量為 16，預設目標容量類型為 `on-demand`。隨需分配策略為 `lowest-price`。容量保留的使用策略為 `use-capacity-reservations-first`。

在此範例中， 隨需執行個體 價格如下：
+ m5.large – 每小時 0.096 USD
+ m4.xlarge – 每小時 0.20 USD
+ m4.2xlarge – 每小時 0.40 USD

**注意**  
機群類型必須為 `instant`。其他機群類型不支援 `use-capacity-reservations-first`。

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "lt-0e8c754449b27161c",
                "Version": "1"
            },
            "Overrides": [
                {
                  "InstanceType": "m5.large",
                  "AvailabilityZone": "us-east-1a",
                  "WeightedCapacity": 1
                },
                {
                  "InstanceType": "m4.xlarge",
                  "AvailabilityZone": "us-east-1a",
                  "WeightedCapacity": 1
                },
                {
                  "InstanceType": "m4.2xlarge",
                  "AvailabilityZone": "us-east-1a",
                  "WeightedCapacity": 1
                }
              ]

        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 16,
        "DefaultTargetCapacityType": "on-demand"
    },
    "OnDemandOptions": {
        "AllocationStrategy": "lowest-price"
        "CapacityReservationOptions": {
            "UsageStrategy": "use-capacity-reservations-first"
        }
    },
    "Type": "instant",
}
```

使用上述組態建立 `instant` 叢集之後，會啟動以下 16 個執行個體以符合目標容量：
+ 6 個 `m5.large` 隨需執行個體在 `us-east-1a` 中 – `us-east-1a` 中的 `m5.large` 價格最低，並且有 5 個可用的未使用 `m5.large`容量保留。會先使用容量保留來啟動 5 個隨需執行個體。在使用了其餘的 `m4.xlarge` 和 `m4.2xlarge` 容量保留之後，為了滿足目標容量，會根據隨需分配策略啟動額外的隨需執行個體，在本例中為 `lowest-price`。
+ 5 個 `m4.xlarge` 隨需執行個體在 `us-east-1a` 中 – `us-east-1a` 中的 `m4.xlarge` 價格次低，並且有 5 個可用的未使用 `m4.xlarge`容量保留。
+ 5 個 `m4.2xlarge` 隨需執行個體在 `us-east-1a` 中 – `us-east-1a` 中的 `m4.2xlarge` 價格第三低，並且有 5 個可用的未使用 `m4.2xlarge`容量保留。

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

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

{
    "CapacityReservationId": "cr-222",
    "InstanceType": "m4.xlarge", 
    "AvailableInstanceCount": 0
}

{
    "CapacityReservationId": "cr-333",
    "InstanceType": "m4.2xlarge", 
    "AvailableInstanceCount": 0
}
```

## 範例 6：使用目標容量保留啟動隨需執行個體
<a name="ec2-fleet-config7"></a>

您可以將容量保留的使用策略設為 `use-capacity-reservations-first`，以將機群設定為在啟動 隨需執行個體 時首先使用 `targeted` 隨需容量保留。本例示範如何使用 `targeted` 容量保留來啟動隨需執行個體，其中容量保留的屬性皆相同，但其可用區域 (`us-east-1a` 和 `us-east-1b`) 不同。本例亦示範當總計目標容量超過可用的未使用容量保留數目時，機群會如何選取用來啟動隨需執行個體的執行個體集區。

本例使用的機群組態如下：
+ 目標容量：10 個隨需執行個體
+ 總計未使用的 `targeted` 容量保留：6 (小於機群的隨需目標容量：10 個隨需執行個體)
+ 容量保留集區數目：2 (`us-east-1a` 和 `us-east-1b`)
+ 每個集區的容量保留數目：3
+ 隨需分配策略：`lowest-price` (當未使用的容量保留數目小於隨需目標容量時，機群會根據隨需分配策略決定要用來啟動剩餘隨需容量的集區。)

  請注意，您也可以使用 `prioritized` 分配策略，而不使用 `lowest-price` 分配策略。

如需完成此範例所須執行程序的逐步演練，請參閱 [教學課程：使用目標容量保留設定 EC2 機群啟動隨需執行個體](ec2-fleet-launch-on-demand-instances-using-targeted-capacity-reservations-walkthrough.md)。

**Capacity Reservations**

帳戶在 2 個不同的集區中有以下 6 個未使用的容量保留。在本例中，集區的可用區域有所不同。每個集區中的容量保留數目由 `AvailableInstanceCount` 表示。

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

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

**機群組態**

下列機群組態僅顯示此範例的相關組態。總目標容量為 10，預設目標容量類型為 `on-demand`。隨需分配策略為 `lowest-price`。容量保留的使用策略為 `use-capacity-reservations-first`。

在本例中，`us-east-1` 中的 `c5.xlarge` 隨需執行個體價格為每小時 0.17 美元。

**注意**  
機群類型必須為 `instant`。其他機群類型不支援 `use-capacity-reservations-first`。

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-launch-template",
                "Version": "1"
            },
            "Overrides": [
               {
                   "InstanceType": "c5.xlarge",
                   "AvailabilityZone": "us-east-1a"
               },
               {
                    "InstanceType": "c5.xlarge",
                    "AvailabilityZone": "us-east-1b"
               }
            ]
        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 10,
        "DefaultTargetCapacityType": "on-demand"
    },
    "OnDemandOptions": {
        "AllocationStrategy": "lowest-price",
        "CapacityReservationOptions": {
             "UsageStrategy": "use-capacity-reservations-first"
         }
    },
    "Type": "instant"
}
```

使用上述組態建立 `instant` 機群之後，會啟動以下 10 個執行個體以符合目標容量：
+ 會先使用容量保留來啟動 6 個隨需執行個體，如下所示：
  + 3 個隨需執行個體已在 `us-east-1a` 中啟動至 3 個 `c5.xlarge` `targeted` 容量保留
  + 3 個隨需執行個體已在 `c5.xlarge` 中啟動至 3 個 `targeted` `us-east-1b` 容量保留
+ 為了滿足目標容量，會根據隨需分配策略 (在本例中為 `lowest-price`) 使用一般隨需容量來啟動 4 個額外的隨需執行個體。不過，由於集區的價格相同 (因為價格是按區域而非可用區域計價)，因此機群會使用任一個集區來啟動剩餘的 4 個隨需執行個體。

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

```
{
    "CapacityReservationId": "cr-111",
    "InstanceType": "c5.xlarge",  
    "AvailableInstanceCount": 0
}

{
    "CapacityReservationId": "cr-222",
    "InstanceType": "c5.xlarge", 
    "AvailableInstanceCount": 0
}
```

## 範例 7：設定容量重新平衡，以啟動取代 Spot 執行個體
<a name="ec2-fleet-config8"></a>

下列範例會設定 EC2 機群，以便 Amazon EC2 在機群中對 Spot 執行個體發出重新平衡建議時啟動替代 Spot 執行個體。若要為 `ReplacementStrategy` 設定 Spot 執行個體的自動替代，請指定 `launch-before-terminate`。若要設定從啟動新替代 Spot 執行個體到自動刪除舊 Spot 執行個體的時間延遲，請針對 `termination-delay`，指定一值 (以秒為單位)。如需詳細資訊，請參閱 [組態選項](ec2-fleet-capacity-rebalance.md#ec2-fleet-capacity-rebalance-config-options)。

**注意**  
建議您僅在可以預測執行個體關閉程序需要多長時間才能完成時，才使用 `launch-before-terminate`，以便只在這些程序完成後才會終止舊執行個體。所有執行個體在執行時，您需要支付所有執行個體的費用。

容量重新平衡策略的有效性取決於 EC2 機群請求中指定的 Spot 容量集區數目。我們建議您使用多樣化的執行個體類型和可用區域的集合來設定機群，若要 `AllocationStrategy`，請指定 `capacity-optimized`。如需設定 EC2 機群容量重新平衡時應考量哪些項目的詳細資訊，請參閱 [在 EC2 機群和 Spot 機群中使用容量重新平衡，來取代具有風險的 Spot 執行個體](ec2-fleet-capacity-rebalance.md)。

```
{
    "ExcessCapacityTerminationPolicy": "termination",
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "LaunchTemplate",
                "Version": "1"
            },
                 "Overrides": [
                       {
                           "InstanceType": "c3.large",
                           "WeightedCapacity": 1,
                            "Placement": {
                               "AvailabilityZone": "us-east-1a"
                           }
                       },
                       {
                           "InstanceType": "c4.large",
                           "WeightedCapacity": 1,
                            "Placement": {
                               "AvailabilityZone": "us-east-1a"
                           }
                       },
                       {
                           "InstanceType": "c5.large",
                           "WeightedCapacity": 1,
                            "Placement": {
                               "AvailabilityZone": "us-east-1a"
                           }
                       }
                ] 
          }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 5,
        "DefaultTargetCapacityType": "spot"
    },
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized",
        "MaintenanceStrategies": {
            "CapacityRebalance": {
                "ReplacementStrategy": "launch-before-terminate",
                "TerminationDelay": "720"
            }
        }
    }
}
```

## 範例 8：在容量最佳化機群中啟動 Spot 執行個體
<a name="ec2-fleet-config9"></a>

下列範例示範如何使用可最佳化容量的 Spot 分配策略來設定 EC2 機群。若要最佳化容量，您必須將 `AllocationStrategy` 設為 `capacity-optimized`。

在下列範例中，三個啟動規格指定三個 Spot 容量集區。目標容量為 50 個 Spot 執行個體。EC2 機群嘗試將 50 個 Spot 執行個體啟動到 Spot 容量集區中，且擁有啟動中執行個體數目之最佳容量。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized",
        },
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-launch-template",
                "Version": "1"
            },
                 "Overrides": [
                       {
                           "InstanceType": "r4.2xlarge",
                           "Placement": {
                               "AvailabilityZone": "us-west-2a"
                           },
                      },
                       {
                           "InstanceType": "m4.2xlarge",
                           "Placement": {
                               "AvailabilityZone": "us-west-2b"
                           },
                       }, 
                       {
                           "InstanceType": "c5.2xlarge",
                           "Placement": {
                               "AvailabilityZone": "us-west-2b"
                           }
                       }
                 ] 
           }
    ],
    "TargetCapacitySpecification": {
            "TotalTargetCapacity": 50,
            "DefaultTargetCapacityType": "spot"

    }
}
```

## 範例 9：使用優先順序在容量最佳化機群中啟動 Spot 執行個體
<a name="ec2-fleet-config10"></a>

下列範例示範在盡最大努力使用優先順序時，如何使用可最佳化容量的 Spot 分配策略來設定 EC2 機群。

當您使用 `capacity-optimized-prioritized` 分配策略時，您可以使用 `Priority` 參數來指定 Spot 容量集區的優先順序，其中數字越小，優先順序越高。如果您對它們一視同仁，也可以為數個 Spot 容量集區設定相同的優先順序。如果您沒有設定集區的優先順序，集區將被視為最後一個優先順序。

若要排定 Spot 容量集區的優先順序，您必須將 `AllocationStrategy` 設為 `capacity-optimized-prioritized`。EC2 機群將首先針對容量進行最佳化，但會盡力實現優先順序 (例如，若實現優先順序不會顯著影響 EC2 機群佈建最佳容量的能力)。對於必須將中斷可能性降至最低的工作負載來說，這是一個很好的選擇，而且某些執行個體類型的偏好也很重要。

在下列範例中，三個啟動規格指定三個 Spot 容量集區。每個集區都有優先順序，其中數字越小，優先順序越高。目標容量為 50 個 Spot 執行個體。EC2 機群嘗試以最高優先順序在 Spot 容量集區中啟動 50 個 Spot 執行個體，但首先針對容量進行最佳化。

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized-prioritized"
        },
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-launch-template",
                "Version": "1"
            },
                 "Overrides": [
                        {
                           "InstanceType": "r4.2xlarge",    
                           "Priority": 1,
                           "Placement": {
                               "AvailabilityZone": "us-west-2a"
                           },
                      },
                       {
                           "InstanceType": "m4.2xlarge",
                           "Priority": 2,
                           "Placement": {
                               "AvailabilityZone": "us-west-2b"
                           },
                       }, 
                       {
                           "InstanceType": "c5.2xlarge",
                           "Priority": 3,
                           "Placement": {
                               "AvailabilityZone": "us-west-2b"
                           }
                       }
                  ] 
             }
    ],
    "TargetCapacitySpecification": {
            "TotalTargetCapacity": 50,
            "DefaultTargetCapacityType": "spot"
}
```

## 範例 10：在 price-capacity-optimized 機群中啟動 Spot 執行個體
<a name="ec2-fleet-config11"></a>

下列範例示範如何使用可最佳化容量且價格最低的 Spot 分配策略來設定 EC2 機群。若要在將價格納入考慮的同時最佳化容量，您必須將 Spot `AllocationStrategy` 設定為 `price-capacity-optimized`。

在下列範例中，三個啟動規格指定三個 Spot 容量集區。目標容量為 50 個 Spot 執行個體。EC2 機群嘗試將 50 個 Spot 執行個體啟動到 Spot 容量集區中，且擁有啟動中執行個體數目之最佳容量，同時還會選擇價格最低的集區。

```
{
    "SpotOptions": {
        "AllocationStrategy": "price-capacity-optimized",
        "MinTargetCapacity": 2,
        "SingleInstanceType": true
    },
    "OnDemandOptions": {
        "AllocationStrategy": "lowest-price"
    },
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-launch-template",
                "Version": "1"
            },
                 "Overrides": [
                       {
                           "InstanceType": "r4.2xlarge",
                           "Placement": {
                               "AvailabilityZone": "us-west-2a"
                           },
                      },
                       {
                           "InstanceType": "m4.2xlarge",
                           "Placement": {
                               "AvailabilityZone": "us-west-2b"
                           },
                       }, 
                       {
                           "InstanceType": "c5.2xlarge",
                           "Placement": {
                               "AvailabilityZone": "us-west-2b"
                           }
                       }
                 ] 
           }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 50,
        "OnDemandTargetCapacity":0,
        "SpotTargetCapacity":50,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

## 範例 11：設定屬性型執行個體類型選取
<a name="ec2-fleet-config12"></a>

下列範例示範如何將 EC2 機群設定為使用屬性型執行個體類型選取來識別執行個體類型。若要指定必要的執行個體屬性，您可以在 `InstanceRequirements` 結構中指定屬性。

在下列範例中，指定了兩個執行個體屬性：
+ `VCpuCount` – 至少指定 2 個 vCPU。由於未指定最大值，因此沒有最大限制。
+ `MemoryMiB` – 至少指定 4 MiB 的記憶體。由於未指定最大值，因此沒有最大限制。

將會識別任何具有 2 個或更多 vCPU 和 4 MiB 或更多記憶體的執行個體類型。但是，當 [EC2 機群佈建機群](ec2-fleet-attribute-based-instance-type-selection.md#how-ef-uses-abs)時，價格保護和分配策略可能會排除某些執行個體類型。

如需您可指定之所有可能屬性的清單和說明，請參閱 *Amazon EC2 API 參考*中的[InstanceRequirements](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_InstanceRequirements.html)。

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

# 範例 CLI 組態 Spot 機群
<a name="spot-fleet-examples"></a>

您可以在 JSON 檔案中定義 Spot 機群組態，然後使用 [request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html) AWS CLI 命令參考該檔案來建立機群，如下所示：

```
aws ec2 request-spot-fleet --spot-fleet-request-config file://file_name.json
```

下列範例說明各種 Spot 機群使用案例的啟動組態。如需組態參數的詳細資訊，請參閱 [request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html)。如需有關建立 Spot 機群的詳細資訊，請參閱 [建立 Spot 機群](create-spot-fleet.md)。

**注意**  
對於 Spot 機群，您無法在啟動範本或啟動規格中指定網路介面 ID。確保省略啟動範本或啟動規格中的 `NetworkInterfaceID` 參數。

**Topics**
+ [範例 1：使用區域中最低價格的可用區域來啟動 Spot 執行個體](#fleet-config1)
+ [範例 2：使用清單中最低價格的可用區域來啟動 Spot 執行個體](#fleet-config2)
+ [範例 3：使用清單中最低價格的執行個體類型來啟動 Spot 執行個體](#fleet-config3)
+ [範例 4。覆寫請求的價格](#fleet-config4)
+ [範例 5：使用多樣化分配策略來啟動 Spot 機群](#fleet-config5)
+ [範例 6：使用執行個體權重來啟動 Spot 機群](#fleet-config6)
+ [範例 7：使用隨需容量來啟動 Spot 機群](#fleet-config7)
+ [範例 8：設定容量重新平衡，以啟動取代 Spot 執行個體](#fleet-config8)
+ [範例 9：在容量最佳化機群中啟動 Spot 執行個體](#fleet-config9)
+ [範例 10：使用優先順序在容量最佳化機群中啟動 Spot 執行個體](#fleet-config10)
+ [範例 11：在 priceCapacityOptimized 機群中啟動 Spot 執行個體](#fleet-config11)
+ [範例 12：設定屬性型執行個體類型選取](#fleet-config12)

## 範例 1：使用區域中最低價格的可用區域來啟動 Spot 執行個體
<a name="fleet-config1"></a>

下列的範例指定了單一啟動規格，其中未包含可用區域或子網路。Spot 機群會在具有預設子網路的最低價格可用區域中，啟動執行個體。您所支付的價格不會超過隨需價格。

```
{
  "TargetCapacity": 20,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "KeyName": "my-key-pair",
          "SecurityGroups": [
              {
                  "GroupId": "sg-1a2b3c4d"
              }
          ],
          "InstanceType": "m3.medium",
          "IamInstanceProfile": {
              "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role"
          }
      }
  ]
}
```

## 範例 2：使用清單中最低價格的可用區域來啟動 Spot 執行個體
<a name="fleet-config2"></a>

下列的範例指定了兩種啟動規格，各包含不同的可用區域或子網路，但具有相同的執行個體類型和 AMI。

**可用區域**

Spot 機群會在您所指定最低價格可用區域的預設子網路中，啟動執行個體。

```
{
  "TargetCapacity": 20,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "KeyName": "my-key-pair",
          "SecurityGroups": [
              {
                  "GroupId": "sg-1a2b3c4d"
              }
          ],
          "InstanceType": "m3.medium",
          "Placement": {
              "AvailabilityZone": "us-west-2a, us-west-2b"
          },
          "IamInstanceProfile": {
              "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role"
          }
      }
  ]
}
```

**子網路**

您可以指定預設子網路或非預設子網路，而非預設子網路可以是來自預設 VPC 或非預設 VPC。Spot 服務會在最低價格可用區域的任何可用子網路中，啟動執行個體。

您不能在 Spot 機群請求中指定來自同一個可用區域的不同子網路。

```
{
  "TargetCapacity": 20,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "KeyName": "my-key-pair",
          "SecurityGroups": [
              {
                  "GroupId": "sg-1a2b3c4d"
              }
          ],
          "InstanceType": "m3.medium",
          "SubnetId": "subnet-a61dafcf, subnet-65ea5f08",
          "IamInstanceProfile": {
              "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role"
          }
      }
  ]
}
```

如果執行個體是在預設的 VPC 中啟動，則其預設會接收公有 IPv4 位址。如果執行個體是在非預設的 VPC 中啟動，則其預設不會接收公有 IPv4 位址。在預設規格中啟動網路介面，來指派公有 IPv4 位址給在非預設 VPC 中啟動的執行個體。指定網路介面時，必須加入使用網路介面的子網路 ID 和安全群組 ID。

```
  ...       
      {
          "ImageId": "ami-1a2b3c4d",
          "KeyName": "my-key-pair",
          "InstanceType": "m3.medium",
          "NetworkInterfaces": [
              {
                  "DeviceIndex": 0,
                  "SubnetId": "subnet-1a2b3c4d",
                  "Groups": [ "sg-1a2b3c4d" ],
                  "AssociatePublicIpAddress": true
              }
          ],
          "IamInstanceProfile": {
              "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role"
          }
      }
  ...
```

## 範例 3：使用清單中最低價格的執行個體類型來啟動 Spot 執行個體
<a name="fleet-config3"></a>

下列的範例指定了兩種啟動組態，各具有不同的執行個體類型，但包含相同的 AMI 和可用區域或子網路。Spot 機群會使用具有最低價格的指定執行個體類型，來啟動執行個體。

**可用區域**

```
{
  "TargetCapacity": 20,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "SecurityGroups": [
              {
                  "GroupId": "sg-1a2b3c4d"
              }
          ],
          "InstanceType": "c5.4xlarge",
          "Placement": {
            "AvailabilityZone": "us-west-2b"
          }
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "SecurityGroups": [
              {
                  "GroupId": "sg-1a2b3c4d"
              }
          ],
          "InstanceType": "r3.8xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          }
      }
  ]
}
```

**子網路**

```
{
  "TargetCapacity": 20,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "SecurityGroups": [
              {
                  "GroupId": "sg-1a2b3c4d"
              }
          ],
          "InstanceType": "c5.4xlarge",
          "SubnetId": "subnet-1a2b3c4d"
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "SecurityGroups": [
              {
                  "GroupId": "sg-1a2b3c4d"
              }
          ],
          "InstanceType": "r3.8xlarge",
          "SubnetId": "subnet-1a2b3c4d"
      }
  ]
}
```

## 範例 4。覆寫請求的價格
<a name="fleet-config4"></a>

我們建議您使用預設的最高價格，也就是隨需價格。如果想要的話，您可以指定機群請求的最高價格，和個別啟動規格的最高價格。

下列的範例指定了機群請求的最高價格，和三種啟動規格中其中兩種的最高價格。對於未指定最高價格的任何啟動規格，則會使用機群請求的最高價格。Spot 機群會使用具有最低價格的執行個體類型，來啟動執行個體。

**可用區域**

```
{
  "SpotPrice": "1.00",
  "TargetCapacity": 30,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c3.2xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          },
          "SpotPrice": "0.10"
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c3.4xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          },
          "SpotPrice": "0.20"
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c3.8xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          }
      }
    ]
}
```

**子網路**

```
{
  "SpotPrice": "1.00",
  "TargetCapacity": 30,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c3.2xlarge",
          "SubnetId": "subnet-1a2b3c4d",
          "SpotPrice": "0.10"
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c3.4xlarge",
          "SubnetId": "subnet-1a2b3c4d",
          "SpotPrice": "0.20"
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c3.8xlarge",
          "SubnetId": "subnet-1a2b3c4d"
      }
  ]
}
```

## 範例 5：使用多樣化分配策略來啟動 Spot 機群
<a name="fleet-config5"></a>

下列範例使用 `diversified` 分配策略。這些啟動規格各具有不同的執行個體類型，但包含相同的 AMI 和可用區域或子網路。Spot 機群會將 30 個執行個體分配給 3 種啟動規格，如此每種規格就有 10 個執行個體。如需詳細資訊，請參閱[使用配置策略來判斷 EC2 機群或 Spot 機群如何達成 Spot 和隨需容量](ec2-fleet-allocation-strategy.md)。

**可用區域**

```
{
  "SpotPrice": "0.70", 
  "TargetCapacity": 30,
  "AllocationStrategy": "diversified",
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c4.2xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          }
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "m3.2xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          }
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "r3.2xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          }
      }
  ]
}
```

**子網路**

```
{
    "SpotPrice": "0.70", 
    "TargetCapacity": 30,
    "AllocationStrategy": "diversified",
    "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
    "LaunchSpecifications": [
        {
            "ImageId": "ami-1a2b3c4d",
            "InstanceType": "c4.2xlarge",
            "SubnetId": "subnet-1a2b3c4d"
        },
        {
            "ImageId": "ami-1a2b3c4d",
            "InstanceType": "m3.2xlarge",
            "SubnetId": "subnet-1a2b3c4d"
        },
        {
            "ImageId": "ami-1a2b3c4d",
            "InstanceType": "r3.2xlarge",
            "SubnetId": "subnet-1a2b3c4d"
        }
    ]
}
```

最佳實務為增加 EC2 容量在其中一個可用區域停機時可以履行 Spot 請求的機會。此最佳做法可以讓區域之間多元化。針對此案例，請將可供您使用的各可用區域納入啟動規格之中。不要每次都使用相同的子網路，而是使用三個唯一的子網路 (各個都映射至不同的區域)。

**可用區域**

```
{
  "SpotPrice": "0.70", 
  "TargetCapacity": 30,
  "AllocationStrategy": "diversified",
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c4.2xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2a"
          }
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "m3.2xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          }
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "r3.2xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2c"
          }
      }
  ]
}
```

**子網路**

```
{
    "SpotPrice": "0.70", 
    "TargetCapacity": 30,
    "AllocationStrategy": "diversified",
    "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
    "LaunchSpecifications": [
        {
            "ImageId": "ami-1a2b3c4d",
            "InstanceType": "c4.2xlarge",
            "SubnetId": "subnet-1a2b3c4d"
        },
        {
            "ImageId": "ami-1a2b3c4d",
            "InstanceType": "m3.2xlarge",
            "SubnetId": "subnet-2a2b3c4d"
        },
        {
            "ImageId": "ami-1a2b3c4d",
            "InstanceType": "r3.2xlarge",
            "SubnetId": "subnet-3a2b3c4d"
        }
    ]
}
```

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

下列範例使用執行個體權重，這表示價格為每單位小時而非每執行個體小時的價格。每個啟動組態都列出了不同的執行個體類型和不同的權重。Spot 機群會使用具有最低每單位小時價格的執行個體類型。Spot 機群會將目標容量除以執行個體的權重，來計算出要啟動的 Spot 機群數量。如果結果不是整數，則 Spot 機群會將其捨入到下一個整數，以便您的機群大小不低於其目標容量。

如果 `r3.2xlarge` 的請求成功，Spot 會佈建 4 個這類執行個體。將 20 除以 6，會得出總共 3.33 個執行個體，接著再四捨五入為 4 個執行個體。

如果 `c3.xlarge` 的請求成功，Spot 會佈建 7 個這類執行個體。將 20 除以 3，會得出總共 6.66 個執行個體，接著再四捨五入為 7 個執行個體。

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

**可用區域**

```
{
  "SpotPrice": "0.70",
  "TargetCapacity": 20,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "r3.2xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          },
          "WeightedCapacity": 6
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c3.xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          },
          "WeightedCapacity": 3
      }
    ]
}
```

**子網路**

```
{
  "SpotPrice": "0.70",
  "TargetCapacity": 20,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "r3.2xlarge",
          "SubnetId": "subnet-1a2b3c4d",
          "WeightedCapacity": 6
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c3.xlarge",
          "SubnetId": "subnet-1a2b3c4d",
          "WeightedCapacity": 3
      }
  ]
}
```

## 範例 7：使用隨需容量來啟動 Spot 機群
<a name="fleet-config7"></a>

為確保永遠有執行個體容量，您可以在 Spot 機群請求中加入對隨需容量的請求。如果有容量，則隨需請求一律已履行。如有容量和可用性，則目標容量的餘額已履行做為 Spot 使用。

下列範例將所要的目標容量指定為 10，其中 5 個必須為隨需容量。未指定 Spot 容量；它暗含在目標容量減去隨需容量的餘額中。如果有可用的 Amazon EC2 容量和可用性，Amazon EC2 會啟動 5 個容量單位作為隨需容量，5 個容量單位 (10-5=5) 作為 Spot 容量。

```
{
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "AllocationStrategy": "lowestPrice",
  "TargetCapacity": 10,
  "SpotPrice": null,
  "ValidFrom": "2018-04-04T15:58:13Z",
  "ValidUntil": "2019-04-04T15:58:13Z",
  "TerminateInstancesWithExpiration": true,
  "LaunchSpecifications": [],
  "Type": "maintain",
  "OnDemandTargetCapacity": 5,
  "LaunchTemplateConfigs": [
    {
      "LaunchTemplateSpecification": {
        "LaunchTemplateId": "lt-0dbb04d4a6cca5ad1",
        "Version": "2"
      },
      "Overrides": [
        {
          "InstanceType": "t2.medium",
          "WeightedCapacity": 1,
          "SubnetId": "subnet-d0dc51fb"
        }
      ]
    }
  ]
}
```

## 範例 8：設定容量重新平衡，以啟動取代 Spot 執行個體
<a name="fleet-config8"></a>

下列範例會設定 Spot 機群，以便 Amazon EC2 在機群中對 Spot 執行個體發出重新平衡建議時啟動替代 Spot 執行個體。若要為 `ReplacementStrategy` 設定 Spot 執行個體的自動替代，請指定 `launch-before-terminate`。若要設定從啟動新替代 Spot 執行個體到自動刪除舊 Spot 執行個體的時間延遲，請針對 `termination-delay`，指定一值 (以秒為單位)。如需詳細資訊，請參閱[組態選項](ec2-fleet-capacity-rebalance.md#ec2-fleet-capacity-rebalance-config-options)。

**注意**  
建議僅在您可以預測執行個體關閉程序將需要多長時間才能完成時，才使用 `launch-before-terminate`。這可確保只在關機程序完成之後，才會終止舊執行個體。所有執行個體在執行時，您需要支付所有執行個體的費用。

容量重新平衡策略的有效性取決於 Spot 機群請求中指定的 Spot 容量集區數量。我們建議您使用多樣化的執行個體類型和可用區域的集合來設定機群，若要 `AllocationStrategy`，請指定 `capacityOptimized`。如需當設定 Spot 機群進行容量重新平衡時應考量哪些項目的詳細資訊，請參閱 [在 EC2 機群和 Spot 機群中使用容量重新平衡，來取代具有風險的 Spot 執行個體](ec2-fleet-capacity-rebalance.md)。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "capacityOptimized",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "LaunchTemplate",
                    "Version": "1"
                },
                 "Overrides": [
                       {
                           "InstanceType": "c3.large",
                           "WeightedCapacity": 1,
                           "Placement": {
                               "AvailabilityZone": "us-east-1a"
                           }
                       },
                       {
                           "InstanceType": "c4.large",
                           "WeightedCapacity": 1,
                           "Placement": {
                               "AvailabilityZone": "us-east-1a"
                           }
                       },
                       {
                           "InstanceType": "c5.large",
                           "WeightedCapacity": 1,
                           "Placement": {
                               "AvailabilityZone": "us-east-1a"
                           }
                       }
                ] 
          }
    ],
        "TargetCapacity": 5,
        "SpotMaintenanceStrategies": {
            "CapacityRebalance": {
                "ReplacementStrategy": "launch-before-terminate",
                "TerminationDelay": "720"
            }
        }
    }
}
```

## 範例 9：在容量最佳化機群中啟動 Spot 執行個體
<a name="fleet-config9"></a>

下列範例示範如何使用可最佳化容量的 Spot 分配策略來設定 Spot 機群。若要最佳化容量，您必須將 `AllocationStrategy` 設為 `capacityOptimized`。

在下列範例中，三個啟動規格指定三個 Spot 容量集區。目標容量為 50 個 Spot 執行個體。Spot 機群嘗試將 50 個 Spot 執行個體啟動到 Spot 容量集區中，且擁有啟動中執行個體數目之最佳容量。

```
{
    "TargetCapacity": "50",
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "capacityOptimized",
    },
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-launch-template",
                "Version": "1"
            },
            "Overrides": [
                {
                    "InstanceType": "r4.2xlarge",  
                    "AvailabilityZone": "us-west-2a"
                },
                {
                    "InstanceType": "m4.2xlarge",
                    "AvailabilityZone": "us-west-2b"
                }, 
                {
                    "InstanceType": "c5.2xlarge",
                    "AvailabilityZone": "us-west-2b"
                }
            ] 
        }
    ]
}
```

## 範例 10：使用優先順序在容量最佳化機群中啟動 Spot 執行個體
<a name="fleet-config10"></a>

下列範例示範在盡最大努力使用優先順序時，如何使用可最佳化容量的 Spot 分配策略來設定 Spot 機群。

當您使用 `capacityOptimizedPrioritized` 分配策略時，您可以使用 `Priority` 參數來指定 Spot 容量集區的優先順序，其中數字越小，優先順序越高。如果您對它們一視同仁，也可以為數個 Spot 容量集區設定相同的優先順序。如果您沒有設定集區的優先順序，集區將被視為最後一個優先順序。

若要排定 Spot 容量集區的優先順序，您必須將 `AllocationStrategy` 設為 `capacityOptimizedPrioritized`。Spot 機群會先針對容量進行最佳化，但會盡力遵守優先順序 (例如，如果遵守優先順序不會顯著影響 Spot 機群佈建最佳容量的能力)。對於必須將中斷可能性降至最低的工作負載來說，這是一個很好的選擇，而且某些執行個體類型的偏好也很重要。

在下列範例中，三個啟動規格指定三個 Spot 容量集區。每個集區都有優先順序，其中數字越小，優先順序越高。目標容量為 50 個 Spot 執行個體。Spot 機群嘗試以最高優先順序在 Spot 容量集區中啟動 50 個 Spot 執行個體，但首先針對容量進行最佳化。

```
{
    "TargetCapacity": "50",
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "capacityOptimizedPrioritized"
    },
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-launch-template",
                "Version": "1"
            },
            "Overrides": [
                {
                    "InstanceType": "r4.2xlarge",    
                   "Priority": 1,
                    "AvailabilityZone": "us-west-2a"
                },
                {
                           "InstanceType": "m4.2xlarge",
                           "Priority": 2,
                           "AvailabilityZone": "us-west-2b"
                }, 
                {
                           "InstanceType": "c5.2xlarge",
                           "Priority": 3,
                           "AvailabilityZone": "us-west-2b"
                }
            ] 
        }
    ]
}
```

## 範例 11：在 priceCapacityOptimized 機群中啟動 Spot 執行個體
<a name="fleet-config11"></a>

下列範例示範如何使用可最佳化容量且價格最低的 Spot 分配策略來設定 Spot 機群。若要在將價格納入考慮的同時最佳化容量，您必須將 Spot `AllocationStrategy` 設定為 `priceCapacityOptimized`。

在下列範例中，三個啟動規格指定三個 Spot 容量集區。目標容量為 50 個 Spot 執行個體。Spot 機群嘗試將 50 個 Spot 執行個體啟動到 Spot 容量集區中，且擁有啟動中執行個體數目之最佳容量，同時還會選擇價格最低的集區。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "OnDemandAllocationStrategy": "lowestPrice",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::111111111111:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateId": "lt-0123456789example",
                    "Version": "1"
                },
                "Overrides": [
                     {
                           "InstanceType": "r4.2xlarge",  
                           "AvailabilityZone": "us-west-2a"
                      },
                      {
                           "InstanceType": "m4.2xlarge",
                           "AvailabilityZone": "us-west-2b"
                      }, 
                      {
                           "InstanceType": "c5.2xlarge",
                           "AvailabilityZone": "us-west-2b"
                      }
                ]
            }
        ],
        "TargetCapacity": 50,
        "Type": "request"
    }
}
```

## 範例 12：設定屬性型執行個體類型選取
<a name="fleet-config12"></a>

下列範例示範如何將 Spot 機群設定為使用屬性型執行個體類型選取來識別執行個體類型。若要指定必要的執行個體屬性，您可以在 `InstanceRequirements` 結構中指定屬性。

在下列範例中，指定了兩個執行個體屬性：
+ `VCpuCount` – 至少指定 2 個 vCPU。由於未指定最大值，因此沒有最大限制。
+ `MemoryMiB` – 至少指定 4 MiB 的記憶體。由於未指定最大值，因此沒有最大限制。

將會識別任何具有 2 個或更多 vCPU 和 4 MiB 或更多記憶體的執行個體類型。但是，當 [Spot 機群佈建機群](ec2-fleet-attribute-based-instance-type-selection.md#how-ef-uses-abs)時，價格保護和分配策略可能會排除某些執行個體類型。

如需您可指定之所有可能屬性的清單和說明，請參閱 *Amazon EC2 API 參考*中的[InstanceRequirements](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_InstanceRequirements.html)。

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

# EC2 機群和 Spot 機群的配額
<a name="fleet-quotas"></a>

您的 AWS 帳戶 具有每個 AWS 服務的預設配額，先前稱為限制。除非另有說明，否則每個配額都是區域特定的。

通常的 Amazon EC2 配額適用於由 EC2 機群或 Spot 機群啟動的執行個體，例如 [Spot 執行個體限制](using-spot-limits.md)和[磁碟區限制](volume_limits.md)。

此外，您的 AWS 帳戶 具有下列與 EC2 機群和 Spot 機群相關的配額：


****  

| 配額說明 | 配額 | 
| --- | --- | 
| 每個區域屬於類型 maintain 和 request，以及 active、deleted\$1running 和 cancelled\$1running 狀態的 EC2 機群和 Spot 機群數目 | 1,000 ¹ ² ³ | 
| instant 類型的 EC2 機群數量 | 無限制 | 
| EC2 機群和 Spot 機群類型 maintain 和 request 的 Spot 容量集區數目 (執行個體類型和子網路的唯一組合) | 300 ¹ | 
| EC2 機群類型 instant 的 Spot 容量集區數目 (執行個體類型和子網路的唯一組合) | 無限制 | 
| 啟動規格中使用者資料的大小 | 16 KB ² | 
| 每 EC2 機群或 Spot 機群的目標容量 | 10,000 | 
| 區域中涵蓋所有 EC2 機群和 Spot 機群的目標容量 | 100,000 ¹ | 
|  EC2 機群請求或 Spot 機群請求不能跨區域。  |  | 
| EC2 機群請求或 Spot 機群請求不能橫跨同一個可用區域的不同子網路。 |  | 

¹ 這些配額同時適用於您的 EC2 機群和您的 Spot 機群。

² 這些是硬性配額。您不能對這些配額請求提高配額。

³ 刪除 EC2 機群或取消 Spot 機群請求後，如果您指定該機群*不得*在刪除或取消請求時終止其 Spot 執行個體，則機群請求會進入 `deleted_running` (EC2 機群) 或 `cancelled_running` (Spot 機群) 狀態，而執行個體會繼續執行直至中斷，或直至您手動將其終止。如果終止執行個體，則機群請求會進入 `deleted_terminating` (EC2 機群) 或 `cancelled_terminating` (Spot 機群) 狀態，而不會計入此配額。如需詳細資訊，請參閱[刪除 EC2 機群請求和機群中的執行個體](delete-fleet.md)及[取消 (刪除) Spot 機群請求](cancel-spot-fleet.md)。

## 請求增加目標容量的配額
<a name="fleet-quota-increase-request"></a>

如果您需要的容量超過目標容量的預設配額，則可以請求增加配額。

**請求增加目標容量的配額**

1. 開啟 支援 中心[建立案例](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase&limitType=service-code-ec2-fleet)表單。

1. 選擇**提高服務限制**。

1. 對於 **Limit type** (限制類型)，請選擇 **EC2 Fleet** (EC2 機群)。

1. 針對**區域**，選擇要 AWS 請求增加配額的區域。

1. 對於 **Limit** (限制)，請選擇 **Target Fleet Capacity per Fleet (in units)** (每個機群的目標機群容量 (單位))，或者 **Target Fleet Capacity per Region (in units)** (每個區域的目標機群容量 (單位))，具體取決於您要增加的配額。

1. 針對 **New limit value** (新的限值)，輸入新的配額值。

1. 若要請求增加另一個配額，請選擇 **Add another request** (新增另一個請求)，然後重複步驟 4–6。

1. 對於 **Use case description** (使用案例描述)，輸入您請求增加配額的原因。

1. 在 **Contact options** (聯絡選項)，請指定您偏好的聯絡語言和聯絡方式。

1. 選擇**提交**。