

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

# 建立 Spot 執行個體請求
<a name="spot-requests"></a>

若要使用 Spot 執行個體，您可以建立 Spot 執行個體請求，其中包含所需的執行個體數量、執行個體類型，以及 Availability Zone (可用區域)。如果容量可用，Amazon EC2 會即刻履行您的請求。否則，Amazon EC2 會等到您的請求可以完成，或是您取消請求。

您可以使用 Amazon EC2 主控台中的[啟動執行個體精靈](ec2-launch-instance-wizard.md)或 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 命令以您可以啟動隨需執行個體的相同方式請求 Spot 執行個體。僅出於下列原因，建議使用此方法：
+ 您已經在使用[啟動執行個體精靈](ec2-launch-instance-wizard.md)或 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 命令來啟動隨需執行個體，而且您只想透過變更單一參數來變更為啟動 Spot 執行個體。
+ 您不需要具有不同執行個體類型的多個執行個體。

通常不建議在啟動 Spot 執行個體時使用此方法，因為您無法指定多個執行個體類型，並且無法在同一請求中同時啟動 Spot 執行個體和隨需執行個體。如需有關啟動 Spot 執行個體的慣用方法，其中包括啟動含有使用多個執行個體類型的 Spot 執行個體和隨需執行個體的*機群*，請參閱[使用哪種 Spot 請求方法最好？](spot-best-practices.md#which-spot-request-method-to-use)

如果您一次請求多個 Spot 執行個體，Amazon EC2 會建立不同的 Spot 執行個體請求，如此您就可以單獨追蹤每個請求的狀態。如需追蹤 Spot 執行個體請求的詳細資訊，請參閱 [取得 Spot 執行個體請求狀態](spot-request-status.md)。

------
#### [ Console ]<a name="create-spot-instance-request-console-procedure"></a>

**建立 Spot 執行個體請求**

步驟 1–9 與您用於啟動隨需執行個體的步驟相同。在步驟 10 中，您可以設定 Spot 執行個體請求。

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

1. 在螢幕上方的導覽列上，選取「區域」。

1. 從 Amazon EC2 主控台儀表板選擇 **Launch Instance (啟動執行個體)**。

1. (選用) 在 **Name and tags** (名稱和標籤) 下，您可以命名執行個體，並標記 Spot 執行個體請求、執行個體、磁碟區和彈性圖形。如需標籤的相關資訊，請參閱[標記您的 Amazon EC2 資源](Using_Tags.md)。

   1. 對於 **Name** (名稱)，輸入執行個體的描述性名稱。

      執行個體名稱是一個標籤，其中鍵是 **Name** (名稱)，而值是您指定的名稱。如果您未指定名稱，則可以透過其 ID 來標識執行個體，該 ID 將在您啟動執行個體時自動產生。

   1. 若要標記 Spot 執行個體請求、執行個體、磁碟區和彈性圖形，請選擇 **Add additional tags** (新增其他標籤)。選取 **Add tag** (新增標籤)，然後輸入鍵和值，然後選取要標記的資源類型。為每個要新增的其他標籤重新選擇 **Add tag** (新增標籤)。

1. 在 **Application and OS Images (Amazon Machine Image)** (應用程式和作業系統映像 (Amazon Machine Image)) 下，選取執行個體的作業系統，然後選取 AMI。如需詳細資訊，請參閱[應用程式和作業系統映像 (Amazon Machine Image)](ec2-instance-launch-parameters.md#liw-ami)。

1. 在 **Instance type** (執行個體類型) 下，選取符合您執行個體硬體組態和大小要求的執行個體類型。如需詳細資訊，請參閱[執行個體類型](ec2-instance-launch-parameters.md#liw-instance-type)。

1. 在 **Key pair (login)** (金鑰對 (登入))，選擇現有的金鑰對，或選擇 **Create new key pair** (建立新的金鑰對) 以建立新的金鑰對。如需詳細資訊，請參閱[Amazon EC2 金鑰對和 Amazon EC2 執行個體](ec2-key-pairs.md)。
**重要**  
如果您選擇 **Proceed without key pair (Not recommended)** (繼續而不使用金鑰對 (不建議)) 選項，您將無法連線到執行個體，除非您選擇已設定為允許使用者透過其他方式登入的 AMI。

1. 在 **Network settings** (網路設定) 下，使用預設設定，或視需要選擇 **Edit** (編輯) 以便設定網路設定。

   安全群組構成網路設定的一部分，並定義執行個體的防火牆規則。這些規則會指定應交付至您執行個體的傳入網路流量。

   如需詳細資訊，請參閱[網路設定](ec2-instance-launch-parameters.md#liw-network-settings)。

1. 您選取的 AMI 包含一或多個儲存體磁碟區，包含根設備磁碟區。在 **Configure storage** (設定儲存) 下，您可以透過選擇 **Add new volume** (新增新磁碟區)，指定要連接到執行個體的額外磁碟區。如需詳細資訊，請參閱[設定儲存](ec2-instance-launch-parameters.md#liw-storage)。

1. 在 **Advanced details** (進階詳細資訊)，請設定 Spot 執行個體請求，如下所示：

   1. 在**購買選項**下方，選取**請求 Spot 執行個體**核取方塊。

   1. 您可以保留 Spot 執行個體請求的預設組態，也可以選擇右側的 **Customize** (自訂) 為您的 Spot 執行個體請求指定自訂設定。

      當您選擇 **Customize** (自訂) 時，會出現下列欄位。

      1. **Maximum price** (最高價格)：您可以採用 Spot 價格 (以隨需價格為上限) 請求 Spot 執行個體，也可以指定您願意支付的最高金額。
**警告**  
如果您指定最高價格，您的執行個體將會比選擇**無最高價**時更頻繁地遭到中斷。  
若您指定最高價格，它必須超過 0.001 USD。指定低於 0.001 USD 的值會導致啟動失敗。
         + **No maximum price** (無最高價格)：您的 Spot 執行個體將以目前的 Spot 價格啟動。價格絕不會超過隨需價格。(建議)
         + **Set your maximum price (per instance/hour)** (設定您的最高價格 (每個執行個體/小時))：您可以指定您願意支付的最高金額。
           + 如果您指定的最高價小於目前的 Spot 價格，則不會啟動 Spot 執行個體。
           + 如果您指定的最高價格大於目前的 Spot 價格，Spot 執行個體將會啟動並按目前的 Spot 價格收費。Spot 執行個體執行後，如果 Spot 價格超過您的最高價格，Amazon EC2 將中斷您的 Spot 執行個體。
           + 無論您指定的最高價格如何，都將始終按當前 Spot 價格向您收取費用。

           若要回顧 Spot 價格的趨勢，請參閱 [檢視 Spot 執行個體定價歷史記錄](using-spot-instances-history.md)。

      1. **Request type** (請求類型)：您選擇的 Spot 執行個體請求類型會決定 Spot 執行個體中斷時會發生什麼狀況。
         + **One-time** (一次性)：Amazon EC2 會為您的 Spot 執行個體發出一次性請求。如果您的 Spot 執行個體中斷，即不會重新提交請求。
         + **Persistent request** (持久性請求)：Amazon EC2 會為您的 Spot 執行個體發出持久性請求。如果您的 Spot 執行個體中斷，系統會重新提交請求以補充中斷的 Spot 執行個體。

         若未指定數值，則預設值為一次性請求。

      1. **Valid to** (有效至)：*持久性* Spot 執行個體請求的到期日期。

         一次性請求不支援此欄位。*一次性*請求在請求中的所有執行個體均啟動，或是您取消請求之前，都會繼續維持有效運作。
         + **No request expiry date** (無請求過期日期)：請求會維持在有效狀態，直到您將其取消為止。
         + **Set your request expiry date** (設定您的請求過期日期)：持久性請求在您指定的日期之前會維持在有效狀態，或者直到您將其取消為止。

      1. **Interruption behavior** (中斷行為)：您選擇的行為會決定 Spot 執行個體中斷時會發生什麼狀況。
         + 針對持久性請求，有效值為 **Stop** (停止) 和 **Hibernate** (休眠)。當執行個體停止時，將收取 EBS 磁碟區儲存費用。
**注意**  
Spot 執行個體現在使用與隨需執行個體相同的休眠功能。若要啟用休眠功能，您可以在此選擇**休眠**，也可以從**停止 - 休眠行為**欄位 (顯示於啟動執行個體精靈下半部) 中選擇**啟用**。如需休眠必要條件，請參閱[EC2 執行個體休眠的先決條件](hibernating-prerequisites.md)。
         + 針對一次性請求，有效值僅有 **Terminate** (終止)。

         若未指定值，則預設值為 **Terminate** (終止)，這對於持久性 Spot 執行個體請求無效。如果您保留預設值，並嘗試啟動持久性 Spot 執行個體請求，則會出現錯誤。

         如需詳細資訊，請參閱[Spot 執行個體中斷的行為](interruption-behavior.md)。

1. 在 **Summary** (摘要) 面板上，針對 **Number of instances** (執行個體的數量)，輸入要啟動的執行個體數量。
**注意**  
Amazon EC2 為每個 Spot 執行個體建立一個單獨的請求。

1. 在 **Summary** (摘要) 面板上，檢閱執行個體的詳細資訊，並進行任何必要的變更。提交 Spot 執行個體請求後，您就無法變更請求的參數。您可以直接導覽至啟動執行個體精靈中的某個區段，方法是在 **Summary** (摘要) 面板中選擇其連結。如需詳細資訊，請參閱[摘要](ec2-instance-launch-parameters.md#liw-summary)。

1. 當您準備好啟動執行個體時，請選擇 **Launch instance** (啟動執行個體)。

   如果執行個體無法啟動或狀態立即進入 `terminated` 而非 `running`，請參閱[對 Amazon EC2 執行個體啟動問題進行疑難排解](troubleshooting-launch.md)。

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

**若要使用 run-instances 建立 Spot 執行個體請求**  
使用 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 命令，並在 `--instance-market-options` 參數中指定 Spot 執行個體選項。

```
--instance-market-options file://{{spot-options.json}}
```

以下是在 JSON 檔案中指定的資料結構。您也可以指 `ValidUntil` 和 `InstanceInterruptionBehavior`。如果您沒有在資料結構中指定欄位，則會使用預設值。

以下範例會建立 `persistent` 請求。

```
{
  "MarketType": "spot",
  "SpotOptions": {
    "SpotInstanceType": "{{persistent}}"
  }
}
```

**使用 request-spot-instances 建立 Spot 執行個體請求**

**注意**  
我們強烈反對使用 [request-spot-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-instances.html) 命令來請求 Spot 執行個體，因為這是一個沒有計劃投資的舊式 API。如需詳細資訊，請參閱[使用哪種 Spot 請求方法最好？](spot-best-practices.md#which-spot-request-method-to-use)

使用 [request-spot-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-instances.html) 命令來建立一次性請求。

```
aws ec2 request-spot-instances \
    --instance-count {{5}} \
    --type "one-time" \
    --launch-specification file://{{specification.json}}
```

使用 [request-spot-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-instances.html) 命令來建立一個永久的請求。

```
aws ec2 request-spot-instances \
    --instance-count {{5}} \
    --type "persistent" \
    --launch-specification file://{{specification.json}}
```

例如，啟動規格檔案以搭配這些命令使用，請參閱[Spot 執行個體請求啟動規格範例](spot-request-examples.md)。如果您從 Spot 請求主控台下載啟動規格檔案，則必須改用 [request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html) 命令 (Spot 請求主控台使用 Spot 機群指定 Spot 執行個體請求)。

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

**建立 Spot 執行個體請求**  
使用 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) cmdlet，並使用 `-InstanceMarketOption` 參數來指定 Spot 執行個體選項。

```
-InstanceMarketOptions $marketOptions
```

如下所示，建立 Spot 執行個體選項的資料結構。

```
$spotOptions = New-Object Amazon.EC2.Model.SpotMarketOptions
$spotOptions.SpotInstanceType="persistent"
$marketOptions = New-Object Amazon.EC2.Model.InstanceMarketOptionsRequest
$marketOptions.MarketType = "spot"
$marketOptions.SpotOptions = $spotOptions
```

------