

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

# Spot 執行個體
<a name="using-spot-instances"></a>

Spot 執行個體是使用備用 EC2容量的執行個體，可在低於隨需價格時使用它。競價型執行個體可讓您以相當優惠的折扣，來請求未使用的 EC2 執行個體，進而大幅降低 Amazon EC2 成本。Spot 執行個體的每小時價格稱為 Spot 價格。各可用區域中各執行個體類型的 Spot 價格由 Amazon EC2 決定，並會根據 競價型執行個體的長期供需情況逐漸調整。只要有容量可用，您的 Spot 執行個體便會執行。

如能彈性決定應用程式執行的時機以及應用程式是否可以中斷，則 競價型執行個體會是一項具成本效益的選擇。例如，競價型執行個體非常適合用於資料分析、批次處理任務、背景處理和選擇性的任務。如需詳細資訊，請參閱 [Amazon EC2 競價型執行個體](https://aws.amazon.com/ec2/spot/)。

如需 EC2 執行個體不同購買選項的比較，請參閱 [Amazon EC2 帳單與購買選項](instance-purchasing-options.md)。

## 概念
<a name="spot-features"></a>

在開始使用Spot 執行個體之前，您應該先熟悉以下概念：
+ *Spot 容量集區* – 一組具有相同執行個體類型 (例如 `m5.large`) 和可用區域的未使用 EC2 執行個體。
+ *Spot 價格* – Spot 執行個體目前的每小時價格。
+ *Spot 執行個體請求* – 請求 Spot 執行個體。當容量可用時，Amazon EC2 會履行您的請求。Spot 執行個體請求為*一次性*或*持久性*。與請求相關聯的 Spot 執行個體中斷之後，Amazon EC2 會自動重新提交持續的 Spot 執行個體請求。
+ *EC2 執行個體重新平衡建議* - Amazon EC2 發出執行個體重新平衡建議訊號，以通知您 Spot 執行個體的中斷風險升高。此訊號讓您有機會在現有或新的 Spot 執行個體上主動重新平衡工作負載，而無需等待兩分鐘的 Spot 執行個體中斷通知。
+ *Spot 執行個體中斷* – 當 Amazon EC2 需要取回容量，Amazon EC2 會終止、停止 Spot 執行個體或將其休眠。Amazon EC2 會提供 Spot 執行個體中斷通知，在執行個體中斷前會向執行個體發出兩分鐘的警告。

## 競價型執行個體與隨需執行個體之間的差異
<a name="key-differences-spot-on-demand"></a>

下表列出了 Spot 執行個體與[隨需執行個體](ec2-on-demand-instances.md)之間的主要差異。


|  | Spot Instances | On-Demand Instances | 
| --- | --- | --- | 
|  啟動時間  |  只有當 Spot 執行個體請求正在作用中，而且有可用的容量時，才能立即啟動。  |  只有在進行手動啟動請求，而且有可用的容量時，才能立即啟動。  | 
|  可用容量  |  如果沒有可用的容量，則 Spot 執行個體請求會繼續自動發出啟動請求，直到有可用的容量出現。  |  如果在您發出啟動請求時沒有可用的容量，會出現容量不足錯誤 (ICE)。  | 
|  每小時價格  |  Spot 執行個體的每小時價格會隨長期的供給和需求而有所不同。  |  隨需執行個體 的每小時價格為靜態定價。  | 
| 重新平衡建議 | 執行個體的中斷風險升高時，Amazon EC2 為執行中的 Spot 執行個體發出的訊號。 | 您可以決定中斷 (停止、休眠或終止) 隨需執行個體 的時間點。 | 
|  執行個體中斷  |  您可以停止和啟動 Amazon EBS 支援的 Spot 執行個體。此外，如果不再有可用的容量，Amazon EC2 還可以[中斷](spot-interruptions.md)個別的 Spot 執行個體。  |  您可以決定中斷 (停止、休眠或終止) 隨需執行個體 的時間點。  | 

## 定價與節省
<a name="spot-pricing"></a>

您會為 競價型執行個體支付 Spot 價格，該價格由 Amazon EC2 決定，並會根據 競價型執行個體的長期供需情況逐漸調整。在您終止 Spot 執行個體前、不再有可用的容量前，或是 Amazon EC2 Auto Scaling 群組在[縮減](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-lifecycle.html#as-lifecycle-scale-in)時終止 Spot 執行個體前，您的 Spot 執行個體會持續執行。

如果您或 Amazon EC2 中斷執行中的 Spot 執行個體，則會按使用秒數或整整一小時向您收費，也可能免費，根據使用的作業系統和中斷 Spot 執行個體的人而定。如需詳細資訊，請參閱[針對已中斷的 競價型執行個體收費](billing-for-interrupted-spot-instances.md)。

Savings Plans 不涵蓋 Spot 執行個體。如果您有 Savings Plans，該計劃不會在您使用 Spot 執行個體時所享有的節省上提供額外的折扣。此外，您在 Spot 執行個體上的支出不會計入 Compute Savings Plans 中的承諾用量。

### 檢視價格
<a name="spot-pricing-view-prices"></a>

若要檢視每個 AWS 區域 和執行個體類型的目前 （每五分鐘更新一次） 最低 Spot 價格，請參閱 [Amazon EC2 Spot 執行個體定價](https://aws.amazon.com/ec2/spot/pricing/)頁面。

若要檢視過去三個月的 Spot 價格歷史，請使用 Amazon EC2 主控台或 [describe-spot-price-history](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-spot-price-history.html) 命令。如需詳細資訊，請參閱[檢視 Spot 執行個體定價歷史記錄](using-spot-instances-history.md)。

我們獨立將可用區域對應到每個可用區域的代碼 AWS 帳戶。如此，不同帳戶之間的相同可用區域代碼 (例如 `us-west-2a`)，就會得到不同的結果。

### 檢視節省
<a name="spot-pricing-view-savings"></a>

您可以檢視針對單一 [Spot 機群](Fleets.md)或所有 Spot 執行個體使用 Spot 執行個體所節省的成本。您可以檢視前一個小時或前三天的節省，也可以檢視每 vCPU 小時和每記憶體 (GiB) 小時的平均成本。節省是估計值，因為不含用量的帳單調整，所以會與實際的節省有所出入。如需檢視節省資訊的詳細資訊，請參閱 [購買 競價型執行個體省下的成本](spot-savings.md)。

### 檢視帳單
<a name="spot-pricing-view-billing"></a>

您的帳單會提供您服務用量的詳細資訊。如需詳細資訊，請參閱 *AWS Billing 使用者指南*中的[檢視您的帳單](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/getting-viewing-bill.html)。

# Amazon EC2 Spot 的最佳實務
<a name="spot-best-practices"></a>

Amazon EC2 AWS 雲端 可透過 Spot 執行個體存取 中的備用 EC2 運算容量，相較於隨需價格節省高達 90%。隨需執行個體與 Spot 執行個體之間唯一的差別在於，若 Amazon EC2 需要取回容量時，Spot 執行個體可以由 Amazon EC2 利用兩分鐘的通知來中斷。為了確保 Spot 執行個體最佳體驗，了解並套用最佳實務以供使用至關重要。

競價型執行個體 建議用於無狀態、容錯、靈活的應用程式。例如，競價型執行個體 適用於大數據、容器化工作負載、CI/CD、無狀態 Web 伺服器、高效能運算 (HPC) 和轉譯工作負載。

執行時，競價型執行個體 與 隨需執行個體 完全相同。但是，Spot 並無法保證您可以保持執行中的執行個體有足夠時間來完成工作負載。Spot 也無法保證您可以立即取得所尋找執行個體的可用性，也無法保證您一律可以取得所請求的彙總容量。此外，Spot 執行個體中斷和容量可能會隨著時間而改變，因為 Spot 執行個體可用性會因供給和需求而有所不同，而過去的效能並不能保證未來的結果。

競價型執行個體 不適合執行個體節點之間不靈活、可設定狀態、錯誤不容忍或緊密結合的工作負載。不建議將 Spot 執行個體用於目標容量偶爾無法完全可用的工作負載。儘管遵循 Spot 最佳實務 (例如對執行個體類型和可用區域保持靈活性) 可提供高可用性的最佳機會，但由於隨需執行個體需求激增可能會中斷 Spot 執行個體的工作負載，因此無法保證可以使用資源容量。

強烈不建議您對這些工作負載使用 Spot 執行個體，或嘗試容錯移轉至隨需執行個體以處理中斷或資源不可用的情況。容錯移轉至隨需執行個體可能會在不經意間導致其他 Spot 執行個體中斷。此外，如果執行個體類型和可用區域組合的 Spot 執行個體中斷，您可能難以取得具有相同組合的隨需執行個體。

無論您是經驗豐富的 Spot 使用者或 Spot 執行個體的新使用者，如果您目前遇到 Spot 執行個體中斷或可用性問題，建議您遵循這些最佳做法，以獲得使用 Spot 服務的最佳體驗。

**Topics**
+ [針對中斷準備個別執行個體](#prep-instances-for-interruptions)
+ [對執行個體類型和可用區域具有彈性](#be-instance-type-flexible)
+ [使用屬性型執行個體類型選取範圍](#use-attribute-based-instance-type-selection)
+ [使用 Spot 配置分數來識別最佳區域和可用區域](#use-spot-placement-scores-to-identify-optimal-regions-and-availability-zones)
+ [使用 EC2 Auto Scaling 群組或 EC2 Fleet 來管理彙總容量](#use-sf-asg-for-aggregate-capacity)
+ [使用價格和容量最佳化分配策略](#use-capacity-optimized-allocation-strategy)
+ [使用整合 AWS 服務來管理您的 Spot 執行個體](#use-integrated-aws-services)
+ [使用哪種 Spot 請求方法最好？](#which-spot-request-method-to-use)

## 針對中斷準備個別執行個體
<a name="prep-instances-for-interruptions"></a>

從容處理 Spot 執行個體中斷的最佳方法，就是建立容錯的應用程式架構。若要達到此目的，您可以利用 EC2 執行個體重新平衡建議和 Spot 執行個體中斷通知。

EC2 執行個體重新平衡推薦是一種訊號，可在 Spot 執行個體的中斷風險升高時通知您。該訊號使您有機會在兩分鐘 Spot 執行個體中斷通知之前主動管理 Spot 執行個體。您可以決定將工作負載重新平衡至未處於提高之中斷風險的新的或現有 競價型執行個體。我們已經使用 Auto Scaling 群組和 EC2 Fleet 中的容量重新平衡功能，讓您輕鬆地使用此訊號。

Spot 執行個體中斷通知是在 Amazon EC2 中斷 Spot 執行個體的兩分鐘之前發出的警告。如果您的工作負載具有「時間彈性」，當執行個體中斷時，您可以將它們設定為停止或休眠，而非終止。Amazon EC2 會在中斷時自動停止或休眠 Spot 執行個體，並在我們有可用容量時自動繼續執行個體。

建議您在 [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/index.html) 中建立擷取重新平衡建議和中斷通知的規則，然後觸發工作負載進度的檢查點，或從容處理中斷。如需詳細資訊，請參閱[監控重新平衡建議訊號](rebalance-recommendations.md#monitor-rebalance-recommendations)。如需如何建立和使用事件規則的詳細範例，請參閱[利用 Amazon EC2 Spot 執行個體中斷通知](https://aws.amazon.com/blogs/compute/taking-advantage-of-amazon-ec2-spot-instance-interruption-notices/)。

如需詳細資訊，請參閱[EC2 執行個體重新平衡建議](rebalance-recommendations.md)及[Spot 執行個體中斷](spot-interruptions.md)。

## 對執行個體類型和可用區域具有彈性
<a name="be-instance-type-flexible"></a>

Spot 容量集區是一組未使用的 EC2 執行個體，具有相同執行個體類型 (例如 `m5.large`) 和可用區域 (例如 us-east-1a)。您應該對於請求的執行個體類型，以及可在其中部署工作負載的可用區域具有彈性。這讓 Spot 有更好的機會找到並配置您所需的運算容量。例如，不要只要求 `c5.large` 是否願意使用來自 c4、m5 和 m4 系列的 large。

根據您的特定需求，您可以評估哪些執行個體類型可以具彈性，以滿足您的運算需求。如果工作負載可以垂直擴展，則應在請求中包含較大的執行個體類型 (更多 vCPU 和記憶體)。如果您只能水平擴展，則應納入舊一代執行個體類型，因為隨需客戶的需求較少。

一個很好的經驗法則是針對每個工作負載的至少 10 個執行個體類型上具有彈性。此外，請確定所有可用區域均已設定為在 VPC 中使用，並針對您的工作負載選取。

## 使用屬性型執行個體類型選取範圍
<a name="use-attribute-based-instance-type-selection"></a>

透過屬性型執行個體類型選項，您可以為要執行的工作負載指定執行個體屬性，例如 vCPU、記憶體和儲存體。EC2 Auto Scaling 或 EC2 Fleet 會自動識別並啟動符合您指定屬性的執行個體。這樣就省去了手動選取特定執行個體類型所需的工作，該工作需要深入了解每一種執行個體類型提供的功能。

此外，屬性型執行個體類型選項可讓您在新版本執行個體類型推出時自動使用。這可確保順暢存取日益廣泛的 Spot 執行個體容量。

屬性型執行個體類型選項非常適用於其執行的執行個體類型具有彈性的工作負載和架構，例如高效能運算 (HPC) 和大數據工作負載。

如需詳細資訊，請參閱「Amazon EC2 Auto Scaling 使用者指南」**中的[使用屬性型執行個體類型選取範圍來建立 Auto Scaling 群組](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-mixed-instances-group-attribute-based-instance-type-selection.html)以及此指南中的 [指定屬性，為 EC2 機群或 Spot 機群選取執行個體類型](ec2-fleet-attribute-based-instance-type-selection.md)。

## 使用 Spot 配置分數來識別最佳區域和可用區域
<a name="use-spot-placement-scores-to-identify-optimal-regions-and-availability-zones"></a>

Spot 執行個體是未使用的 EC2 容量，此容量會根據 EC2 的供需而變化。因此，您不一定會在特定時間和特定位置中取得所需的確切 Spot 容量。若要緩解此不可預測性，您可以使用 Spot 配置分數功能。此功能會針對容量較可能足以滿足 Spot 容量需求的區域或可用區域提供建議，而無需先在這些位置啟動 Spot 執行個體。

Spot 配置分數最適用於對執行個體類型，以及它們可使用的區域或可用區域具有彈性的工作負載。您只需要指定所需的 Spot 容量、執行個體類型需求，以及是否想要針對區域或可用區域提供建議。作為交換，您會收到每個區域或可用區域從 1 到 10 的分數，這表示在該位置順利佈建您要求的 Spot 容量的可能性。分數 10 表示您的 Spot 請求很有可能成功。

請注意，Spot 配置分數是時間點建議，因為容量可能會隨著時間而有所不同。其不保證可用容量，也無法預測中斷風險。

您可以在 Amazon EC2 主控台 AWS CLI或 SDK 中使用 Spot 配置分數功能。如需詳細資訊，請參閱[Spot 配置分數](spot-placement-score.md)。

## 使用 EC2 Auto Scaling 群組或 EC2 Fleet 來管理彙總容量
<a name="use-sf-asg-for-aggregate-capacity"></a>

Spot 可讓您以彙總容量 (包括 vCPU、記憶體、儲存或網路輸送量單位) 的方式來思考，而不是以個別執行個體的方式來思考。Auto Scaling 群組和 EC2 Fleet 可讓您啟動和維護目標容量，並自動請求資源以取代中斷或手動終止的任何資源。設定 Auto Scaling 群組或 EC2 Fleet 時，只需要根據應用程式需求指定執行個體類型和目標容量。如需詳細資訊，請參閱 *Amazon EC2 Auto Scaling 使用者指南* 中的 [Auto Scaling 群組](https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-groups.html)和本使用者指南中的 [建立 EC2 Fleet](create-ec2-fleet.md)。

## 使用價格和容量最佳化分配策略
<a name="use-capacity-optimized-allocation-strategy"></a>

Auto Scaling 群組中的分配策略可協助您佈建目標容量，而無需手動尋找具有備用容量的 Spot 容量集區。建議使用 `price-capacity-optimized` 策略，因為此策略會自動從最可用且價格最低的 Spot 容量集區佈建執行個體。您也可以利用 EC2 Fleet 中的 `price-capacity-optimized` 配置策略。由於您的 Spot 執行個體容量來自具有最佳容量的集區，因此可降低回收 Spot 執行個體的可能性。如需詳細資訊，請參閱《*Amazon EC2 Auto Scaling 使用者指南*中的[多種執行個體類型的配置策略](https://docs.aws.amazon.com/autoscaling/ec2/userguide/allocation-strategies.html)和本使用者指南中的 [當工作負載具有較高的中斷成本時](ec2-fleet-allocation-strategy.md#ec2-fleet-strategy-capacity-optimized)。

## 使用整合 AWS 服務來管理您的 Spot 執行個體
<a name="use-integrated-aws-services"></a>

 AWS 其他服務與 Spot 整合，可降低整體運算成本，而無需管理個別執行個體或機群。我們建議您考慮適用工作負載的下列解決方案：Amazon EMR、Amazon Elastic Container Service AWS Batch、Amazon Elastic Kubernetes Service、Amazon SageMaker AI AWS Elastic Beanstalk和 Amazon GameLift Servers。若要深入了解搭配這些服務的 Spot 最佳做法，請參閱 [Amazon EC2 競價型執行個體 研討會網站](https://ec2spotworkshops.com/)。

## 使用哪種 Spot 請求方法最好？
<a name="which-spot-request-method-to-use"></a>

使用下表確定在請求 Spot 執行個體時使用哪個 API。


****  

| API | 何時使用？ | 使用案例 | 我應該使用此 API 嗎？ | 
| --- | --- | --- | --- | 
|  [CreateAutoScalingGroup](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_CreateAutoScalingGroup.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/spot-best-practices.html)  |  建立 Auto Scaling 群組，管理執行個體的生命週期，同時維護所需的執行個體數量。支援在指定的最小和最大限制之間水平擴展 (新增更多執行個體)。  | 是 | 
| [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/spot-best-practices.html)  |  在單一請求中建立隨需執行個體和 Spot 執行個體的機群，並具有隨執行個體類型、AMI、可用區域或子網而異的多個啟動規格。Spot 執行個體分配策略預設為每單位 `lowest-price`，但您可以將其變更為 `price-capacity-optimized`、`capacity-optimized` 或 `diversified`。  |  是 – 在 `instant` 模式中 (如果您不需要自動擴展)  | 
| [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/spot-best-practices.html)  |  使用 AMI 和一個執行個體類型，啟動指定數量的執行個體。  |  否 – 因為 RunInstances 不允許在單一請求中使用混合執行個體類型  | 
| [RequestSpotFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet.html) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/spot-best-practices.html)  |  請勿使用。RequestSpotFleet 是沒有計劃投資的舊式 API。  | 否 | 
| [RequestSpotInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/spot-best-practices.html)  |  請勿使用。RequestSpotInstances 是沒有計劃投資的舊式 API。  | 否 | 

# 競價型執行個體的運作方式
<a name="how-spot-instances-work"></a>

若要啟動 Spot 執行個體，您可以建立 *Spot 執行個體請求*，或 Amazon EC2 代表您建立 Spot 執行個體請求。Spot 執行個體請求完成後，會啟動 Spot 執行個體。

您可以使用數個不同的服務來啟動 Spot 執行個體。如需詳細資訊，請參閱 [Amazon EC2 Spot 執行個體入門](https://aws.amazon.com/ec2/spot/getting-started/)。在本使用者指南中，我們描述了使用 EC2 啟動 Spot 執行個體的以下方法：
+ 您可以使用 Amazon EC2 主控台中的[啟動執行個體精靈](ec2-launch-instance-wizard.md)或 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 命令來建立 Spot 執行個體請求。如需詳細資訊，請參閱[管理您的 Spot 執行個體](using-spot-instances-request.md)。
+ 您可以建立 EC2 Fleet，在其中指定所需數量的 Spot 執行個體。Amazon EC2 為 EC2 Fleet 中指定的每個 Spot 執行個體建立 Spot 執行個體請求。如需詳細資訊，請參閱[建立 EC2 Fleet](create-ec2-fleet.md)。
+ 您可以建立 Spot Fleet 請求，在其中指定所需數量的 Spot 執行個體。Amazon EC2 為 Spot Fleet 請求中指定的每個 Spot 執行個體建立 Spot 執行個體請求。如需詳細資訊，請參閱[建立 Spot 機群](create-spot-fleet.md)。

如果有可用容量，您的 Spot 執行個體就會啟動。您的 Spot 執行個體會執行直到您停止或終止它，或者直到 Amazon EC2 中斷它 (稱為 *Spot 執行個體中斷*)。Amazon EC2 可以在 Spot 執行個體中斷時停止、終止或進入休眠。

使用 Spot 執行個體時，您必須對中斷做好準備。當 Spot 執行個體的需求增加，或是Spot 執行個體的供給減少時，Amazon EC2 可以中斷您的 Spot 執行個體。當 Amazon EC2 中斷 Spot 執行個體時，會提供 Spot 執行個體中斷通知，在 Amazon EC2 中斷執行個體前，向該執行個體發出兩分鐘的警告。您無法為 競價型執行個體啟用終止保護。如需詳細資訊，請參閱[Spot 執行個體中斷](spot-interruptions.md)。

**Topics**
+ [Spot 執行個體請求狀態](#creating-spot-request-status)
+ [在啟動群組中啟動 競價型執行個體](#spot-launch-group)
+ [在可用區域群組中啟動 競價型執行個體](#spot-az-group)
+ [在 VPC 中啟動 競價型執行個體](#concepts-spot-instances-vpcs)
+ [啟動爆量效能執行個體](#burstable-spot-instances)
+ [在單一租戶硬體上啟動](#spot-instance-tenancy)

## Spot 執行個體請求狀態
<a name="creating-spot-request-status"></a>

Spot 執行個體請求可以是下列任一種狀態：
+ `open` – 請求正等待完成。
+ `active` – 請求已完成，並具有關聯的 Spot 執行個體。
+ `failed` – 請求具有一個或多個無效的參數。
+ `closed` – Spot 執行個體已中斷或終止。
+ `disabled` – 您已停止 Spot 執行個體。
+ `cancelled` – 您已取消請求，或請求已過期。

下圖顯示了請求狀態之間的轉換。請注意，轉換取決於請求的類型 (一次性或持久性)。

![\[Spot 執行個體請求狀態。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/spot_request_states.png)


在 Amazon EC2 啟動 Spot 執行個體、請求過期、或者您取消請求之前，一次性 Spot 執行個體請求會維持有效運作。如果沒有容量可用，則 Spot 執行個體會終止，而且 Spot 執行個體請求也會結束。

即使請求已完成，持久性的 Spot 執行個體請求在過期或是您取消它之前，都會繼續維持有效運作。如果沒有容量可用，則 Spot 執行個體會中斷。在執行個體中斷後，當容量可再次提供使用時，會啟動停止或恢復休眠的 Spot 執行個體。如果有容量可用，您可以停止 Spot 執行個體並將其重新啟動。如果 Spot 執行個體已終止 (不論 Spot 執行個體處於已停止或執行中狀態)，則 Spot 執行個體請求都會再次開啟，而 Amazon EC2 會啟動新的 Spot 執行個體。如需詳細資訊，請參閱 [停止 Spot 執行個體](using-spot-instances-request.md#stopping-a-spot-instance)、[啟動 Spot 執行個體](using-spot-instances-request.md#starting-a-spot-instance) 及 [終止 Spot 執行個體](using-spot-instances-request.md#terminating-a-spot-instance)。

您可以透過狀態，追蹤 Spot 執行個體請求的狀態和已啟動的 Spot 執行個體的狀態。如需詳細資訊，請參閱[取得 Spot 執行個體請求狀態](spot-request-status.md)。

## 在啟動群組中啟動 競價型執行個體
<a name="spot-launch-group"></a>

在 Spot 執行個體請求中指定啟動群組，告知 Amazon EC2 啟動一組 Spot 執行個體，但前提它能夠啟動其中的所有執行個體。此外，如果 Spot 服務必須終止啟動群組內的其中一個執行個體，則必須終止群組中所有的執行個體。不過，如果您終止啟動群組內的一個或多個執行個體，Amazon EC2 不會終止該啟動群組中其餘的執行個體。

雖然此選項很實用，但加上此限制可能會降低完成 Spot 執行個體請求的機率，並提高終止 Spot 執行個體的機率。例如，您的啟動群組包含多個可用區域的執行個體。如果其中一個可用區域的容量減少，且不再提供使用，則 Amazon EC2 會終止該啟動群組的所有執行個體。

如果建立另一個成功的 Spot 執行個體請求，它指定與先前的成功請求相同的 (現有的) 啟動群組，則新的執行個體會加入該啟動群組。之後，如果這個啟動群組中的執行個體遭到終止，則該啟動群組中的所有執行個體都會終止，這也包括由第一個和第二個請求啟動的執行個體。

## 在可用區域群組中啟動 競價型執行個體
<a name="spot-az-group"></a>

在您的 Spot 執行個體請求中指定可用區域群組，以告知 Amazon EC2 在同一個 Availability Zone (可用區域) 中啟動一組 Spot 執行個體。Amazon EC2 不需同時中斷可用區域群組中的所有執行個體。如果 Amazon EC2 必須中斷可用區域群組中的其中一個執行個體，則其他的執行個體仍會繼續執行。

雖然此選項很實用，但加上這項限制可能會降低完成 Spot 執行個體請求的機率。

如果指定了可用區域群組，但未在 Spot 執行個體請求中指定可用區域，則結果取決於您指定的網路。

**預設 VPC**  
Amazon EC2 會使用指定子網適用的可用區域。如未指定子網，它會替您選取一個可用區域及其預設子網，但不一定是最低價的區域。如果您刪除可用區域適用的預設子網，則必須指定不同的子網。

**非預設 VPC**  
Amazon EC2 會使用指定子網適用的可用區域。

## 在 VPC 中啟動 競價型執行個體
<a name="concepts-spot-instances-vpcs"></a>

您可以用為 競價型執行個體指定子網的同一種方法，來為 隨需執行個體指定子網。
+ [預設 VPC] 如果希望在指定的低價可用區域中啟動 Spot 執行個體，您必須在 Spot 執行個體請求中指定對應的子網。如果未指定子網，Amazon EC2 會替您選取一個，而這個子網的可用區域可能不具有最低的 Spot 價格。
+ [非預設 VPC] 您必須指定 Spot 執行個體適用的子網。

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

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

## 在單一租戶硬體上啟動
<a name="spot-instance-tenancy"></a>

您可以在單一租戶的硬體上執行 Spot 執行個體。專用 Spot 執行個體實際與屬於其他 AWS 帳戶的執行個體隔離。如需詳細資訊，請參閱 [Amazon EC2 專用執行個體](dedicated-instance.md) 和 [Amazon EC2 專用執行個體](https://aws.amazon.com/ec2/pricing/dedicated-instances/)。

若要執行專用 Spot 執行個體，請進行下列其中一項動作：
+ 在建立 Spot 執行個體請求時指定 `dedicated` 的租用。如需詳細資訊，請參閱 [管理您的 Spot 執行個體](using-spot-instances-request.md)。
+ 使用 `dedicated` 的執行個體租用，在 VPC 中請求 Spot 執行個體。如需詳細資訊，請參閱[在使用預設租用的 VPC 中啟動專用執行個體](dedicatedinstancesintovpc.md)。如果使用 `default` 的執行個體租用，在 VPC 中請求 Spot 執行個體，就不能使用 `dedicated` 的租用來請求它。

除了 T 執行個體之外，所有執行個體群都支援專用 競價型執行個體。對於每個支援的執行個體系列而言，只有最大型的執行個體大小或硬體大小可支援專用 競價型執行個體。

# 檢視 Spot 執行個體定價歷史記錄
<a name="using-spot-instances-history"></a>

Spot 執行個體的價格由 Amazon EC2 制定，然後根據 Spot 執行個體容量的長期供需趨勢逐漸調整。

滿足您的 Spot 請求後，您會以目前的 Spot 價格啟動 Spot 執行個體，而不會超過隨需價格。您可以檢視過去 90 天的 Spot 價格歷史，根據執行個體類型、作業系統和可用區域來進行篩選。

如需*目前的* Spot 執行個體價格，請參閱 [Amazon EC2 Spot 執行個體定價](https://aws.amazon.com/ec2/spot/pricing/)。

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

**檢視 Spot 價格歷史記錄**

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

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

1. 選擇**定價歷史**。

1. 在 **Graph** (圖表) 中，選擇依 **Availability Zones** (可用區域) 或 **Instance Types** (執行個體類型) 來比較價格歷史記錄。
   + 若您選擇**可用區域**，則選擇**執行個體類型**、作業系統 (**平台**)，以及要檢視價格歷史記錄的**日期範圍**。
   + 若您選擇**執行個體類型**，則選擇最多五種**執行個體類型**、**可用區域**、作業系統 (**平台**)，以及要檢視價格歷史記錄的**日期範圍**。

   下列螢幕擷取畫面顯示不同執行個體類型的價格比較。  
![\[Amazon EC2 主控台中的 Spot 執行個體定價歷史記錄工具。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/spot-instance-pricing-history.png)

1. 將您的指標懸停至圖表上方，可顯示所選取日期範圍中特定時間點的價格。價格顯示在圖表上方的資訊區塊中。顯示於頂列的價格會顯示指定日期的价格。顯示於第二列的價格會顯示所選日期範圍的平均價格。

1. 若要顯示每個 vCPU 的價格，請開啟 **Display normalized prices** (顯示標準化價格)。若要顯示該執行個體類型的價格，請關閉**Display normalized prices** (顯示標準化價格)。

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

**檢視 Spot 價格歷史記錄**  
使用下列 [describe-spot-price-history](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-spot-price-history.html) 命令。

```
aws ec2 describe-spot-price-history \
    --instance-types c6i.xlarge \
    --product-descriptions "Linux/UNIX" \
    --start-time 2025-04-01T00:00:00 \
    --end-time 2025-04-02T00:00:0
```

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

**檢視 Spot 價格歷史記錄**  
使用 [Get-EC2SpotPriceHistory](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2SpotPriceHistory.html) cmdlet。

```
Get-EC2SpotPriceHistory `
    -InstanceType c6i.xlarge `
    -ProductDescription "Linux/UNIX" `
    -UtcStartTime 2025-04-01T00:00:00 `
    -UtcEndTime 2025-04-02T00:00:0
```

------

# 購買 競價型執行個體省下的成本
<a name="spot-savings"></a>

您可檢視每個叢集之 競價型執行個體或所有執行中 競價型執行個體的用量和節省資訊。每個叢集的用量和節省資訊包括叢集啟動及終止的所有執行個體。您可檢視前一小時或前三天的資訊。

**Savings** (節省) 區段中的下列螢幕擷取畫面顯示 Spot 用量和 Spot Fleet 的節省資訊。

![\[Spot Fleet details (Spot Fleet 詳細資訊) 頁面的 Savings (節省) 區段。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/spot-savings.png)


您可以檢視下列用量和節省資訊：
+ **Spot 執行個體**— Spot Fleet 啟動和終止的 Spot 執行個體數量。檢視節省摘要時，數字代表所有正在執行的 競價型執行個體。
+ **vCPU-hours (vCPU 時數)** – 所選時段內所有 競價型執行個體使用的 vCPU 時數。
+ **Mem(GiB)-hours (記憶體 (GiB) 時數)** – 所選時段內所有 競價型執行個體使用的 GiB 時數。
+ **On-Demand total (隨需總額)** – 如果在所選時段內啟動這些執行個體做為隨需執行個體使用，所要支付的總金額。
+ **Spot total (Spot 總額)** – 所選時段要支付的總金額。
+ **Savings (節省)** – 不支付隨需價格的節省百分比。
+ **Average cost per vCPU-hour (vCPU 每小時的平均成本)** – 所有 競價型執行個體在選取時段內使用 vCPU 的每小時平均成本，計算方式如下：**vCPU 每小時的平均成本** = **Spot 總額** / **vCPU 時數**。
+ **Average cost per mem(GiB)-hour (記憶體 (GiB) 每小時的平均成本)** – 所有 競價型執行個體在選取時段內使用 GiB 的每小時平均成本，計算方式如下：**記憶體 (GiB) 每小時的平均成本** = **Spot 總額** / **記憶體 (GiB) 時數**。
+ **Details** (詳細資訊) 表 – 構成 Spot Fleet 的不同執行個體類型 (每種執行個體類型的執行個體數量所佔百分比)。檢視節省摘要時，這些項目構成您所有正在執行的 競價型執行個體。

您只能使用 Amazon EC2 主控台檢視節省資訊。

**若要檢視 Spot Fleet 的節省資訊**

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

1. 在導覽窗格上，選擇 **Spot Requests (Spot 請求)**。

1. 選取 Spot Fleet 請求的 ID 並捲動至 **Savings** (節省) 區段。

   或者，選取 Spot 機群請求 ID 旁邊的核取方塊，然後選取**節省成本**索引標籤。

1. 根據預設，頁面會顯示前三天的用量和節省資訊。您可選擇 **last hour (前一小時)** 或 **last three days (前三天)**。若為啟動不到一小時的 Spot Fleets，頁面顯示一小時的預估節省。

**檢視所有正在執行的 競價型執行個體節省資訊**

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

1. 在導覽窗格上，選擇 **Spot Requests (Spot 請求)**。

1. 選擇 **Savings Summary** (節省摘要)。

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

------

# Spot 執行個體請求啟動規格範例
<a name="spot-request-examples"></a>

下列範例顯示您可搭配 [request-spot-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-instances.html) 命令使用的啟動組態，以建立 Spot 執行個體請求。如需詳細資訊，請參閱[管理您的 Spot 執行個體](using-spot-instances-request.md)。

**重要**  
我們強烈反對使用 [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)

**Topics**
+ [範例 1：啟動 競價型執行個體](#spot-launch-specification1)
+ [範例 2：在指定的可用區域中啟動 競價型執行個體](#spot-launch-specification2)
+ [範例 3：在指定的子網中啟動 競價型執行個體](#spot-launch-specification3)
+ [範例 4：啟動專用 Spot 執行個體](#spot-launch-specification4)

## 範例 1：啟動 競價型執行個體
<a name="spot-launch-specification1"></a>

下列範例不包括可用區域或子網。Amazon EC2 為您選取可用區域。Amazon EC2 會在所選可用區域的預設子網中啟動執行個體。

```
{
  "ImageId": "ami-0abcdef1234567890",
  "KeyName": "my-key-pair",
  "SecurityGroupIds": [ "sg-1a2b3c4d5e6f7g8h9" ],
  "InstanceType": "m5.medium",
  "IamInstanceProfile": {
      "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role"
  }
}
```

## 範例 2：在指定的可用區域中啟動 競價型執行個體
<a name="spot-launch-specification2"></a>

下列範例包括可用區域。Amazon EC2 會在指定可用區域的預設子網中啟動執行個體。

```
{
  "ImageId": "ami-0abcdef1234567890",
  "KeyName": "my-key-pair",
  "SecurityGroupIds": [ "sg-1a2b3c4d5e6f7g8h9" ],
  "InstanceType": "m5.medium",
  "Placement": {
    "AvailabilityZone": "us-west-2a"
  },
  "IamInstanceProfile": {
      "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role"
  }
}
```

## 範例 3：在指定的子網中啟動 競價型執行個體
<a name="spot-launch-specification3"></a>

下列範例包含子網。Amazon EC2 會在指定子網中啟動執行個體。如果 VPC 為非預設 VPC，則執行個體預設不會接收公有 IPv4 地址。

```
{
  "ImageId": "ami-0abcdef1234567890",
  "SecurityGroupIds": [ "sg-1a2b3c4d5e6f7g8h9" ],
  "InstanceType": "m5.medium",
  "SubnetId": "subnet-1a2b3c4d",
  "IamInstanceProfile": {
      "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role"
  }
}
```

若要指派公有 IPv4 位址給非預設 VPC 中的執行個體，請依下列範例所示來指定 `AssociatePublicIpAddress` 欄位。指定網路介面時，您必須填入網路介面的子網 ID 和安全群組 ID，而非使用前例程式碼區塊所示的 `SubnetId` 和 `SecurityGroupIds` 欄位。

```
{
  "ImageId": "ami-0abcdef1234567890",
  "KeyName": "my-key-pair",
  "InstanceType": "m5.medium",
  "NetworkInterfaces": [
    {
      "DeviceIndex": 0,
      "SubnetId": "subnet-1a2b3c4d5e6f7g8h9",
      "Groups": [ "sg-1a2b3c4d5e6f7g8h9" ],
      "AssociatePublicIpAddress": true
    }
  ],
  "IamInstanceProfile": {
      "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role"
  }
}
```

## 範例 4：啟動專用 Spot 執行個體
<a name="spot-launch-specification4"></a>

下列範例請求具有`dedicated`租用的 Spot 執行個體。專用 Spot 執行個體必須在 VPC 中啟動。

```
{
  "ImageId": "ami-0abcdef1234567890",
  "KeyName": "my-key-pair",
  "SecurityGroupIds": [ "sg-1a2b3c4d5e6f7g8h9" ],
  "InstanceType": "c5.8xlarge",
  "SubnetId": "subnet-1a2b3c4d5e6f7g8h9",
  "Placement": {
    "Tenancy": "dedicated"
  }
}
```

# 取得 Spot 執行個體請求狀態
<a name="spot-request-status"></a>

為協助您追蹤 Spot 執行個體請求並規劃 Spot 執行個體的使用，請使用 Amazon EC2 提供的請求狀態。例如，請求狀態可提供 Spot 請求尚未完成的理由，或列出阻礙完成 Spot 請求的限制。

在程序的每個步驟中— (此程序也稱為 Spot 請求*生命週期*)—，特定的事件會決定相繼請求的狀態。

下圖顯示了 Spot 執行個體請求的運作方式。請注意，請求類型 (一次性或持久性) 會決定在 Amazon EC2 中斷 Spot 執行個體時或者如果您停止 Spot 執行個體，是否會再次開啟請求。如果是持久性請求，則會在 Spot 執行個體中斷之後再次開啟。如果是持久性請求，而且您停止 Spot 執行個體，只會在您啟動 Spot 執行個體後開啟請求。

![\[Spot 執行個體請求的運作方式。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/spot_lifecycle.png)


**Topics**
+ [取得請求狀態資訊](#get-spot-instance-request-status)
+ [Spot 請求狀態碼](#spot-instance-request-status-understand)
+ [EC2 Spot 執行個體請求履行事件](#spot-request-fulfillment-event)
+ [Spot 請求的狀態變更](spot-instances-request-status-lifecycle.md)

## 取得請求狀態資訊
<a name="get-spot-instance-request-status"></a>

您可取得 Spot 執行個體請求的狀態資訊。

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

**取得請求狀態資訊**

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

1. 在瀏覽窗格中，選取 ** Spot 請求** ，然後選取 Spot 請求。

1. 若要檢查狀態，請在**描述**索引標籤上檢查**狀態**欄位。

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

**取得請求狀態資訊**  
使用下列 [describe-spot-instance-requests](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-spot-instance-requests.html) 命令。

```
aws ec2 describe-spot-instance-requests --spot-instance-request-ids sir-0e54a519c9EXAMPLE
```

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

**取得請求狀態資訊**  
使用 [Get-EC2SpotInstanceRequest](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2SpotInstanceRequest.html) cmdlet。

```
Get-EC2SpotInstanceRequest -SpotInstanceRequestId sir-0e54a519c9EXAMPLE
```

------

## Spot 請求狀態碼
<a name="spot-instance-request-status-understand"></a>

Spot 請求狀態資訊包含狀態碼、更新時間和狀態訊息。綜合這些資訊，可協助您決定 Spot 請求的處理方式。

下列是 Spot 請求的狀態碼：

`az-group-constraint`  
Amazon EC2 無法在同一個可用區域中，啟動您請求的所有執行個體。

`bad-parameters`  
Spot 請求的一個或多個參數無效 (例如，指定的 AMI 不存在)。狀態訊息會顯示哪個參數無效。

`canceled-before-fulfillment`  
Spot 請求在完成之前已遭到使用者取消。

`capacity-not-available`  
您所請求的執行個體沒有足夠的可用容量。

`constraint-not-fulfillable`  
無法完成 Spot 請求，因為有一個或多個限制條件無效 (例如，可用區域不存在)。狀態訊息會顯示哪個限制條件無效。

`fulfilled`  
Spot 請求是 `active`，並且 Amazon EC2 正在啟動您的 競價型執行個體。

`instance-stopped-by-price`  
您的執行個體已停止，因為 Spot 價格超過您的最高價格。

`instance-stopped-by-user`  
您的執行個體已停止，因為使用者已停止該執行個體或從該執行個體執行關機命令。

`instance-stopped-no-capacity`  
由於 EC2 容量管理需求，您的執行個體已停止。

`instance-terminated-by-price`  
您的執行個體已終止，因為 Spot 價格超過您的最高價格。如果請求為永久性，程序會重新開始執行，因此請求會處於等待評估的狀態。

`instance-terminated-by-schedule`  
您的 Spot 執行個體已在排程持續時間結束時終止。

`instance-terminated-by-service`  
執行個體會從停止狀態終止。

`instance-terminated-by-user` 或 `spot-instance-terminated-by-user`  
您終止了已完成的 Spot 執行個體，因此請求狀態為 `closed` (除非為持久性請求)，而執行個體狀態為 `terminated`。

`instance-terminated-launch-group-constraint`  
啟動群組中的一個或多個執行個體已終止，因此不再滿足啟動群組的限制條件。

`instance-terminated-no-capacity`  
由於標準容量管理程序，您的執行個體已終止。

`launch-group-constraint`  
Amazon EC2 無法同時啟動您請求的所有執行個體。啟動群組中的所有執行個體會同時啟動和終止。

`limit-exceeded`  
已超過 EBS 磁碟區數量或磁碟區儲存空間總數量的限制。如需詳細資訊，請參閱「Amazon EBS 使用者指南」**中的 [Amazon VPC 配額](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-resource-quotas.html)。

`marked-for-stop`  
Spot 執行個體已標記停止。

`marked-for-termination`  
Spot 執行個體已標記終止。

`not-scheduled-yet`  
在尚未達到排程日期之前，將不會評估 Spot 請求。

`pending-evaluation`  
在您發出 Spot 執行個體請求後，在系統評估請求的參數時，該請求會進入 `pending-evaluation` 狀態。

`pending-fulfillment`  
Amazon EC2 正在嘗試佈建 競價型執行個體。

`placement-group-constraint`  
尚無法完成 Spot 請求，因為目前無法將 Spot 執行個體加入置放群組。

`price-too-low`  
尚無法完成 Spot 請求，因為最高價格低於 Spot 價格。在這種情況中，不會啟動任何執行個體，而請求的狀態仍為 `open`。

`request-canceled-and-instance-running`  
您在 競價型執行個體仍在執行時取消了 Spot 請求。請求已 `cancelled`，但執行個體仍處於 `running` 狀態。

`schedule-expired`  
Spot 請求已過期，因為未在指定日期之前完成。

`system-error`  
出現未預期的系統錯誤。如果此問題重複發生，請聯絡 AWS 支援 尋求協助。

## EC2 Spot 執行個體請求履行事件
<a name="spot-request-fulfillment-event"></a>

履行 Spot 執行個體請求後，Amazon EC2 會將 EC2 Spot 執行個體請求履行事件傳送至 Amazon EventBridge。您可以建立規則以在發生此事件時採取動作，例如叫用 Lambda 函數或通知 Amazon SNS 主題。

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

```
{
    "version": "0",
    "id": "01234567-1234-0123-1234-012345678901",
    "detail-type": "EC2 Spot Instance Request Fulfillment",
    "source": "aws.ec2",
    "account": "123456789012",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-2",
    "resources": ["arn:aws:ec2:us-east-2:123456789012:instance/i-1234567890abcdef0"],
    "detail": {
        "spot-instance-request-id": "sir-0e54a519c9EXAMPLE",
        "instance-id": "i-1234567890abcdef0"
    }
}
```

如需詳細資訊，請參閱[「Amazon EventBridge 使用者指南」](https://docs.aws.amazon.com/eventbridge/latest/userguide/)。

# Spot 請求的狀態變更
<a name="spot-instances-request-status-lifecycle"></a>

下圖顯示 Spot 請求在整個生命週期的期間中可遵循的路徑 (從提交到終止)。每個步驟皆以節點表示，而每個節點的狀態碼則描述了 Spot 請求和 Spot 執行個體的狀態。

![\[Spot 執行個體請求的生命週期。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/spot-request-status-diagram.png)


**等待評估**  
除非有一個或多個請求參數無效 (`pending-evaluation`)，否則當您建立 Spot 執行個體請求後，它就會立即進入 `bad-parameters` 狀態。


| 狀態碼 | 請求狀態 | 執行個體狀態 | 
| --- | --- | --- | 
| pending-evaluation | open | 不適用 | 
| bad-parameters | closed | 不適用 | 

**保留**  
如果有一個或多個請求限制為有效但尚未滿足，或是沒有足夠的容量，則請求會進入保留狀態，以等待限制條件滿足。請求選項會影響請求完成的可能性。例如，如果沒有容量，則請求會持續處於保留狀態，直到有可用的容量為止。如果指定了可用區域群組，則請求會持續處於保留狀態，直到可用區域的限制條件滿足。

如果其中一個可用區域中斷，其他可用區域內的 Spot 執行個體請求可用的備用 EC2 容量也可能會受到影響。


| 狀態碼 | 請求狀態 | 執行個體狀態 | 
| --- | --- | --- | 
| capacity-not-available | open |  不適用  | 
| price-too-low | open |  不適用  | 
| not-scheduled-yet | open |  不適用  | 
| launch-group-constraint | open |  不適用  | 
| az-group-constraint | open |  不適用  | 
|  placement-group-constraint  |  open  |  不適用  | 
|  constraint-not-fulfillable  |  open  |  不適用  | 

**等待評估/實現-終止**  
如果所建立的請求只在特定期間內有效，而且在請求進入待完成階段之前，此期間就會到期，則此 Spot 執行個體請求可以進入 `terminal` 狀態。如果您取消請求或系統發生錯誤，也會發生此狀況。


| 狀態碼 | 請求狀態 | 執行個體狀態 | 
| --- | --- | --- | 
|  schedule-expired  |  cancelled  |  不適用  | 
|  canceled-before-fulfillment 1  |  cancelled  |  不適用  | 
|  bad-parameters  |  failed  |  不適用  | 
|  system-error  |  closed  |  不適用  | 

¹ 若您取消請求。

**等待實現**  
當您所指定的限制條件 (如果有的話) 已滿足，則 Spot 請求會進入 `pending-fulfillment` 狀態。

此時，Amazon EC2 會準備佈建您所請求的執行個體。如果程序在此時停止，可能是因為使用者已在啟動 Spot 執行個體前取消程序。也可能是因為發生未預期的系統錯誤。


| 狀態碼 | 請求狀態 | 執行個體狀態 | 
| --- | --- | --- | 
|  pending-fulfillment  |  open  |  不適用  | 

**已實現**  
當滿足 Spot 執行個體的所有規格時，Spot 請求即已完成。Amazon EC2 會啟動 Spot 執行個體，這可能需要幾分鐘。如果 Spot 執行個體已進入休眠或是在中斷時停止，它將會繼續處於此狀態，直到請求可以再次完成或取消。


| 狀態碼 | 請求狀態 | 執行個體狀態 | 
| --- | --- | --- | 
|  fulfilled  |  active  |  pending → running  | 
|  fulfilled  |  active  |  stopped → running  | 

如果您停止 Spot 執行個體，則 Spot 請求會進入 `marked-for-stop` 或 `instance-stopped-by-user` 狀態，直到 Spot 執行個體可以再次啟動或取消請求為止。


| 狀態碼 | 請求狀態 | 執行個體狀態 | 
| --- | --- | --- | 
|  marked-for-stop  | active |  stopping  | 
|  instance-stopped-by-user 1  |  disabled 或是 cancelled ²  |  stopped  | 

¹ 如果您停止執行個體或從執行個體執行 shutdown 指令，Spot 執行個體就會進入 `instance-stopped-by-user` 狀態。停止執行個體之後，您可以重新啟動它。重新啟動時，Spot 執行個體請求返回 `pending-evaluation` 狀態，然後在符合限制時 Amazon EC2 會啟動新的 Spot 執行個體。

² 如果您停止 Spot 執行個體但不取消請求，Spot 請求狀態則為 `disabled`。如果 Spot 執行個體已停止且請求到期，請求狀態則為 `cancelled`。

**已實現-終止**  
只要有該執行個體類型可用的容量，且您未終止執行個體，您的Spot 執行個體就會持續運作。如果 Amazon EC2 必須終止 Spot 執行個體，則 Spot 請求會進入終止狀態。如果取消 Spot 請求或終止 競價型執行個體，請求也會進入終止狀態。


| 狀態碼 | 請求狀態 | 執行個體狀態 | 
| --- | --- | --- | 
|  request-canceled-and-instance-running  |  cancelled  |  running  | 
|  marked-for-stop  |  active  |  running  | 
|  marked-for-termination  |  active  |  running  | 
|  instance-stopped-by-price  |  disabled  |  stopped  | 
|  instance-stopped-by-user  |  disabled  |  stopped  | 
|  instance-stopped-no-capacity  |  disabled  |  stopped  | 
|  instance-terminated-by-price  |  closed ( 一次性)，open (持續性)  |  terminated  | 
|  instance-terminated-by-schedule  |  closed  |  terminated  | 
|  instance-terminated-by-service  |  cancelled  |  terminated  | 
|  instance-terminated-by-user  |  closed 或是 cancelled ¹  |  terminated  | 
|  instance-terminated-no-capacity  |  closed ( 一次性)，open (持續性)  |  running †  | 
|  instance-terminated-no-capacity  |  closed ( 一次性)，open (持續性)  |  terminated  | 
|  instance-terminated-launch-group-constraint  |  closed ( 一次性)，open (持續性)  |  terminated  | 

¹ 如果您終止執行個體但未取消請求，則請求狀態為 `closed`。如果終止執行個體而且取消請求，則請求狀態為 `cancelled`。即使您在取消 Spot 執行個體的請求之前就先終止它，在 Amazon EC2 偵測到 Spot 執行個體已終止前，可能會有一段延遲時間。在此種情況中，請求的狀態可以是 `cancelled` 或 `closed`。

† 當 Amazon EC2 中斷 Spot 執行個體 (若其需要回收容量)*和*將執行個體設定為中斷時*終止*，狀態會立即設定為 `instance-terminated-no-capacity` (其未設定為 `marked-for-termination`)。但是，執行個體會保留在 `running` 狀態 2 分鐘，反映執行個體收到 Spot 執行個體中斷通知的 2 分鐘時段。2 分鐘後，執行個體狀態設定為 `terminated`。

**中斷實驗**  
您可以使用 AWS Fault Injection Service 啟動 Spot 執行個體中斷，以測試 Spot 執行個體上的應用程式如何回應。如果 AWS FIS 停止 Spot 執行個體，您的 Spot 請求會進入 `marked-for-stop-by-experiment` 狀態，然後進入 `instance-stopped-by-experiment` 狀態。如果 AWS FIS 終止 Spot 執行個體，您的 Spot 請求會進入 `instance-terminated-by-experiment` 狀態。如需詳細資訊，請參閱[啟動 Spot 執行個體中斷](initiate-a-spot-instance-interruption.md)。


| 狀態碼 | 請求狀態 | 執行個體狀態 | 
| --- | --- | --- | 
| marked-for-stop-by-experiment | active | running | 
| instance-stopped-by-experiment | disabled | stopped | 
| instance-terminated-by-experiment | closed | terminated | 

**永久性請求**  
當 Spot 執行個體終止時 (由您或 Amazon EC2 終止)，如果 Spot 請求為持久性請求，則會回到 `pending-evaluation` 狀態，之後 Amazon EC2 就可以在滿足限制條件時啟動新的 Spot 執行個體。

# 標記 Spot 執行個體請求
<a name="concepts-spot-instances-request-tags"></a>

為了協助分類和管理您的 Spot 執行個體請求，您可以使用自訂中繼資料來標記它們。您可以在建立 Spot 執行個體請求時或之後將標記指派給請求。您可以使用 Amazon EC2 主控台或命令列工具來指派標籤。

當您標記 Spot 執行個體請求時，系統不會自動標記 Spot 執行個體請求所啟動的執行個體和磁碟區。您需要明確標記 Spot 執行個體請求啟動的執行個體和磁碟區。您可以在啟動期間或之後將標籤指派給 Spot 執行個體和磁碟區。

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

**Topics**
+ [先決條件](#tag-spot-request-prereqs)
+ [標記新的 Spot 執行個體請求](#tag-new-spot-instance-request)
+ [標記現有的 Spot 執行個體請求](#tag-existing-spot-instance-request)
+ [檢視 Spot 執行個體請求標籤](#view-spot-instance-request-tags)

## 先決條件
<a name="tag-spot-request-prereqs"></a>

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

您建立的 IAM 政策取決於建立 Spot 執行個體請求時使用的方法。
+ 如果您使用啟動執行個體精靈或 `run-instances` 來請求 競價型執行個體，請參閱 [To grant a user the permission to tag resources when using the launch instance wizard or run-instances](#iam-run-instances)。
+ 如果您使用 `request-spot-instances` 命令請求 Spot 執行個體，請參閱 [To grant a user the permission to tag resources when using request-spot-instances](#iam-request-spot-instances)。

**若要授予使用者許可，以便在使用啟動執行個體精靈或 run-instances 時標記資源**  
建立包含下列項目的 IAM 政策：
+ `ec2:RunInstances` 動作。這會授予使用者啟動執行個體的許可。
+ 對於 `Resource`，請指定 `spot-instances-request`。這可讓使用者建立 Spot 執行個體請求，它們會請求 Spot 執行個體。
+ `ec2:CreateTags` 動作。這會授予使用者建立標籤的許可。
+ 對於 `Resource`，請指定 `*`。這可讓使用者標記執行個體啟動期間建立的所有資源。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowLaunchInstances",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1::image/*",
                "arn:aws:ec2:us-east-1:*:subnet/*",
                "arn:aws:ec2:us-east-1:*:network-interface/*",
                "arn:aws:ec2:us-east-1:*:security-group/*",
                "arn:aws:ec2:us-east-1:*:key-pair/*",
                "arn:aws:ec2:us-east-1:*:volume/*",
                "arn:aws:ec2:us-east-1:*:instance/*",
                "arn:aws:ec2:us-east-1:*:spot-instances-request/*"
            ]
        },
        {
            "Sid": "TagSpotInstanceRequests",
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "*"
        }
    ]
}
```

------

當您使用 RunInstances 動作來建立 Spot 執行個體請求，並在建立時標記 Spot 執行個體請求時，您必須知道 Amazon EC2 如何評估 RunInstances 陳述式中的 `spot-instances-request` 資源，其在 IAM 政策中的評估方式如下：
+ 如果您沒有在建立時標記 Spot 執行個體請求，則 Amazon EC2 不會評估 RunInstances 陳述式中的 `spot-instances-request` 資源。
+ 如果您在建立時標記 Spot 執行個體請求，Amazon EC2 會評估 RunInstances 陳述式中的 `spot-instances-request` 資源。

因此，對於 `spot-instances-request` 資源，下列規則適用於 IAM 政策：
+ 如果您使用 RunInstances 來建立 Spot 執行個體請求，而且您不打算在建立時標記 Spot 執行個體請求，則不需要明確允許 `spot-instances-request` 資源；呼叫將會成功。
+ 如果您使用 RunInstances 來建立 Spot 執行個體請求，並打算在建立時標記 Spot 執行個體請求，則必須在 RunInstances 允許陳述式中包含 `spot-instances-request` 資源，否則呼叫將會失敗。
+ 如果您使用 RunInstances 建立 Spot 執行個體請求，並打算在建立時標記 Spot 執行個體請求，則必須在 CreateTags 允許陳述式中指定 `spot-instances-request` 資源或包含 `*` 萬用字元，否則呼叫將會失敗。

例如，IAM 政策 (包括 Spot 執行個體請求不支援的政策)，請參閱 [使用 競價型執行個體](ExamplePolicies_EC2.md#iam-example-spot-instances)。

**若要授予使用者許可，以便在使用 request-spot-instances 時標記資源**  
建立包含下列項目的 IAM 政策：
+ `ec2:RequestSpotInstances` 動作。這會授予使用者建立 Spot 執行個體請求的許可。
+ `ec2:CreateTags` 動作。這會授予使用者建立標籤的許可。
+ 對於 `Resource`，請指定 `spot-instances-request`。這允許使用者只標記 Spot 執行個體請求。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "TagSpotInstanceRequest",
            "Effect": "Allow",
            "Action": [
                "ec2:RequestSpotInstances",
                "ec2:CreateTags"
            ],
            "Resource": "arn:aws:ec2:us-east-1:111122223333:spot-instances-request/*"
        }
    ]
}
```

------

## 標記新的 Spot 執行個體請求
<a name="tag-new-spot-instance-request"></a>

在 AWS CLI 和 PowerShell 範例中，設定 Spot 執行個體請求，如下所示：
+ 對於 `ResourceType`，請指定 `spot-instances-request`。如果您指定另一個值，Spot 執行個體請求將失敗。
+ 對於 `Tags`，指定金鑰值對。您可以指定多個金鑰值對。

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

**標記新的 Spot 執行個體請求**

1. 遵循[管理您的 Spot 執行個體](using-spot-instances-request.md)程序。

1. 若要新增標記，請在**新增標記**頁面上選擇**新增標記**，然後輸入標記的金鑰和值。為每個額外的標籤**選擇新增其他標籤**。

   對於每個標籤，您可以用相同的標籤來標記 Spot 執行個體請求、Spot 執行個體以及磁碟區。若要標記所有這三個項目，請確保已選取**執行個體**、**磁碟區**和 **Spot 執行個體請求**。若只要標記一個或兩個，請確定已選取要標記的資源，並清除其他資源。

1. 完成建立 Spot 執行個體請求的必要欄位，然後選擇 **Launch** (啟動)。如需詳細資訊，請參閱[管理您的 Spot 執行個體](using-spot-instances-request.md)。

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

**標記新的 Spot 執行個體請求**  
使用 `--tag-specification` 選項並搭配 [request-spot-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-instances.html) 命令。

標籤規格會將兩個標籤新增至 Spot 執行個體請求：`Environment=Production` 與 `Cost-Center=123`。

```
aws ec2 request-spot-instances \
    --instance-count 5 \
    --type "one-time" \
    --launch-specification file://specification.json \
    --tag-specification 'ResourceType=spot-instances-request,Tags=[{Key=Environment,Value=Production},{Key=Cost-Center,Value=123}]'
```

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

**標記新的 Spot 執行個體請求**  
使用 [Request-EC2SpotInstance](https://docs.aws.amazon.com/powershell/latest/reference/items/Request-EC2SpotInstance.html) cmdlet 搭配 `-TagSpecification`。

```
-TagSpecification $tagspec
```

標籤規格的定義如下。它會將兩個標籤新增至 Spot 執行個體請求：`Environment=Production` 與 `Cost-Center=123`。

```
$tag1 = @{Key="Environment"; Value="Production"}
$tag2 = @{Key="Cost-Center"; Value="123"}
$tagspec = New-Object Amazon.EC2.Model.TagSpecification
$tagspec.ResourceType = "spot-instances-request"
$tagspec.Tags = @($tag1,$tag2)
```

------

## 標記現有的 Spot 執行個體請求
<a name="tag-existing-spot-instance-request"></a>

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

**標記現有的 Spot 執行個體請求**

建立 Spot 執行個體請求後，您可以使用主控台為 Spot 執行個體請求新增標籤。

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

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

1. 選取您的 Spot 執行個體請求。

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

**若要使用主控台標記現有的 Spot 執行個體**  
在您的 Spot 執行個體請求啟動 Spot 執行個體之後，您可以使用主控台將標籤新增到執行個體。如需詳細資訊，請參閱[使用主控台新增標籤](Using_Tags_Console.md#adding-or-deleting-tags)。

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

**標記現有的 Spot 執行個體請求或 Spot 執行個體**  
使用[建立標籤](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-tags.html)命令來標記現有資源。在下面的例子中，現有的 Spot 執行個體請求和 Spot 執行個體會使用 `purpose=test` 進行標記。

```
aws ec2 create-tags \
    --resources sir-0e54a519c9EXAMPLE i-1234567890abcdef0 \
    --tags Key=purpose,Value=test
```

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

**標記現有的 Spot 執行個體請求或 Spot 執行個體**  
使用 [New-EC2Tag](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Tag.html) cmdlet。下列範例會將標籤 `purpose=test` 新增至現有 Spot 執行個體請求和 Spot 執行個體。

```
New-EC2Tag `
    -Resource sir-0e54a519c9EXAMPLE, i-1234567890abcdef0 `
    -Tag @{Key="purpose"; Value="test"}
```

------

## 檢視 Spot 執行個體請求標籤
<a name="view-spot-instance-request-tags"></a>

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

**檢視 Spot 執行個體請求標籤**

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

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

1. 選取您的 Spot 執行個體請求並選取 **Tags** (標籤) 標籤。

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

**若要描述 Spot 執行個體請求標籤**  
使用 [describe-spot-instance-requests](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-spot-instance-requests.html) 命令來檢視指定 Spot 執行個體請求的組態，其中包括為請求指定的任何標籤。

```
aws ec2 describe-spot-instance-requests \
    --spot-instance-request-ids sir-0e54a519c9EXAMPLE \
    --query "SpotInstanceRequests[*].Tags"
```

以下為範例輸出。

```
[
    [
        {
            "Key": "Environment",
            "Value": "Production"
        },
        {
            "Key": "Department",
            "Value": "101"
        }
    ]
]
```

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

**若要描述 Spot 執行個體請求標籤**  
使用 [Get-EC2SpotInstanceRequest](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2SpotInstanceRequest.html) cmdlet。

```
(Get-EC2SpotInstanceRequest `
    -SpotInstanceRequestId sir-0e54a519c9EXAMPLE).Tags
```

以下為範例輸出。

```
Key         Value
---         -----
Environment Production
Department  101
```

------

# 若要取消 Spot 執行個體請求
<a name="using-spot-instances-cancel"></a>

如果您不再需要 Spot 執行個體請求，可以取消它。您只能取消狀態為 `open`、`active` 或 `disabled` 的 Spot 執行個體請求。
+ 當請求尚未處理完成，而且尚未啟動任何執行個體時，Spot 執行個體請求的狀態為 `open`。
+ 當請求已處理完成，而且因此啟動了 Spot 執行個體時，Spot 執行個體請求的狀態為 `active`。
+ 當您停止 Spot 執行個體時，您的 Spot 執行個體請求的狀態為 `disabled`。

如果您的 Spot 執行個體請求的狀態為 `active`，並且擁有相關聯的執行中 Spot 執行個體，則取消請求並不會終止執行個體。如需有關終止 Spot 執行個體的詳細資訊，請參閱[終止 Spot 執行個體](using-spot-instances-request.md#terminating-a-spot-instance)。

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

**若要取消 Spot 執行個體請求**

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

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

1. 選取 Spot 執行個體請求。

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

1. (選擇性) 如果您已完成與 競價型執行個體 的關聯，您可以終止它們。在**取消 Spot 請求**對話方塊中，選取**終止執行個體**，然後選取**確認**。

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

**若要取消 Spot 執行個體請求**  
使用下列 [cancel-spot-instance-requests](https://docs.aws.amazon.com/cli/latest/reference/ec2/cancel-spot-instance-requests.html) 命令。

```
aws ec2 cancel-spot-instance-requests --spot-instance-request-ids sir-0e54a519c9EXAMPLE
```

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

**若要取消 Spot 執行個體請求**  
使用 [Stop-EC2SpotInstanceRequest](https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2SpotInstanceRequest.html) cmdlet。

```
Stop-EC2SpotInstanceRequest -SpotInstanceRequestId sir-0e54a519c9EXAMPLE
```

------

# 管理您的 Spot 執行個體
<a name="using-spot-instances-request"></a>

當有容量可用時，Amazon EC2 會啟動 Spot 執行個體。Spot 執行個體會執行，直到它中斷或您自己終止它。

**Topics**
+ [尋找您的 Spot 執行個體](#using-spot-instances-running)
+ [尋找由特定請求啟動的執行個體](#find-request-spot-instances)
+ [停止 Spot 執行個體](#stopping-a-spot-instance)
+ [啟動 Spot 執行個體](#starting-a-spot-instance)
+ [終止 Spot 執行個體](#terminating-a-spot-instance)

## 尋找您的 Spot 執行個體
<a name="using-spot-instances-running"></a>

Spot 執行個體與隨需執行個體會出現在主控台的**執行個體**頁面中。使用下列程序，尋找您的 Spot 執行個體。

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

**尋找您的 Spot 執行個體**

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

1. 在導覽窗格中，選擇**執行個體**。

1. 若要尋找所有 Spot 執行個體，請在搜尋窗格中，選擇**執行個體 lifecycle=spot**。

1. 若要驗證執行個體是否為 Spot 執行個體，請選取執行個體，選擇**詳細資訊**索引標籤，然後檢查**生命週期**的值。Spot 執行個體的值為 `spot`，隨需執行個體的值為 `normal`。

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

**尋找您的 Spot 執行個體**  
使用下面的 [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 命令。

```
aws ec2 describe-instances --filters "Name=instance-lifecycle,Values=spot"
```

**若要判斷執行個體是否為 Spot 執行個體**  
使用下面的 [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 命令。

```
aws ec2 describe-instances \
    --instance-ids i-1234567890abcdef0 \
    --query "Reservations[*].Instances[*].InstanceLifecycle" \
    --output text
```

若該輸出為 `spot`，表示該執行個體為 Spot 執行個體。如果沒有輸出，執行個體即為隨需執行個體。

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

**尋找您的 Spot 執行個體**  
使用 [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet。

```
Get-EC2Instance -Filter @{Name="instance-lifecycle"; Values="spot"}
```

**若要判斷執行個體是否為 Spot 執行個體**  
使用 [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet。

```
(Get-EC2Instance -InstanceId i-1234567890abcdef0).Instances.InstanceLifecycle
```

若該輸出為 `Spot`，表示該執行個體為 Spot 執行個體。如果沒有輸出，執行個體即為隨需執行個體。

------

## 尋找由特定請求啟動的執行個體
<a name="find-request-spot-instances"></a>

使用下列程序來尋找從特定 Spot 執行個體或 Spot 機群請求啟動的 Spot 執行個體。

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

**尋找請求的 Spot 執行個體**

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

1. 在瀏覽窗格中，選擇 **Spot 請求**。包含 Spot 執行個體請求和 Spot 機群請求的清單。

1. 如果已完成 Spot 執行個體請求，**容量**就是 Spot 執行個體的 ID。對於 Spot Fleet ，**容量**表示已完成所請求容量的程度。若要檢視 Spot Fleet 中的執行個體 ID，請選取展開箭頭，或選取該機群並選取 **Instances** (執行個體)。

1. 對於 Spot 機群，**容量**表示已完成所請求容量的程度。若要檢視 Spot 機群中執行個體 ID，請選擇機群 ID 以開啟其詳細資訊頁面，並尋找**執行個體**窗格。

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

**尋找請求的 Spot 執行個體**  
使用下列 [describe-spot-instance-requests](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-spot-instance-requests.html) 命令。

```
aws ec2 describe-spot-instance-requests \
    --spot-instance-request-ids sir-0e54a519c9EXAMPLE \
    --query "SpotInstanceRequests[*].{ID:InstanceId}"
```

下列為範例輸出：

```
[
    {
        "ID": "i-1234567890abcdef0"
    },
    {
        "ID": "i-0598c7d356eba48d7"
    }
]
```

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

**尋找請求的 Spot 執行個體**  
使用 [Get-EC2SpotInstanceRequest](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2SpotInstanceRequest.html) cmdlet。

```
(Get-EC2SpotInstanceRequest -SpotInstanceRequestId sir-0e54a519c9EXAMPLE).InstanceId
```

------

## 停止 Spot 執行個體
<a name="stopping-a-spot-instance"></a>

如果您現在不需要您的 競價型執行個體，但想稍後重新啟動它們，而不會遺失 Amazon EBS 磁碟區中保留的資料，您可以將其停止。停止 Spot 執行個體的步驟與停止隨需執行個體的步驟類似。

**注意**  
停止 Spot 執行個體時，您可以修改其某些執行個體屬性，但無法修改執行個體類型。  
我們不會對已停止的 Spot 執行個體計費，也不會收取數據傳輸費，但是會收取任何 Amazon EBS 磁碟區的儲存費用。

**限制**
+ 如果從 `persistent` Spot 執行個體請求中啟動 Spot 執行個體，則只能停止 Spot 執行個體。
+ 如果已取消關聯的 Spot 執行個體請求，則無法停止 Spot 執行個體。當 Spot 執行個體請求被取消時，您只能終止 Spot 執行個體。
+ 如果 Spot 執行個體屬於某個機群或啟動群組或可用區域群組，則無法停止它。

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

**停止 Spot 執行個體**

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

1. 在導覽窗格中，選擇**執行個體**。

1. 選取 Spot 執行個體。如果您未儲存 Spot 執行個體的執行個體 ID，請參閱 [尋找您的 Spot 執行個體](#using-spot-instances-running)。

1. 選擇 **Instance state (執行個體狀態)**、**Stop instance (停止執行個體)**。

1. 出現確認提示時，請選擇 **Stop (停止)**。

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

**停止 Spot 執行個體**  
使用 [stop-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html) 命令手動停止 Spot 執行個體。

```
aws ec2 stop-instances --instance-ids i-1234567890abcdef0
```

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

**停止 Spot 執行個體**  
使用 [Stop-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2Instance.html) cmdlet。

```
Stop-EC2Instance -InstanceId i-1234567890abcdef0
```

------

## 啟動 Spot 執行個體
<a name="starting-a-spot-instance"></a>

您可以啟動之前已停止的 Spot 執行個體。

**先決條件**

只有在下列情況下，才能啟動 Spot 執行個體：
+ 您手動停止了 Spot 執行個體。
+ Spot 執行個體是 EBS 支援的執行個體。
+ Spot 執行個體容量可用。
+ Spot 價格低於您的最高價格。

**限制**
+ 如果 Spot 執行個體屬於某個機群或啟動群組或可用區域群組，則無法啟動它。

啟動 Spot 執行個體的步驟與啟動隨需執行個體的步驟類似。

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

**啟動 Spot 執行個體**

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

1. 在導覽窗格中，選擇**執行個體**。

1. 選取 Spot 執行個體。如果您未儲存 Spot 執行個體的執行個體 ID，請參閱 [尋找您的 Spot 執行個體](#using-spot-instances-running)。

1. 選擇 **Instance state (執行個體狀態)**、**Start instance (啟動執行個體)**。

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

**啟動 Spot 執行個體**  
使用 [start-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html) 命令手動啟動 Spot 執行個體。

```
aws ec2 start-instances --instance-ids i-1234567890abcdef0
```

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

**啟動 Spot 執行個體**  
使用 [Start-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Start-EC2Instance.html) cmdlet。

```
Start-EC2Instance -InstanceId i-1234567890abcdef0
```

------

## 終止 Spot 執行個體
<a name="terminating-a-spot-instance"></a>

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

如果終止持久性 Spot 執行個體請求啟動的執行中或已停止的 Spot 執行個體，Spot 執行個體請求會轉變為 `open` 狀態，以便啟動新的 Spot 執行個體。若要確保沒有啟動新的 Spot 執行個體，您必須先取消 Spot 執行個體請求。

如果您取消具有執行中 Spot 執行個體的 `active` Spot 執行個體請求，則執行中的 Spot 執行個體不會自動終止；您必須手動終止 Spot 執行個體。

如果您取消具有已停止的 Spot 執行個體的 `disabled` Spot 執行個體請求，則 Amazon EC2 Spot 服務會自動終止已停止的 Spot 執行個體。取消 Spot 執行個體請求和 Spot 服務終止 Spot 執行個體之間可能有短暫延遲。

如需詳細資訊，請參閱[若要取消 Spot 執行個體請求](using-spot-instances-cancel.md)。

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

**手動終止 Spot 執行個體**

1. 終止執行個體前，請檢查您的 Amazon EBS 磁碟區不會在終止時被刪除，並確認已將執行個體存放區磁碟區上的所需資料複製到持久性儲存 (例如 Amazon EBS 或 Amazon S3)，藉此確認您不會遺失任何資料。

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

1. 在導覽窗格中，選擇**執行個體**。

1. 選取 Spot 執行個體。如果您未儲存 Spot 執行個體的執行個體 ID，請參閱 [尋找您的 Spot 執行個體](#using-spot-instances-running)。

1. 選擇**執行個體狀態**、**終止 (刪除) 執行個體**。

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

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

**手動終止 Spot 執行個體**  
使用 [terminate-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/terminate-instances.html) 命令手動終止 Spot 執行個體。

```
aws ec2 terminate-instances --instance-ids i-1234567890abcdef0 i-0598c7d356eba48d7
```

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

**手動終止 Spot 執行個體**  
使用 [Remove-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2Instance.html) cmdlet。

```
Remove-EC2Instance -InstanceId i-1234567890abcdef0
```

------

# Spot 執行個體中斷
<a name="spot-interruptions"></a>

您可以在備用 EC2 容量上啟動 競價型執行個體以獲得大幅折扣，做為在 Amazon EC2 需要取回容量時歸還的交換。當 Amazon EC2 回收 Spot 執行個體時，我們將此事件稱為 *Spot 執行個體中斷*。

對 競價型執行個體的需求可能會隨時產生極大的變化，而取決於有多少可用的未使用 EC2 執行個體，競價型執行個體的可用性也可能會有顯著的變化。Spot 執行個體隨時都有可能中斷。下列是 Amazon EC2 會中斷 競價型執行個體的可能原因：

**容量**  
Amazon EC2 可以在需要取回時中斷 Spot 執行個體。EC2 取回您的執行個體主要用於重新規劃容量，但也可能基於其他原因，例如主機維護或硬體解除委任。

**價格**  
Spot 價格高於您的最高價格。  
您可以在 Spot 請求中指定最高價格。然而，如果您指定了最高價格，執行個體將比未指定最高價時更頻繁受到中斷。

**限制條件**  
如果 Spot 請求包含限制條件，例如啟動群組或可用區域群組，則不再滿足限制條件時，Spot 執行個體會以群組的形式終止。

當 Amazon EC2 中斷 Spot 執行個體時，它會終止、停止或休眠執行個體，具體取決於您在建立 Spot 請求時指定的中斷行為。

**Topics**
+ [中斷行為](interruption-behavior.md)
+ [中斷的準備作業](prepare-for-interruptions.md)
+ [啟動中斷](initiate-a-spot-instance-interruption.md)
+ [Spot 執行個體中斷通知](spot-instance-termination-notices.md)
+ [尋找中斷的 競價型執行個體](finding-an-interrupted-Spot-Instance.md)
+ [確定 Amazon EC2 是否已終止 Spot 執行個體](BidEvictedEvent.md)
+ [帳單](billing-for-interrupted-spot-instances.md)

# Spot 執行個體中斷的行為
<a name="interruption-behavior"></a>

建立 Spot 請求時，您可以指定中斷行為。可能的中斷行為如下：
+ [停止](#stop-spot-instances)
+ [休眠](#hibernate-spot-instances)
+ [終止](#terminate-interrupted-spot-instances)

預設行為是 Amazon EC2 在 Spot 執行個體中斷時將其終止。

## 停止中斷的 競價型執行個體
<a name="stop-spot-instances"></a>

您可以指定 Amazon EC2 在您的 Spot 執行個體中斷時將其停止。Spot 執行個體請求類型必須為 `persistent`。您無法在 Spot 執行個體請求中指定啟動群組。EC2 Fleet 或 Spot 機群請求類型必須為 `maintain`。

**考量事項**
+ 只有 Amazon EC2 才能重新啟動中斷的已停止 Spot 執行個體。
+ 針對由 `persistent` Spot 執行個體請求啟動的 Spot 執行個體：當相同可用區域中的容量可用，且執行個體類型與已停止執行個體相同時，Amazon EC2 便會重新啟動已停止的執行個體。
+ 停止 Spot 執行個體時，您可以修改其某些執行個體屬性，但無法修改執行個體類型。如果卸載或刪除了 EBS 磁碟區，當 Spot 執行個體啟動時，不會連接 EBS 磁碟區。如果卸載了根磁碟區，而 Amazon EC2 試著啟動 Spot 執行個體，則執行個體會啟動失敗，而且 Amazon EC2 會終止已停止的執行個體。
+ 您可以在 Spot 執行個體停止時將其終止。
+ 如果取消 Spot 執行個體請求、EC2 Fleet 或 Spot Fleet，Amazon EC2 會終止已停止的任何相關 Spot 執行個體。
+ 當終止的 Spot 執行個體停止時，您只需支付保留 EBS 磁碟區的費用。使用 EC2 Fleet 和 Spot Fleet 時，如果有許多已停止的執行個體，可能會超出您帳戶的 EBS 磁碟區數量限制。如需在 Spot 執行個體中斷時計費方式的詳細資訊，請參閱 [針對已中斷的 競價型執行個體收費](billing-for-interrupted-spot-instances.md)。
+ 確定您熟悉停止執行個體的含義。如需停止執行個體時會發生狀況的資訊，請參閱 [執行個體狀態之間的差異](ec2-instance-lifecycle.md#lifecycle-differences)。

## 休眠中斷的 競價型執行個體
<a name="hibernate-spot-instances"></a>

您可以指定 Amazon EC2 在您的 Spot 執行個體中斷時將其休眠。如需詳細資訊，請參閱[讓 Amazon EC2 執行個體進入休眠](Hibernate.md)。

Amazon EC2 現在提供與隨需執行個體目前使用相同的 Spot 執行個體休眠體驗。支援更廣泛，現在針對 Spot 執行個體休眠支援下列內容：
+ [更多支援的 AMI](hibernating-prerequisites.md#hibernation-prereqs-supported-amis)
+ [更多支援的執行個體系列](hibernating-prerequisites.md#hibernation-prereqs-supported-instance-families)
+ [使用者啟動的休眠](hibernating-instances.md)

## 終止已中斷的 Spot 執行個體
<a name="terminate-interrupted-spot-instances"></a>

當 Amazon EC2 中斷 Spot 執行個體時，預設情況下會終止執行個體，除非您指定了其他中斷行為，例如停止或休眠。如需詳細資訊，請參閱[終止 Amazon EC2 執行個體](terminating-instances.md)。

# 準備 Spot 執行個體中斷
<a name="prepare-for-interruptions"></a>

對 競價型執行個體的需求可能會隨時產生極大的變化，而取決於有多少可用的未使用 EC2 執行個體，競價型執行個體的可用性也可能會有顯著的變化。Spot 執行個體隨時都有可能中斷。因此，您必須確定應用程式已經為 Spot 執行個體中斷做好準備。

建議您遵循這些最佳實務，以便為 Spot 執行個體中斷做好準備。
+ 使用 Auto Scaling 群組建立 Spot 請求。如果您的 Spot 執行個體中斷，Auto Scaling 群組將自動啟動替換執行個體。如需詳細資訊，請參閱「Amazon EC2 Auto Scaling 使用者指南」**中的[具備多個執行個體類型及購買選項的 Auto Scaling 群組](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups.html)。
+ 使用包含所需軟體組態的 Amazon Machine Image (AMI)，來確保執行個體在請求完成時能夠立即開始運作。您也可以利用使用者資料，在啟動時執行命令。
+ 在停止或終止執行個體時，執行個體儲存體磁碟區上的資料會遺失。將執行個體儲存體磁碟區上的所有重要資料備份到更持久的儲存體，例如 Amazon S3、Amazon EBS 或 Amazon DynamoDB。
+ 請將重要的資料定期存放於當 Spot 執行個體終止時不會受到影響的位置。例如，您可以使用 Amazon S3、Amazon EBS 或 DynamoDB。
+ 將工作分割為較小的任務 (使用 Grid、Hadoop 或採用佇列的架構) 或使用檢查點，如此您就可以經常儲存工作。
+ Amazon EC2 會在執行個體處在提高的中斷風險時對 Spot 執行個體發出重新平衡建議訊號。您可以依賴重新平衡建議，主動管理 Spot 執行個體中斷，而不必等待兩分鐘的 Spot 執行個體中斷通知。如需詳細資訊，請參閱 [EC2 執行個體重新平衡建議](rebalance-recommendations.md)。
+ 使用兩分鐘的 Spot 執行個體中斷通知來監控 Spot 執行個體的狀態。如需詳細資訊，請參閱 [Spot 執行個體中斷通知](spot-instance-termination-notices.md)。
+ 雖然我們努力地盡快提供這些警示，但您的 Spot 執行個體還是有可能在警示發布之前中斷。測試您的應用程式，確保它能夠從容地處理非預期的執行個體中斷，即使您正在監控重新平衡建議訊號和中斷通知。您可以執行使用隨需執行個體的應用程式，然後自行終止隨需執行個體，從而完成此任務。
+ 使用 執行受控故障注入實驗 AWS Fault Injection Service ，以測試您的應用程式在 Spot 執行個體中斷時如何回應。如需詳細資訊，請參閱 *AWS Fault Injection Service 使用者指南*中[教學課程：使用 AWS FIS測試 Spot 執行個體中斷](https://docs.aws.amazon.com/fis/latest/userguide/fis-tutorial-spot-interruptions.html)。

# 啟動 Spot 執行個體中斷
<a name="initiate-a-spot-instance-interruption"></a>

您可以在 Amazon EC2 主控台中選取 Spot 執行個體請求或 Spot 機群請求並啟動 Spot 執行個體中斷，以便您可以測試 Spot 執行個體上的應用程式如何處理中斷。當您啟動 Spot 執行個體中斷時，Amazon EC2 會通知您 Spot 執行個體將在兩分鐘後中斷，接著在兩分鐘後，執行個體會中斷。

執行 Spot 執行個體中斷的基礎服務是 AWS Fault Injection Service (AWS FIS)。如需 的詳細資訊 AWS FIS，請參閱 [AWS Fault Injection Service](https://aws.amazon.com/fis/)。

**注意**  
中斷行為是 `terminate`、`stop` 以及 `hibernate`。如果將中斷行為設定為 `hibernate`，當您啟動 Spot 執行個體中斷時，休眠程序將立即開始。

除了亞太區域 （雅加達）、亞太區域 （大阪）、中國 （北京）、中國 （寧夏） 和中東 （阿拉伯聯合大公國） AWS 區域 以外，所有 都支援啟動 Spot 執行個體中斷。

**Topics**
+ [啟動 Spot 執行個體中斷](#initiate-interruption)
+ [確認 Spot 執行個體中斷](#spot-interruptions-verify-result)
+ [配額](#fis-quota-for-spot-instance-interruption)

## 啟動 Spot 執行個體中斷
<a name="initiate-interruption"></a>

您可以使用 EC2 主控台快速啟動 Spot 執行個體中斷。當您選取 Spot 執行個體請求時，您可以啟動一個 Spot 執行個體的中斷。當您選取 Spot 機群請求時，您可以一次啟動多個 Spot 執行個體的中斷。

如需測試 Spot 執行個體中斷的更進階實驗，您可以使用 AWS FIS 主控台建立自己的實驗。

**使用 EC2 主控台啟動 Spot 執行個體請求中的一個 Spot 執行個體的中斷**

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

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

1. 選取 Spot 執行個體請求，然後選取 **Actions** (動作)、**Initiate interruption** (啟動中斷)。您無法選取多個 Spot 執行個體請求來啟動中斷。

1. 在 **Initiate Spot Instance interruption** (啟動 Spot 執行個體中斷) 對話方塊，於 **Service access** (服務存取) 下，使用預設角色或選擇現有角色。若要選取現有角色，請選取**使用現有的服務角色**，然後對於 **IAM 角色**，選取要使用的角色。

1. 當您準備好要啟動 Spot 執行個體中斷時，請選擇 **Initiate interruption** (啟動中斷)。

**使用 EC2 主控台啟動 Spot 機群請求中的一個或多個 Spot 執行個體的中斷**

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

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

1. 選取 Spot 機群請求，然後選取**動作**、**啟動中斷**。您無法選取多個 Spot 機群請求來啟動中斷。

1. 在**指定 Spot 執行個體的數目**對話方塊中，對於**要中斷之執行個體的數目**，輸入要中斷之 Spot 執行個體的數目，然後選擇**確認**。
**注意**  
該數量不能超過機群中的 Spot 執行個體數量，或每個實驗 AWS FIS 可以中斷的 Spot 執行個體數量[配額](#fis-quota-for-spot-instance-interruption)。

1. 在 **Initiate Spot Instance interruption** (啟動 Spot 執行個體中斷) 對話方塊，於 **Service access** (服務存取) 下，使用預設角色或選擇現有角色。若要選取現有角色，請選取**使用現有的服務角色**，然後對於 **IAM 角色**，選取要使用的角色。

1. 當您準備好要啟動 Spot 執行個體中斷時，請選擇 **Initiate interruption** (啟動中斷)。

**使用 AWS FIS 主控台建立更進階的實驗來測試 Spot 執行個體中斷**

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

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

1. 選擇 **Actions** (動作)，**Create advanced experiments** (建立進階實驗)。

    AWS FIS 主控台隨即開啟。如需詳細資訊，請參閱「AWS Fault Injection Service 使用者指南」**中的[教學課程：使用 AWS FIS測試 Spot 執行個體中斷](https://docs.aws.amazon.com/fis/latest/userguide/fis-tutorial-spot-interruptions.html)。

## 確認 Spot 執行個體中斷
<a name="spot-interruptions-verify-result"></a>

在您啟動中斷後，會發生下列情況：
+ Spot 執行個體會收到[執行個體重新平衡建議](rebalance-recommendations.md)。
+ [Spot 執行個體中斷通知](spot-instance-termination-notices.md)會在 AWS FIS 中斷執行個體的兩分鐘前發出。
+ 兩分鐘後，系統會中斷 Spot 執行個體。
+ 由 停止的 Spot 執行個體會 AWS FIS 保持停止狀態，直到您重新啟動為止。

**確認執行個體在您啟動中斷後是否已中斷**

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

1. 從導覽窗格中，在單獨的瀏覽器索引標籤或視窗中開啟 **Spot Requests** (Spot 請求) 和 **Instances** (執行個體)。

1. 對於 **Spot 請求**，選取 Spot 執行個體請求或 Spot 機群請求。起始狀態為 `fulfilled`。執行個體中斷後，根據中斷行為，狀態會有如下變更：
   + `terminate` – 狀態會變成 `instance-terminated-by-experiment`。
   + `stop` – 狀態會變成 `marked-for-stop-by-experiment`​，然後再變成 `instance-stopped-by-experiment`。

1. 對於 **Instances** (執行個體)，選取 Spot 執行個體。起始狀態為 `Running`。收到 Spot 執行個體中斷通知後兩分鐘，根據中斷行為，狀態會有如下變更：
   + `stop` – 狀態會變成 `Stopping`​，然後再變成 `Stopped`。
   + `terminate` – 狀態會變成 `Shutting-down`​，然後再變成 `Terminated`。

## 配額
<a name="fis-quota-for-spot-instance-interruption"></a>

對於每個實驗 AWS FIS 可以中斷的 Spot 執行個體數量，您的 AWS 帳戶 具有下列預設配額。


| 名稱 | 預設 | 可調整 | Description | 
| --- | --- | --- | --- | 
|  aws:ec2:send-spot-instance-interruptions 的目標 Spot 執行個體  |  每個受支援的區域：5  | 是 |  當您每個實驗使用標籤識別目標時，aws:ec2:send-spot-instance-interruptions 可以鎖定之 Spot 執行個體的數目上限。  | 

您可以要求增加配額。如需詳細資訊，請參閱「Service Quotas 使用者指南」**中的[請求提高配額](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)。

若要檢視 的所有配額 AWS FIS，請開啟 [Service Quotas 主控台](https://console.aws.amazon.com/servicequotas/home)。在導覽窗格中，選擇 **AWS 服務**，然後選取 **AWS Fault Injection Service**。您也可以在 *AWS Fault Injection Service 使用者指南*中檢視 [AWS Fault Injection Service](https://docs.aws.amazon.com/fis/latest/userguide/fis-quotas.html) 的所有配額。

# Spot 執行個體中斷通知
<a name="spot-instance-termination-notices"></a>

*Spot 執行個體中斷通知*是在 Amazon EC2 停止或終止 Spot 執行個體的兩分鐘之前發出的警告。如果將休眠指定為中斷時的行為，您會收到中斷通知，但不會提前兩分鐘收到警告，因為休眠程序會立刻開始執行。

從容處理 Spot 執行個體中斷的最佳方法，就是建立容錯的應用程式架構。若要達成此目的，您可以利用 Spot 執行個體中斷通知。建議您每隔 5 秒檢查這些中斷通知。

中斷通知可做為 EventBridge 事件和 Spot 執行個體上[執行個體中繼資料](ec2-instance-metadata.md)中的項目。中斷通知的原則是盡可能發出。

## EC2 Spot Instance Interruption Warning 事件
<a name="ec2-spot-instance-interruption-warning-event"></a>

當 Amazon EC2 要中斷您的 Spot 執行個體時，它會在實際中斷前兩分鐘發出一個事件 (休眠除外，它會收到中斷通知，但不會提前兩分鐘，因為休眠會立即開始)。Amazon EventBridge 可以偵測到此事件。如需 EventBridge 事件的詳細資訊，請參閱[「Amazon EventBridge 使用者指南」](https://docs.aws.amazon.com/eventbridge/latest/userguide/)。如需如何建立和使用事件規則的詳細範例，請參閱[利用 Amazon EC2 Spot 執行個體中斷通知](https://aws.amazon.com/blogs/compute/taking-advantage-of-amazon-ec2-spot-instance-interruption-notices/)。

下列是 Spot 執行個體中斷事件的範例。`instance-action` 可能的值為 `hibernate`、`stop` 或 `terminate`。

```
{
    "version": "0",
    "id": "12345678-1234-1234-1234-123456789012",
    "detail-type": "EC2 Spot Instance Interruption Warning",
    "source": "aws.ec2",
    "account": "123456789012",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-2",
    "resources": ["arn:aws:ec2:us-east-2a:instance/i-1234567890abcdef0"],
    "detail": {
        "instance-id": "i-1234567890abcdef0",
        "instance-action": "action"
    }
}
```

**注意**  
Spot 執行個體中斷事件的 ARN 格式是 `arn:aws:ec2:availability-zone:instance/instance-id`。此格式與 [EC2 資源 ARN 格式](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-resources-for-iam-policies)不同。

## instance-action
<a name="instance-action-metadata"></a>

`instance-action` 項目會指定動作和動作發生的約略時間 (UTC)。

如果 Spot 執行個體已標記為由 Amazon EC2 停止或終止，則[執行個體中繼資料](ec2-instance-metadata.md)中會出現 `instance-action` 項目。否則不會存在。您可以使用執行個體中繼資料服務第 2 版 (IMDSv2) 擷取 `instance-action`，如下所示。

------
#### [ Linux ]

```
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
    && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/spot/instance-action
```

------
#### [ Windows ]

```
[string]$token = Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} `
    -Method PUT -Uri http://169.254.169.254/latest/meta-data/spot/instance-action
```

------

 下列範例輸出指出此執行個體將會停止的時間點。

```
{"action": "stop", "time": "2017-09-18T08:22:00Z"}
```

下列範例輸出指出此執行個體將會終止的時間點。

```
{"action": "terminate", "time": "2017-09-18T08:22:00Z"}
```

如果 Amazon EC2 未準備停止或終止執行個體，或是您自行終止了執行個體，則執行個體中繼資料中不會出現 `instance-action`，而且您會在嘗試擷取它時收到 HTTP 404 錯誤。

## termination-time
<a name="termination-time-metadata"></a>

`termination-time` 項目會指定執行個體將接收結束訊號的約略時間 (UTC)。

**注意**  
保留此項目是為了回溯相容性；您應改用 `instance-action`。

如果您的 Spot 執行個體被 Amazon EC2 標記為終止 (由於 Spot 執行個體中斷，中斷行為設定為 `terminate`，或者由於取消持續性 Spot 執行個體請求)，則 `termination-time` 項目會出現在[執行個體中繼資料](ec2-instance-metadata.md)中。否則不會存在。您可以使用 `termination-time` IMDSv2 擷取，如下所示。

------
#### [ Linux ]

```
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
if curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/spot/termination-time | grep -q .*T.*Z; then echo termination_scheduled; fi
```

------
#### [ Windows ]

```
[string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/meta-data/spot/termination-time
```

------

以下為範例輸出。

```
2015-01-05T18:02:00Z
```

如果 Amazon EC2 沒有準備終止執行個體 (無論是因為沒有 Spot 執行個體中斷，或是因為中斷行為設定為 `stop` 或 `hibernate`) 或是您自行終止 Spot 執行個體，則 `termination-time` 項目可能不存在於執行個體中繼資料中 (因此您會收到 HTTP 404 錯誤)，或是包含的值並非時間值。

如果 Amazon EC2 終止執行個體的動作失敗，則請求狀態會設定為 `fulfilled`。`termination-time` 值仍會存在於執行個體中繼資料中，包含原來的約略時間 (現在這個時間已經成為過去)。

# 尋找中斷的 競價型執行個體
<a name="finding-an-interrupted-Spot-Instance"></a>

當您描述 EC2 執行個體時，結果會包含 Spot 執行個體。Spot 執行個體的執行個體生命週期為 `spot`。Spot 執行個體的執行個體狀態為 `stopped` 或 `terminated`，視您設定的中斷行為而定。若為已休眠的 Spot 執行個體，執行個體狀態為 `stopped`。

如需中斷原因的其他詳細資訊，請檢查 Spot 要求狀態碼。如需詳細資訊，請參閱[取得 Spot 執行個體請求狀態](spot-request-status.md)。

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

**尋找中斷的 Spot 執行個體**

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

1. 在導覽窗格中，選擇**執行個體**。

1. 套用下列篩選條件：**執行個體生命週期=spot**。

1. 根據您設定的中斷行為，套用**執行個體狀態=已停止**或**執行個體狀態=已終止**篩選條件。

1. 對於每個 Spot 執行個體，在**詳細資訊**索引標籤的**執行個體詳細資訊**下，找到**狀態轉換訊息** 下列程式碼指出 Spot 執行個體已中斷。
   + `Server.SpotInstanceShutdown`
   + `Server.SpotInstanceTermination`

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

**尋找中斷的 Spot 執行個體**  
使用 `--filters` 選項並搭配 [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 命令。如需在輸出中列出執行個體 ID，請包含 `--query` 選項。

如果中斷行為是終止 Spot 執行個體，請使用下列範例：

```
aws ec2 describe-instances \
    --filters Name=instance-lifecycle,Values=spot \
              Name=instance-state-name,Values=terminated \
              Name=state-reason-code,Values=Server.SpotInstanceTermination \
    --query "Reservations[*].Instances[*].InstanceId"
```

如果中斷行為是停止 Spot 執行個體，請使用下列範例：

```
aws ec2 describe-instances \
    --filters Name=instance-lifecycle,Values=spot \
              Name=instance-state-name,Values=stopped \
              Name=state-reason-code,Values=Server.SpotInstanceShutdown \
    --query "Reservations[*].Instances[*].InstanceId"
```

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

**尋找中斷的 Spot 執行個體**  
使用 [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet。

如果中斷行為是終止 Spot 執行個體，請使用下列範例：

```
(Get-EC2Instance `
    -Filter @{Key="instance-lifecycle"; Values="spot"} `
            @{Key="instance-state-name"; Values="terminated"} `
            @{Key="state-reason-code"; Values="Server.SpotInstanceTermination"}).Instances.InstanceId
```

如果中斷行為是停止 Spot 執行個體，請使用下列範例：

```
(Get-EC2Instance `
    -Filter @{Key="instance-lifecycle"; Values="spot"} `
            @{Key="instance-state-name"; Values="stopped"} `
            @{Key="state-reason-code"; Values="Server.SpotInstanceTermination"}).Instances.InstanceId
```

------

# 確定 Amazon EC2 是否已終止 Spot 執行個體
<a name="BidEvictedEvent"></a>

Spot 執行個體會持續執行，直到 Amazon EC2 回應 Spot 執行個體中斷而終止，或直到您自行終止為止。如需詳細資訊，請參閱[Spot 執行個體中斷的行為](interruption-behavior.md)。

Spot 執行個體終止後，您可以使用 AWS CloudTrail 來查看 Amazon EC2 是否將其終止。如果 CloudTrail 日誌包含 `BidEvictedEvent`，這表示 Amazon EC2 已終止 Spot 執行個體。如果您看到的是 `TerminateInstances` 事件，則表示使用者終止了該 Spot 執行個體。

或者，如果您想要收到 Amazon EC2 將中斷 Spot 執行個體的通知，請使用 Amazon EventBridge 來回應 [EC2 Spot 執行個體中斷警告事件](spot-instance-termination-notices.md#ec2-spot-instance-interruption-warning-event)。

**在 CloudTrail 中檢視 BidEvictedEvent 事件**

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

1. 在導覽窗格中，選擇 **Event history** (事件歷史記錄)。

1. 從篩選條件清單中，選擇**事件名稱**，然後在右側的篩選條件欄位中，輸入 **BidEvictedEvent**。

1. (選用) 選取時間範圍。

1. 如果清單不是空的，請從產生的項目中選擇 **BidEvictedEvent**，以開啟其詳細資訊頁面。您可以在**事件記錄**窗格中找到 Spot 執行個體的相關資訊，包括 Spot 執行個體的 ID。以下為此事件記錄的範例。

   ```
   {
       "eventVersion": "1.05",
       "userIdentity": {
           "accountId": "123456789012",
           "invokedBy": "ec2.amazonaws.com"
       },
       "eventTime": "2016-08-16T22:30:00Z",
       "eventSource": "ec2.amazonaws.com",
       "userAgent": "ec2.amazonaws.com",
       "sourceIPAddress": "ec2.amazonaws.com",
       "eventName": "BidEvictedEvent",
       "awsRegion": "us-east-2",
       "eventID": "d27a6096-807b-4bd0-8c20-a33a83375054",
       "eventType": "AwsServiceEvent",
       "recipientAccountId": "123456789012",
       "RequestParameters": null,
       "ResponseElements": null,
       "serviceEventDetails": {
           "instanceIdSet": [
             "i-1eb2ac8eEXAMPLE"
           ]
       }
   }
   ```

1. 如果您找不到 `BidEvictedEvent` 事件的項目，請輸入 **TerminateInstances** 作為事件名稱。如需 `TerminateInstances` 記錄格式的詳細資訊，請參閱 [Amazon EC2 API 事件範例](monitor-with-cloudtrail.md#cloudtrail-event-examples)。

# 針對已中斷的 競價型執行個體收費
<a name="billing-for-interrupted-spot-instances"></a>

當 Spot 執行個體中斷時，您得支付執行個體和 EBS 磁碟區用量的費用，您也可能需要支付其他費用，收費如下。

## 執行個體用量
<a name="billing-for-interrupted-spot-instances-instance-usage"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/billing-for-interrupted-spot-instances.html)

## EBS 磁碟區用量
<a name="billing-for-interrupted-spot-instances-ebs-usage"></a>

當中斷的 Spot 執行個體停止時，您只需支付保留 EBS 磁碟區的費用。

使用 EC2 Fleet 和 Spot Fleet 時，如果有許多已停止的執行個體，可能會超出您帳戶的 EBS 磁碟區數量限制。

# EC2 執行個體重新平衡建議
<a name="rebalance-recommendations"></a>

EC2 執行個體*重新平衡推薦*是一種訊號，可在 Spot 執行個體的中斷風險升高時通知您。該訊號能夠比[兩分鐘 Spot 執行個體中斷通知](spot-instance-termination-notices.md)更快到達，讓您有機會主動管理 Spot 執行個體。您可以決定將工作負載重新平衡至未處於提高之中斷風險的新的或現有 競價型執行個體。

Amazon EC2 並不總是能夠在兩分鐘 Spot 執行個體中斷通知之前傳送重新平衡建議訊號。因此，重新平衡建議訊號可以與兩分鐘的中斷通知一起到達。

重新平衡建議可做為 EventBridge 事件和 Spot 執行個體上[執行個體中繼資料](ec2-instance-metadata.md)中的項目。盡可能發出事件。

**注意**  
僅針對在 2020 年 11 月 5 日 00:00 UTC 之後推出的 競價型執行個體 支援重新平衡建議。

**Topics**
+ [您可以採取的重新平衡動作](#rebalancing-actions)
+ [監控重新平衡建議訊號](#monitor-rebalance-recommendations)
+ [使用重新平衡建議訊號的服務](#services-using-rebalance-rec-signal)

## 您可以採取的重新平衡動作
<a name="rebalancing-actions"></a>

以下是您可以採取的一些可能的重新平衡動作：

順利關機  
當您收到 Spot 執行個體的重新平衡建議訊號時，您可以啟動執行個體關機程序，其中可能包括確保在程序停止之前完成程序。例如，您可以將系統或應用程式日誌上傳到 Amazon Simple Storage Service (Amazon S3)、關閉 Amazon SQS 工作者，或者您可以從網域名稱系統 (DNS) 完成取消註冊。您也可以將工作儲存在外部儲存體中，稍後再繼續執行。

防止排程新工作  
當您收到 Spot 執行個體的重新平衡建議訊號時，您可以防止在執行個體上排程新工作，同時繼續使用執行個體，直到排定的工作完成為止。

主動啟動新的替代執行個體  
您可以設定 Auto Scaling 群組、EC2 Fleet 或 Spot Fleet ，在發出重新平衡建議訊號時自動啟動替代 Spot 執行個體。如需詳細資訊，請參閱「Amazon EC2 Auto Scaling 使用者指南」**中的[使用容量重新平衡處理 Amazon EC2 Spot 中斷](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-capacity-rebalancing.html)，以及此指南中的 [在 EC2 機群和 Spot 機群中使用容量重新平衡，來取代具有風險的 Spot 執行個體](ec2-fleet-capacity-rebalance.md)。

## 監控重新平衡建議訊號
<a name="monitor-rebalance-recommendations"></a>

您可以監視重新平衡建議訊號，以便在發出重新平衡建議訊號時，您可以採取在上一部分中指定的動作。重新平衡建議訊號可作為傳送至 Amazon EventBridge (之前稱為 Amazon CloudWatch Events) 的事件，以及 Spot 執行個體上的執行個體中繼資料。

**Topics**
+ [使用 Amazon EventBridge](#cp-eventbridge)
+ [使用執行個體中繼資料](#cp-instance-metadata)

### 使用 Amazon EventBridge
<a name="cp-eventbridge"></a>

在針對 Spot 執行個體發出重新平衡建議訊號時，訊號的事件會傳送至 Amazon EventBridge。如果 EventBridge 偵測到事件模式符合規則中定義的模式，EventBridge 會叫用規則中指定的目標 (或多個目標)。

以下是重新平衡建議訊號的範例事件。

```
{
    "version": "0",
    "id": "12345678-1234-1234-1234-123456789012",
    "detail-type": "EC2 Instance Rebalance Recommendation",
    "source": "aws.ec2",
    "account": "123456789012",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-2",
    "resources": ["arn:aws:ec2:us-east-2:123456789012:instance/i-1234567890abcdef0"],
    "detail": {
        "instance-id": "i-1234567890abcdef0"
    }
}
```

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

`"detail-type": "EC2 Instance Rebalance Recommendation"`  
識別事件是重新平衡建議事件

`"source": "aws.ec2"`  
識別該事件是來自 Amazon EC2

#### 建立 EventBridge 規則
<a name="cp-eventbridge-rule"></a>

您可以寫入 EventBridge 規則，並自動化在事件模式符合規則時要採取哪些動作。

下列範例會建立 EventBridge 規則，以便在 Amazon EC2 每次發出重新平衡建議訊號時傳送電子郵件、簡訊或行動裝置推播通知。將該信號作為 `EC2 Instance Rebalance Recommendation` 事件發出 ，這觸發了規則定義的動作。

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

**針對重新平衡建議事件建立 EventBridge 規則**

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. 針對 **Event bus** (事件匯流排) 選擇 **default** (預設值)。當您帳戶中的 AWS 服務產生事件時，一律會前往您帳戶的預設事件匯流排。

   1. 針對 **Rule type** (規則類型) 選擇 **Rule with an event pattern** (具有事件模式的規則)。

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

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

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

   1. 針對此範例的 **Event pattern** (事件模式)，您需指定下列事件模式，以便與 `EC2 Instance Rebalance Recommendation` 事件相符，然後選擇 **Save** (儲存)。

      ```
      {
       "source": ["aws.ec2"],
       "detail-type": ["EC2 Instance Rebalance Recommendation"]
      }
      ```

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

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

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

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

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

         1. 針對 **Event type** (事件類型)，選擇 **EC2 Instance Rebalance Recommendation** (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)。

### 使用執行個體中繼資料
<a name="cp-instance-metadata"></a>

執行個體中繼資料類別 `events/recommendations/rebalance` 在為 Spot 執行個體發出重新平衡建議訊號時提供大約的時間 (UTC)。

我們建議您每 5 秒檢查重新平衡建議訊號，這樣您就不會錯過對重新平衡建議採取行動的機會。

如果 Spot 執行個體收到重新平衡建議，則發出訊號的時間會出現在執行個體中繼資料中。您可以擷取如下所示的發出訊號時間。

------
#### [ IMDSv2 ]

**Linux**  
透過 Linux 執行個體執行下面的命令。

**IMDSV2**

```
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
    && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/events/recommendations/rebalance
```

**Windows**  
從 Windows 執行個體執行下列 cmdlet

```
[string]$token = Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} `
    -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token" = $token} `
    -Method GET -Uri http://169.254.169.254/latest/meta-data/events/recommendations/rebalance
```

------
#### [ IMDSv1 ]

**Linux**  
透過 Linux 執行個體執行下面的命令。

```
curl http://169.254.169.254/latest/meta-data/events/recommendations/rebalance
```

**Windows**  
透過 Windows 執行個體中執行下列 cmdlet。

```
Invoke-RestMethod -Uri http://169.254.169.254/latest/meta-data/events/recommendations/rebalance
```

------

以下是範例輸出，它表示為 Spot 執行個體發出重新平衡建議訊號的時間 (UTC)。

```
{"noticeTime": "2020-10-27T08:22:00Z"}
```

如果尚未針對執行個體發出訊號，則 `events/recommendations/rebalance` 不存在， 並且您會在嘗試擷取它時收到 HTTP 404 錯誤。

## 使用重新平衡建議訊號的服務
<a name="services-using-rebalance-rec-signal"></a>

Amazon EC2 Auto Scaling、EC2 Fleet 和 Spot Fleet 使用重新平衡建議信號，讓您在執行中的執行個體收到兩分鐘 Spot 執行個體中斷通知之前，藉由使用新的 Spot 執行個體主動擴增您的機群，讓您輕鬆維持工作負載可用性。您可以讓這些服務主動地監控並回應影響 競價型執行個體 的可用性的變更 如需詳細資訊，請參閱下列內容：
+ 「Amazon EC2 Auto Scaling 使用者指南」**中的[使用容量重新平衡處理 Amazon EC2 Spot 中斷](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-capacity-rebalancing.html)
+ 在本使用者指南 EC2 Fleet 和 Spot 機群主題中的 [在 EC2 機群和 Spot 機群中使用容量重新平衡，來取代具有風險的 Spot 執行個體](ec2-fleet-capacity-rebalance.md)

# Spot 配置分數
<a name="spot-placement-score"></a>

Spot 配置分數功能可以根據您的 Spot 容量需求建議 AWS 區域或可用區域。Spot 容量會波動，而且您無法確定您始終都能取得所需的容量。Spot 配置分數表示 Spot 請求在區域或可用區域中成功的可能性。

**注意**  
Spot 配置分數不會就可用容量或中斷風險提供任何保證。Spot 配置分數僅作為建議提供。

**使用案例**

您可以針對下列情況使用 Spot 配置分數功能：
+ 視需要在不同區域中重新放置並擴展 Spot 運算容量，以回應目前區域中增加的容量需求或降低的可用容量。
+ 識別執行單一可用區域工作負載的最佳可用區域。
+ 模擬未來的 Spot 容量需求，以便您可以挑選最佳區域來擴充 Spot 型工作負載。
+ 尋找執行個體類型的最佳組合以滿足您的 Spot 容量需求。

**Topics**
+ [限制](#sps-limitations)
+ [成本](#sps-costs)
+ [Spot 配置分數的運作方式](how-sps-works.md)
+ [Spot 配置分數的必要許可](sps-iam-permission.md)
+ [計算 Spot 配置分數](work-with-spot-placement-score.md)

## 限制
<a name="sps-limitations"></a>
+ **目標容量限制** – 您的 Spot 配置分數目標容量限制是基於最近的 Spot 用量，同時考量潛在的用量成長。如果沒有最近的 Spot 用量，我們會為您提供符合 Spot 請求限制的低預設限制。
+ **請求組態限制** – 如果我們偵測到未與 Spot 配置分數功能之預期用途相關聯的模式，可以在 24 小時期間內限制新請求組態的數目。如果達到限制，您可以重試已使用的請求組態，但無法指定新的請求組態，直到下一個 24 小時期間。
+ **執行個體類型數目下限** – 如果指定執行個體類型，則您必須至少指定三種不同的執行個體類型，否則 Amazon EC2 將傳回低 Spot 配置分數。同樣地，如果您指定執行個體屬性，它們必須解析為至少三種不同的執行個體類型。如果執行個體類型具有不同的名稱，則會將其視為不同。例如，m5.8xlarge、m5a.8xlarge 和 m5.12xlarge 都會視為不同。

## 成本
<a name="sps-costs"></a>

使用 Spot 配置分數功能無需額外費用。

# Spot 配置分數的運作方式
<a name="how-sps-works"></a>

當您使用 Spot 配置分數功能時，首先要針對 Spot 執行個體指定運算需求，然後 Amazon EC2 會傳回 Spot 請求可能成功的前 10 個區域或可用區域。每個區域或可用區域的分數範圍從 1 到 10，其中 10 表示您的 前 Spot 請求很可能成功，1 表示您的 Spot 請求不可能成功。

**Topics**
+ [步驟 1：指定您的 Spot 需求](#sps-specify-requirements)
+ [步驟 2：篩選 Spot 配置分數回應](#get-sps)
+ [步驟 3：檢閱建議](#sps-recommendations)
+ [步驟 4：使用建議](#sps-use-recommendations)

## 步驟 1：指定您的 Spot 需求
<a name="sps-specify-requirements"></a>

首先，您可以指定所需的目標 Spot 容量和運算需求，如下所示：

1. **指定目標 Spot 容量，並選擇性指定目標容量單位。**

   您可以根據執行個體或 vCPU 的數量或 MiB 中的記憶體容量來指定所需的目標 Spot 容量。若要以 vCPU 數目或記憶體數量指定目標容量，您必須將目標容量單位指定為 `vcpu` 或 `memory-mib`。否則，其會預設為執行個體的數量。

   根據 vCPU 數目或記憶體數量來指定目標容量，您可以在計算總容量時使用這些單位。例如，如果想要混合使用不同大小的執行個體，您可以將目標容量指定為 vCPU 總數。Spot 配置分數功能接著會透過其 vCPU 數目來考量請求中的每個執行個體類型，並在加總目標容量時計算 vCPU 總數，而不是執行個體總數。

   例如，假設您指定的目標容量總計為 30 個 vCPU，而執行個體類型清單包含 c5.xlarge (4 個 vCPU)、m5.2xlarge (8 個 vCPU) 和 r5.large (2 個 vCPU)。若要達到總數 30 個的 vCPU，您可以取得 2 c5.xlarge (2\$14 個 vCPU)、2 m5.2xlarge (2\$18 個 vCPU) 和 3 r5.large (3\$12 個 vCPUs) 的混合。

1. **指定執行個體類型或執行個體屬性。**

   您可以指定要使用的執行個體類型，也可以指定運算需求所需的執行個體屬性，然後讓 Amazon EC2 識別具有這些屬性的執行個體類型。這就是所謂的屬性型執行個體類型選項。

   您無法在相同的 Spot 配置分數請求中同時指定執行個體類型和執行個體屬性。

   如果指定執行個體類型，則您必須至少指定三種不同的執行個體類型，否則 Amazon EC2 將傳回低 Spot 配置分數。同樣地，如果您指定執行個體屬性，它們必須解析為至少三種不同的執行個體類型。

如需指定 Spot 需求的不同方式範例，請參閱 [範例組態](work-with-spot-placement-score.md#sps-example-configs)。

## 步驟 2：篩選 Spot 配置分數回應
<a name="get-sps"></a>

Amazon EC2 會計算每個區域或可用區域的 Spot 配置分數，並傳回 Spot 請求可能成功的前 10 個區域或前 10 個可用區域。預設值是傳回得分區域的清單。如果您計劃將所有 Spot 容量啟動至單一可用區域，請求得分可用區域的清單很有用。

您可以指定區域篩選條件來縮小將在回應中傳回的區域。

您可以結合區域篩選條件和得分可用區域的請求。如此一來，得分可用區域僅限於您已篩選的區域。若要找出區域中得分最高的可用區域，請僅指定該區域，然後回應將傳回該區域中所有可用區域的得分清單。

## 步驟 3：檢閱建議
<a name="sps-recommendations"></a>

每個區域或可用區域的 Spot 配置分數是根據目標容量、執行個體類型的組成、歷史和目前 Spot 使用趨勢，以及請求的時間來計算。由於 Spot 容量持續波動，因此在不同時間計算時，相同的 Spot 配置分數請求可能會產生不同的分數。

區域和可用區域的分數範圍是從 1 到 10。分數 10 表示您的 Spot 請求很有可能 (但不保證) 成功。分數 1 表示您的 Spot 請求完全不可能成功。對於不同的區域或可用區域，可能會傳回相同的分數。

如果傳回低分數，您可以編輯運算需求並重新計算分數。您也可以在一天中的不同時間，針對相同的運算需求，請求 Spot 配置分數建議。

## 步驟 4：使用建議
<a name="sps-use-recommendations"></a>

僅在 Spot 請求的組態與 Spot 配置分數組態 (目標容量、目標容量單位，以及執行個體類型或執行個體屬性) 完全相同，且該請求設定為使用 `capacity-optimized` 配置策略時，Spot 配置分數才相關。否則，取得可用 Spot 容量的可能性將不符合分數。

雖然 Spot 配置分數充當指導方針，而且沒有任何分數保證您的 Spot 請求會完全或部分實現，但您可以使用下列資訊來取得最佳結果：
+ **使用相同組態** – 僅在 Auto Scaling 群組、EC2 Fleet 或 Spot Fleet 中的 Spot 請求組態 (目標容量、目標容量單位，以及執行個體類型或執行個體屬性) 與您為了取得 Spot 配置分數而輸入的組態相同時，Spot 配置分數才相關。

  如果您在 Spot 配置分數請求中使用了屬性型執行個體類型選取，則可以使用屬性型執行個體類型選取，來設定 Auto Scaling 群組、EC2 Fleet 或 Spot Fleet。如需詳細資訊，請參閱[使用參數型執行個體類型選項建立混合執行個體群組](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-mixed-instances-group-attribute-based-instance-type-selection.html)和 [指定屬性，為 EC2 機群或 Spot 機群選取執行個體類型](ec2-fleet-attribute-based-instance-type-selection.md)。
**注意**  
如果您根據 vCPU 數目或記憶體數量指定目標容量，並在 Spot 配置分數組態中指定了執行個體類型，請注意，您目前無法在 Auto Scaling 群組、EC2 Fleet 或 Spot Fleet 中建立此組態。反之，您必須使用 `WeightedCapacity` 參數，手動設定執行個體加權。
+ **使用 `capacity-optimized` 分配策略** – 任何分數都假設您的機群請求將設定為使用所有的可用區域 (用於跨區域請求容量) 或單一可用區域 (如果在某個可用區域請求容量) 和 `capacity-optimized` Spot 分配策略，以便您可以成功請求 Spot 容量。如果您使用其他配置策略 (例如 `lowest-price`)，取得可用 Spot 容量的可能性將不符合分數。
+ **立即對分數採取行動** – Spot 配置分數建議會反映請求時的可用 Spot 容量，並且由於 Spot 容量波動，因此在不同時間計算時，相同的組態可能會產生不同的分數。雖然分數 10 表示您的 Spot 容量請求很可能 (但不保證) 成功，但為了取得最佳結果，我們建議您立即對分數採取行動。我們也建議您在每次嘗試容量請求時取得全新的分數。

# Spot 配置分數的必要許可
<a name="sps-iam-permission"></a>

根據預設，IAM 身分 (使用者、角色或群組) 沒有使用 [Spot 配置分數](spot-placement-score.md) 的許可。若要允許 IAM 身分使用 Spot 配置分數，您必須建立 IAM 政策，授予使用 `ec2:GetSpotPlacementScores` EC2 API 動作的許可。接著將政策連接至需要此許可的 IAM 身分。

以下為一個範例 IAM 政策，該政策授予使用 `ec2:GetSpotPlacementScores` EC2 API 動作的許可。

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

****  

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

------

如需編輯 IAM 政策的相關資訊，請參閱「IAM 使用者指南」[https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html)中的*編輯 IAM 政策*。

若要提供存取權，請新增權限至您的使用者、群組或角色：
+ 中的使用者和群組 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 配置分數
<a name="work-with-spot-placement-score"></a>

您可以根據目標容量和運算需求計算 Spot 配置分數。如需詳細資訊，請參閱[Spot 配置分數的運作方式](how-sps-works.md)。

**所需的 許可**  
請確保備妥必要許可。如需詳細資訊，請參閱[Spot 配置分數的必要許可](sps-iam-permission.md)。

**Topics**
+ [使用執行個體屬性計算](#sps-specify-instance-attributes-console)
+ [使用執行個體類型計算](#sps-specify-instance-types-console)
+ [使用 計算 AWS CLI](#calculate-sps-cli)

**是否在尋找自動化解決方案？** 您可以建置 Spot 配置分數追蹤器儀表板，以自動擷取分數並將分數儲存在 Amazon CloudWatch 中，而不是遵循本「使用者指南」中的手動步驟。如需詳細資訊，請參閱[「 AWS上的建置 Spot 配置分數追蹤器儀表板指南」](https://aws.amazon.com/solutions/guidance/building-a-spot-placement-score-tracker-dashboard-on-aws/)。

## 使用執行個體屬性計算
<a name="sps-specify-instance-attributes-console"></a>

**執行個體屬性來計算 Spot 配置分數**

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

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

1. 選擇**請求 Spot 執行個體**旁的向下箭頭，然後選擇**計算 Spot 配置分數**。

1. 選擇 **Enter requirements** (輸入需求)。

1. 對於 **Target capacity** (目標容量)，根據 **instances** (執行個體) 或 **vCPUs** 的數目，或 **memory (MiB)** (記憶體 (MiB)) 的數量輸入您所需的容量。

1. 對於 **Instance type requirements** (執行個體類型需求)，若要指定您的運算需求，並讓 Amazon EC2 識別符合這些要求的最佳執行個體類型，請選擇 **Specify instance attributes that match your compute requirements** (指定符合運算需求的執行個體屬性)。

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

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

1. 對於 **CPU architecture** (CPU 架構)，選取所需的執行個體架構。

1. (選用) 對於 **Additional instance attributes** (其他執行個體屬性)，您可以選擇性地指定一或多個屬性，以更詳細地表達您的運算需求。每個額外屬性都會將進一步的限制新增至您的請求。您可以省略額外屬性；省略時，就會使用預設值。如需每個屬性及其預設值的描述，請參閱 [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. 選擇 **Load placement scores** (載入配置分數)，然後檢閱結果。

1. (選用) 若要顯示特定區域的 Spot 配置分數，請針對 **Regions to evaluate** (要評估的區域)，選取要評估的區域，然後選取 **Calculate placement scores** (計算配置分數)。

1. (選用) 若要顯示所顯示區域中可用區域的 Spot 配置分數，請選取**提供每個可用區域的配置分數**核取方塊。如果您想要將所有 Spot 容量啟動至單一可用區域，得分可用區域的清單很有用。

1. (選用) 若要編輯您的運算需求並取得新的配置分數，請選擇 **Edit** (編輯)、進行必要的調整，然後選擇 **Calculate placement scores** (計算配置分數)。

## 使用執行個體類型計算
<a name="sps-specify-instance-types-console"></a>

**指定執行個體類型來計算 Spot 配置分數**

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

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

1. 選擇**請求 Spot 執行個體**旁的向下箭頭，然後選擇**計算 Spot 配置分數**。

1. 選擇 **Enter requirements** (輸入需求)。

1. 對於 **Target capacity** (目標容量)，根據 **instances** (執行個體) 或 **vCPUs** 的數目，或 **memory (MiB)** (記憶體 (MiB)) 的數量輸入您所需的容量。

1. 對於 **Instance type requirements** (執行個體類型需求)，若要指定要使用的執行個體類型，請選取 **Manually select instance types** (手動選取執行個體類型)。

1. 選取 **Select instance types** (選取執行個體類型)、選取要使用的執行個體類型，然後選取 **Select** (選取)。若要快速尋找執行個體類型，您可以使用篩選條件列，依不同屬性篩選執行個體類型。

1. 選擇 **Load placement scores** (載入配置分數)，然後檢閱結果。

1. (選用) 若要顯示特定區域的 Spot 配置分數，請針對 **Regions to evaluate** (要評估的區域)，選取要評估的區域，然後選取 **Calculate placement scores** (計算配置分數)。

1. (選用) 若要顯示所顯示區域中可用區域的 Spot 配置分數，請選取**提供每個可用區域的配置分數**核取方塊。如果您想要將所有 Spot 容量啟動至單一可用區域，得分可用區域的清單很有用。

1. (選用) 若要編輯執行個體類型的清單並取得新的配置分數，請選擇 **Edit** (編輯)、進行必要的調整，然後選擇 **Calculate placement scores** (計算配置分數)。

## 使用 計算 AWS CLI
<a name="calculate-sps-cli"></a>

**計算 Spot 配置分數**

1. (選用) 若要產生可以針對 Spot 配置分數組態指定的所有可能參數，請使用 [get-spot-placement-scores](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-spot-placement-scores.html) 命令和 `--generate-cli-skeleton` 參數。

   ```
   aws ec2 get-spot-placement-scores \
       --region us-east-1 \
       --generate-cli-skeleton
   ```

   以下為範例輸出。

   ```
   {
       "InstanceTypes": [
           ""
       ],
       "TargetCapacity": 0,
       "TargetCapacityUnitType": "vcpu",
       "SingleAvailabilityZone": true,
       "RegionNames": [
           ""
       ],
       "InstanceRequirementsWithMetadata": {
           "ArchitectureTypes": [
               "x86_64_mac"
           ],
           "VirtualizationTypes": [
               "hvm"
           ],
           "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": "excluded",
               "BurstablePerformance": "excluded",
               "RequireHibernateSupport": true,
               "NetworkInterfaceCount": {
                   "Min": 0,
                   "Max": 0
               },
               "LocalStorage": "included",
               "LocalStorageTypes": [
                   "hdd"
               ],
               "TotalLocalStorageGB": {
                   "Min": 0.0,
                   "Max": 0.0
               },
               "BaselineEbsBandwidthMbps": {
                   "Min": 0,
                   "Max": 0
               },
               "AcceleratorTypes": [
                   "fpga"
               ],
               "AcceleratorCount": {
                   "Min": 0,
                   "Max": 0
               },
               "AcceleratorManufacturers": [
                   "amd"
               ],
               "AcceleratorNames": [
                   "vu9p"
               ],
               "AcceleratorTotalMemoryMiB": {
                   "Min": 0,
                   "Max": 0
               }
           }
       },
       "DryRun": true,
       "MaxResults": 0,
       "NextToken": ""
   }
   ```

1. 使用上一個步驟的輸出來建立 JSON 組態檔，並將其設定如下：

   1. 對於 `TargetCapacity`，根據執行個體 或 vCPU 的數目，或記憶體 (MiB) 的數量輸入您所需的 Spot 容量。

   1. 對於 `TargetCapacityUnitType`，輸入目標容量的單位。如果省略此參數，則其會預設為 `units`。

      有效值：`units` (其會轉換為執行個體的數量) \$1 `vcpu` \$1 `memory-mib`

   1. 對於 `SingleAvailabilityZone`，指定 `true`，以取得傳回得分可用區域清單的回應。如果您想要將所有 Spot 容量啟動至單一可用區域，得分可用區域的清單很有用。如果省略此參數，則其會預設為 `false`，並且回應會傳回得分區域的清單。

   1. (選用) 對於 `RegionNames`，請指定要用作篩選條件的區域。您必須指定區域代碼，例如 `us-east-1`。

      搭配區域篩選條件，回應只會傳回您指定的區域。如果您針對 `SingleAvailabilityZone` 指定了 `true`，則回應只會傳回所指定區域中的可用區域。

   1. 您可以包含 `InstanceTypes` 或 `InstanceRequirements`，但兩者不能同時位於相同的組態中。

      在 JSON 組態中指定下列其中一個項目：
      + 若要指定執行個體類型的清單，請在 `InstanceTypes` 參數中指定執行個體類型。指定至少三種不同的執行個體類型。如果您只指定一個或兩個執行個體類型，Spot 配置分數會傳回低分數。如需執行個體類型的清單，請參閱 [Amazon EC2 執行個體類型](https://aws.amazon.com/ec2/instance-types/)。
      + 若要指定執行個體屬性，以便 Amazon EC2 可以識別符合這些屬性的執行個體類型，請指定位於 `InstanceRequirements` 結構中的屬性。

        您必須提供 `VCpuCount`、`MemoryMiB` 和 `CpuManufacturers` 的值。您可以省略其他屬性；省略時，就會使用預設值。如需每個屬性及其預設值的描述，請參閱 [get-spot-placement-scores](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-spot-placement-scores.html)。

      如需組態範例，請參閱 [範例組態](#sps-example-configs)。

1. 若要取得您在 JSON 檔案中指定之需求的 Spot 配置分數，請使用 [get-spot-placement-scores](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-spot-placement-scores.html) 命令，並使用 `--cli-input-json` 參數指定 JSON 檔案的名稱和路徑。

   ```
   aws ec2 get-spot-placement-scores \
       --region us-east-1 \
       --cli-input-json file://file_name.json
   ```

   範例輸出：如果 `SingleAvailabilityZone` 設定為 `false` 或將其省略 (如果省略，其會預設為 `false`)，則會傳回區域的得分清單。

   ```
   "SpotPlacementScores": [
       {
           "Region": "us-east-1",
           "Score": 7
       },
       {
           "Region": "us-west-1",
           "Score": 5
       },  
      ...
   ```

   範例輸出：如果 `SingleAvailabilityZone` 設定為 `true`，則會傳回可用區域的得分清單。

   ```
   "SpotPlacementScores": [
       {
           "Region": "us-east-1",
           "AvailabilityZoneId": "use1-az1",
           "Score": 8
       },
       {
           "Region": "us-east-1",
           "AvailabilityZoneId": "usw2-az3",
           "Score": 6
       },
      ...
   ```

### 範例組態
<a name="sps-example-configs"></a>

使用 時 AWS CLI，您可以使用下列範例組態。

**Topics**
+ [範例：指定執行個體類型和目標容量](#example-config-instance-type-override)
+ [範例：根據記憶體指定執行個體類型和目標容量](#example-config-instance-type-memory-unit-override)
+ [範例：為屬性型執行個體類型選取指定屬性](#example-config-attribute-based-instance-type-selection)
+ [範例：為屬性型執行個體類型選取指定屬性，並傳回可用區域的得分清單](#example-config-sps-singleAZ)

#### 範例：指定執行個體類型和目標容量
<a name="example-config-instance-type-override"></a>

下列範例組態指定三種不同的執行個體類型，以及有 500 個 Spot 執行個體的目標 Spot 容量。

```
{
    "InstanceTypes": [
        "m5.4xlarge",
        "r5.2xlarge",
        "m4.4xlarge"
    ], 
    "TargetCapacity": 500
}
```

#### 範例：根據記憶體指定執行個體類型和目標容量
<a name="example-config-instance-type-memory-unit-override"></a>

下列範例組態指定了三種不同的執行個體類型，以及有 500,000 MiB 記憶體的目標 Spot 容量，其中要啟動的 Spot 執行個體數目必須提供總計 500,000 MiB 的記憶體。

```
{
    "InstanceTypes": [
        "m5.4xlarge",
        "r5.2xlarge",
        "m4.4xlarge"
    ], 
    "TargetCapacity": 500000,
    "TargetCapacityUnitType": "memory-mib"
}
```

#### 範例：為屬性型執行個體類型選取指定屬性
<a name="example-config-attribute-based-instance-type-selection"></a>

下列範例組態是針對屬性型執行個體類型選取設定的，其後是範例組態的文字說明。

```
{
    "TargetCapacity": 5000,
    "TargetCapacityUnitType": "vcpu",
    "InstanceRequirementsWithMetadata": {
        "ArchitectureTypes": ["arm64"],
        "VirtualizationTypes": ["hvm"],
        "InstanceRequirements": {
            "VCpuCount": {
                "Min": 1,
                "Max": 12
            },
            "MemoryMiB": {
                "Min": 512
            }
        }
    }
}
```

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

在上述範例中，指定了下列必要的執行個體屬性：
+ `ArchitectureTypes` – 執行個體類型的架構類型必須是 `arm64`。
+ `VirtualizationTypes` – 執行個體類型的虛擬化類型必須是 `hvm`。
+ `VCpuCount` – 執行個體類型必須具有最少 1 個，最多 12 個的 vCPU。
+ `MemoryMiB` – 執行個體類型必須具有最少 512 MiB 的記憶體。省略 `Max` 參數，表示沒有最大限制。

請注意，有幾個您可以指定的其他選用屬性。如需屬性清單，請參閱 [get-spot-placement-scores](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-spot-placement-scores.html)。

**`TargetCapacityUnitType`**  
`TargetCapacityUnitType` 參數會指定目標容量的單位。在此範例中，目標容量為 `5000`，而目標容量單位類型為 `vcpu`，它們一起指定了所需目標容量 (5000 個 vCPU)，其中要啟動的 Spot 執行個體數目必須提供總計 5000 個的 vCPU。

#### 範例：為屬性型執行個體類型選取指定屬性，並傳回可用區域的得分清單
<a name="example-config-sps-singleAZ"></a>

下列範例組態是針對屬性型執行個體類型選取而設定的。透過指定 `"SingleAvailabilityZone": true`，回應將傳回得分可用區域的清單。

```
{
    "TargetCapacity": 1000,
    "TargetCapacityUnitType": "vcpu",
    "SingleAvailabilityZone": true,
    "InstanceRequirementsWithMetadata": {
        "ArchitectureTypes": ["arm64"],
        "VirtualizationTypes": ["hvm"],
        "InstanceRequirements": {
            "VCpuCount": {
                "Min": 1,
                "Max": 12
            },
            "MemoryMiB": {
                "Min": 512
            }
        }
    }
}
```

# 使用 Spot 執行個體資料摘要追蹤 Spot 執行個體成本
<a name="spot-data-feeds"></a>

為協助您了解 Spot 執行個體的費用，Amazon EC2 提供了資料摘要來說明您的 Spot 執行個體使用狀況和定價。當您訂閱資料摘要時，此資料摘要會傳送到您所指定的 Amazon S3 儲存貯體。

資料摘要檔案通常會每小時抵達您的儲存貯體一次。如果在某個小時內沒有執行 Spot 執行個體，您不會收到那個小時的資料摘要檔案。

Spot 執行個體的每小時使用量通常涵蓋在單一資料檔案中。這些檔案在傳送到您的儲存貯體之前，會先經過壓縮 (gzip)。如果有特定某小時的使用狀況，產生了大型檔案，則 Amazon EC2 可以寫入多個檔案 (例如，當該小時的檔案內容在壓縮前已超過 50 MB 時)。

**注意**  
每個 只能建立一個 Spot 執行個體資料饋送 AWS 帳戶。

除中國 AWS （北京）、中國 （寧夏）、 AWS GovCloud （美國） 和[預設停用的區域](using-regions-availability-zones.md#concepts-available-regions)以外，所有區域都支援 Spot 執行個體資料饋送。

**Topics**
+ [資料摘要檔案名稱與格式](#using-spot-instances-format)
+ [Amazon S3 儲存貯體需求](#using-spot-instances-dfs3)
+ [訂閱 Spot 執行個體資料摘要](#using-spot-instances-datafeed-all)
+ [檢視資料饋送中的資料](#using-spot-instances-datafeed-view-data)
+ [刪除 Spot 執行個體資料摘要](#using-spot-instances-datafeed-delete)

## 資料摘要檔案名稱與格式
<a name="using-spot-instances-format"></a>

Spot 執行個體資料摘要檔案名稱使用下列格式 (日期和小時採用 UTC 時間)：

```
bucket-name.s3.amazonaws.com/optional-prefix/aws-account-id.YYYY-MM-DD-HH.n.unique-id.gz
```

例如，如果儲存貯體的名稱為 **amzn-s3-demo-bucket**、前綴字首為 **my-prefix**，則檔案名稱會類似於下列名稱：

```
amzn-s3-demo-bucket.s3.amazonaws.com/my-prefix/111122223333.2023-12-09-07.001.b959dbc6.gz
```

如需儲存貯體名稱的詳細資訊，請參閱「Amazon S3 使用者指南」**中的[儲存貯體命名規則](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html)。

Spot 執行個體資料摘要檔案以製表符 (tab) 分隔。資料檔案中的每一行皆對應至一個執行個體小時，而且包含下表中所列出的欄位。


|  欄位  |  描述  | 
| --- | --- | 
|   `Timestamp`   |  時間戳記，用來判定使用此執行個體的收費價格。  | 
|   `UsageType`   |  計費的使用類型和執行個體類型。對於 `m1.small` 競價型執行個體，此欄位設定為 `SpotUsage`。如果是其他所有的執行個體類型，此欄位會設定為 `SpotUsage:`\$1*instance-type*\$1。例如：`SpotUsage:c1.medium`。  | 
|   `Operation`   |  收費的產品。若是 Linux 競價型執行個體，此欄位會設定為 `RunInstances`。若是 Windows 競價型執行個體，此欄位會設定為 `RunInstances:0002`。Spot 的使用會根據可用區域分組。  | 
|   `InstanceID`   |  產生此執行個體用量的 Spot 執行個體的 ID。  | 
|   `MyBidID`   |  產生此執行個體用量的 Spot 執行個體請求的 ID。  | 
|   `MyMaxPrice`   |  針對此 Spot 請求所指定的最高價格。  | 
|   `MarketPrice`   |  `Timestamp` 欄位中所指定時間點當時的 Spot 價格。  | 
|   `Charge`   |  針對此執行個體用量的計費價格。  | 
|   `Version`   |  資料饋送版本。可用的版本為 1.0。  | 

## Amazon S3 儲存貯體需求
<a name="using-spot-instances-dfs3"></a>

訂閱資料摘要時，您必須指定用來存放資料摘要檔案的 Amazon S3 儲存貯體。

在選擇資料摘要的 Amazon S3 儲存貯體之前，請考量下列事項：
+ 您必須具有儲存貯體的 `FULL_CONTROL` 許可。如果您是儲存貯體擁有者，預設會具有此項權限。否則，儲存貯體擁有者必須授予您的 AWS 帳戶 此許可。
+ 當您訂閱資料饋送時，這些許可會用來更新儲存貯體 ACL，以提供 AWS 資料饋送帳戶`FULL_CONTROL`許可。 AWS 資料饋送帳戶會將資料饋送檔案寫入儲存貯體。如果您的帳戶沒有所需的權限，則資料摘要檔案無法寫入儲存貯體。如需詳細資訊，請參閱「Amazon CloudWatch Logs 使用者指南」**中的[傳送至 Amazon S3 的日誌](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-S3)。

  如果您更新 ACL 並移除 AWS 資料饋送帳戶的許可，則無法將資料饋送檔案寫入儲存貯體。您必須重新訂閱資料摘要，以接收資料摘要檔案。
+ 每個資料摘要檔案皆擁有自己的 ACL (和儲存貯體的 ACL 不同)。儲存貯體擁有者具有對資料檔案的 `FULL_CONTROL` 權限。 AWS 資料饋送帳戶具有讀取和寫入許可。
+ 如果您刪除資料饋送訂閱，Amazon EC2 不會移除儲存貯體或資料檔案上 AWS 資料饋送帳戶的讀取和寫入許可。您必須自行移除這些權限。
+ 如果您使用伺服器端加密搭配存放在 AWS Key Management Service (SSE-KMS) 中的 AWS KMS 金鑰來加密 Amazon S3 儲存貯體，則必須使用客戶受管金鑰。如需詳細資訊，請參閱「Amazon CloudWatch Logs 使用者指南」**中的 [Simple Storage Service (Amazon S3) 儲存貯體伺服器端加密](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-SSE-KMS-S3)。

## 訂閱 Spot 執行個體資料摘要
<a name="using-spot-instances-datafeed-all"></a>

您可隨時訂閱 Spot 執行個體資料摘要。您無法使用 Amazon EC2 主控台完成此任務。

如果您收到儲存貯體沒有足夠許可的錯誤，請參閱以下文章以取得疑難排解資訊：[疑難排解 Spot 執行個體的資料摘要](https://repost.aws/knowledge-center/s3-data-feed-ec2-spot-instances)。

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

**訂閱您的資料摘要**  
使用 [create-spot-datafeed-subscription](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-spot-datafeed-subscription.html) 命令。

要指定帶字首的儲存貯體，請使用下列範例：

```
aws ec2 create-spot-datafeed-subscription \
    --bucket amzn-s3-demo-bucket \
    --prefix my-prefix
```

要指定不帶字首的儲存貯體，請使用下列範例：

```
aws ec2 create-spot-datafeed-subscription \
    --bucket amzn-s3-demo-bucket
```

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

**訂閱您的資料摘要**  
使用 [New-EC2SpotDatafeedSubscription](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2SpotDatafeedSubscription.html) cmdlet。

要指定帶字首的儲存貯體，請使用下列範例：

```
New-EC2SpotDatafeedSubscription `
    -Bucket amzn-s3-demo-bucket `
    -Prefix my-prefix
```

要指定不帶字首的儲存貯體，請使用下列範例：

```
New-EC2SpotDatafeedSubscription `
    -Bucket amzn-s3-demo-bucket
```

------

## 檢視資料饋送中的資料
<a name="using-spot-instances-datafeed-view-data"></a>

在 中 AWS 管理主控台，開啟 AWS CloudShell。使用下列 [s3 sync](https://docs.aws.amazon.com/cli/latest/reference/s3/sync.html) 命令，從資料摘要的 S3 儲存貯體取得 .gz 檔案，並將這些檔案存放於您指定的資料夾。

```
aws s3 sync s3://amzn-s3-demo-bucket ./data-feed
```

若要顯示 .gz 檔案的內容，請變更至您存放 S3 儲存貯體內容的資料夾。

```
cd data-feed
```

使用 **ls** 命令檢視檔案的名稱。使用具有檔案名稱的 **zcat** 命令，顯示壓縮檔案的內容。下列是範例命令。

```
zcat  111122223333.2023-12-09-07.001.b959dbc6.gz
```

以下為範例輸出。

```
#Version: 1.0
#Fields: Timestamp UsageType Operation InstanceID MyBidID MyMaxPrice MarketPrice Charge Version
2023-12-09 07:13:47 UTC USE2-SpotUsage:c7a.medium       RunInstances:SV050      i-0c3e0c0b046e050df     sir-pwq6nmfp    0.0510000000 USD        0.0142000000 USD        0.0142000000 USD        1
```

## 刪除 Spot 執行個體資料摘要
<a name="using-spot-instances-datafeed-delete"></a>

當您不再需要 Spot 執行個體資料饋送時，即可將其刪除。

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

**刪除您的資料摘要**  
使用 [delete-spot-datafeed-subscription](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-spot-datafeed-subscription.html) 命令。

```
aws ec2 delete-spot-datafeed-subscription
```

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

**刪除您的資料摘要**  
使用 [Remove-EC2SpotDatafeedSubscription](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2SpotDatafeedSubscription.html) cmdlet。

```
Remove-EC2SpotDatafeedSubscription
```

------

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

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

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

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

Amazon EC2 會使用 **AWSServiceRoleForEC2Spot** 來完成下列動作：
+ `ec2:DescribeInstances` - 描述 Spot 執行個體
+ `ec2:StopInstances` - 停止 Spot 執行個體
+ `ec2:StartInstances` - 啟動 Spot 執行個體

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

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

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

如果您使用 AWS CLI 或 API 來請求 Spot 執行個體，您必須先確保此角色存在。

**使用主控台建立 **AWSServiceRoleForEC2Spot****

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

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

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

1. 在 **Select type of trusted entity (選取信任實體類型)** 頁面上，選取 **EC2**、選取 **EC2 - Spot Instances (EC2 - Spot 執行個體)**，然後選取 **Next: Permissions (下一步：許可)**。

1. 在下一頁選擇 **Next:Review (下一步：檢閱)**。

1. 在**檢閱**頁面上選擇**建立角色**。

**使用 建立 **AWSServiceRoleForEC2Spot** 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 spot.amazonaws.com
```

如果您不再需要使用 競價型執行個體，建議您刪除 **AWSServiceRoleForEC2Spot** 角色。從您的帳戶中刪除此角色後，如果您請求 競價型執行個體，Amazon EC2 會再次建立此角色。

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

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

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

**若要授予 **AWSServiceRoleForEC2Spot** 角色許可以使用客戶受管金鑰**
+ 使用 [create-grant](https://docs.aws.amazon.com/cli/latest/reference/kms/create-grant.html) 命令將授予新增至客戶受管金鑰，並指定獲授予許可能夠執行授予所允許作業的委託人 (**AWSServiceRoleForEC2Spot** 服務連結角色)。客戶受管金鑰由 `key-id` 參數和客戶受管金鑰的 ARN 指定。委託人是透過 `grantee-principal` 參數和 **AWSServiceRoleForEC2Spot** 服務連結角色的 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/spot.amazonaws.com/AWSServiceRoleForEC2Spot \
      --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"
  ```

# Spot 執行個體配額
<a name="using-spot-limits"></a>

每個區域每個 AWS 帳戶 的執行中 Spot 執行個體請求和待定 Spot 執行個體請求有數量配額。待定 Spot 執行個體請求完成之後，請求就不會再計入配額中，因為執行中的執行個體會計入配額中。

Spot 執行個體配額是根據執行中的 Spot 執行個體正在使用或將使用的*虛擬中央處理單元 (vCPU) 的數量*來管理的，直到完成開放的 Spot 執行個體請求。如果您終止 Spot 執行個體但未取消 Spot 執行個體請求，請求會計入您的 Spot 執行個體 vCPU 配額，直到 Amazon EC2 偵測到 Spot 執行個體終止並關閉請求。

我們提供以下 Spot 執行個體配額類型。


| 名稱 | 預設 | 可調整 | 
| --- | --- | --- | 
| 所有 DL Spot 執行個體請求 | 0 | [是](https://console.aws.amazon.com/servicequotas/home/services/ec2/quotas/L-85EED4F7) | 
| 所有 F Spot 執行個體請求 | 0 | [是](https://console.aws.amazon.com/servicequotas/home/services/ec2/quotas/L-88CF9481) | 
| 所有 G 和 VT Spot 執行個體請求 | 0 | [是](https://console.aws.amazon.com/servicequotas/home/services/ec2/quotas/L-3819A6DF) | 
| 所有 Inf Spot 執行個體請求 | 0 | [是](https://console.aws.amazon.com/servicequotas/home/services/ec2/quotas/L-B5D1601B) | 
| 所有 P Spot 執行個體請求 | 0 | [是](https://console.aws.amazon.com/servicequotas/home/services/ec2/quotas/L-7212CCBC) | 
| 所有標準 (A, C, D, H, I, M, R, T, Z) Spot 執行個體請求 | 5 | [是](https://console.aws.amazon.com/servicequotas/home/services/ec2/quotas/L-34B43A08) | 
| 所有 Trn Spot 執行個體請求 | 0 | [是](https://console.aws.amazon.com/servicequotas/home/services/ec2/quotas/L-6B0D517C) | 
| 所有 X Spot 執行個體請求 | 0 | [是](https://console.aws.amazon.com/servicequotas/home/services/ec2/quotas/L-E3A00192) | 

即使 Amazon EC2 根據使用量自動調整 Spot 執行個體配額，您也可以在必要時要求提高配額。例如，如果您打算啟動的 Spot 執行個體超過目前配額允許的範圍，您可以請求提高配額。如果您送出 Spot 執行個體請求並收到錯誤訊息 `Max spot instance count exceeded`，您可以要求增加請求的配額。若要請求增加配額，可以使用 [Amazon EC2 服務配額](ec2-resource-limits.md) 中所述的 Service Quotas 主控台。

您可以啟動任意執行個體類型的組合，這些類型組合可滿足不斷變化的應用程式需求。例如，在 256 個 vCPU 的標準 Spot 執行個體請求配額下，您可以啟動 32 個 `m5.2xlarge` Spot 執行個體 (32 x 8 個 vCPU) 或 16 個 `c5.4xlarge` Spot 執行個體 (16 x 16 個 vCPU)。

透過 Amazon CloudWatch 指標整合，您可以根據配額來監控 EC2 用量。您也可以設定警示，在接近配額時提出警告。如需詳細資訊，請參閱「Service Quotas 使用者指南」**中的 [Service Quotas 和 Amazon CloudWatch 警示](https://docs.aws.amazon.com/servicequotas/latest/userguide/configure-cloudwatch.html)以及。