

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

# 建立 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
```

------