EC2 最佳實務 - Amazon Elastic Compute Cloud

EC2 最佳實務

Amazon EC2 Spot 執行個體是 AWS 雲端 中的備用 EC2 運算容量,相較於隨需價格,您可以享受高達 90% 的折扣。隨需執行個體 與 競價型執行個體 之間唯一的差別在於,當 Amazon EC2 需要取回容量時,競價型執行個體 可以由 Amazon EC2 利用兩分鐘的通知來中斷。

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

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

競價型執行個體 不適合執行個體節點之間不靈活、可設定狀態、錯誤不容忍或緊密結合的工作負載。對於無法容忍目標容量偶爾會完全不可用的工作負載,也不建議使用。強烈警告您不要對這些工作負載使用 競價型執行個體,或嘗試容錯移轉至 隨需執行個體 以處理中斷。

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

針對中斷準備個別執行個體

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

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

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

建議您在 Amazon EventBridge 中建立擷取重新平衡建議和中斷通知的規則,然後觸發工作負載進度的檢查點,或從容處理中斷。如需詳細資訊,請參閱 監控重新平衡建議訊號。如需如何建立和使用事件規則的詳細範例,請參閱利用 Amazon EC2 Spot 執行個體中斷通知

如需更多詳細資訊,請參閱 EC2 執行個體重新平衡建議Spot 執行個體中斷

對執行個體類型和可用區域具有彈性

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

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

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

使用 EC2 Auto Scaling 群組或 Spot Fleet 來管理彙總容量

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

使用容量最佳化分配策略

Auto Scaling 群組中的分配策略可協助您佈建目標容量,而無需手動尋找具有備用容量的 Spot 容量集區。建議使用 capacity optimized 策略,因為此策略會自動從最可用的 Spot 容量集區佈建執行個體。您也可以利用 Spot Fleet 中的capacity optimized配置策略。由於您的 Spot 執行個體容量來自具有最佳容量的集區,因此可降低回收 Spot 執行個體的可能性。如需有關分配策略的詳細資訊,請參閱《Amazon EC2 Auto Scaling 使用者指南》中的 Spot 執行個體和本使用者指南中的針對容量最佳化設定 Spot Fleet

使用主動容量重新平衡

容量重新平衡可協助您維持工作負載可用性,方法是在執行中的 Spot 執行個體收到兩分鐘的 Spot 執行個體中斷通知之前,使用新的 Spot 執行個體主動擴增機群。啟用容量重新平衡時,Auto Scaling 或 Spot Fleet 會嘗試主動取代已收到重新平衡建議的 Spot 執行個體,讓您有機會將工作負載重新平衡到新的 Spot 執行個體,這些執行個體不會處於提高的中斷風險。

容量重新平衡可補充容量最佳化分配策略 (此策略旨在協助尋找最佳備用容量) 和混合執行個體政策 (旨在透過在多個可用區域中執行的多個執行個體類型間部署執行個體來增強可用性)。

如需詳細資訊,請參閱 容量重新平衡

使用整合式 AWS 服務來管理您的 Spot 執行個體

其他 AWS 服務會與 Spot 整合,以降低整體運算成本,無需管理個別執行個體或機群。我們建議您針對適用的工作負載考慮以下解決方案:Amazon EMR、Amazon Elastic Container Service、AWS Batch、Amazon Elastic Kubernetes Service、Amazon SageMaker、AWS Elastic Beanstalk,以及 Amazon GameLift。若要深入了解搭配這些服務的 Spot 最佳做法,請參閱 Amazon EC2 競價型執行個體 研討會網站

使用哪種 Spot 請求方法最好?

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

API 何時使用? 使用案例 我應該使用此 API 嗎?

CreateAutoScalingGroup

  • 您需要具有單一組態或混合組態的多個執行個體。

  • 您希望透過可設定的 API 自動執行生命週期管理。

建立 Auto Scaling 群組,管理執行個體的生命週期,同時維護所需的執行個體數量。支援在指定的最小和最大限制之間水平擴展 (新增更多執行個體)。

CreateFleet
  • 您需要具有單一組態或混合組態的多個執行個體。

  • 您希望自行管理您的執行個體生命週期。

  • 如果您不需要自動擴展,建議您使用 instant 類型機群。

在單一請求中建立隨需執行個體和 Spot 執行個體的機群,並具有隨執行個體類型、AMI、可用區域或子網而異的多個啟動規格。Spot 執行個體分配策略預設為每單位 lowest-price,但您可以將其變更為 capacity-optimizeddiversified

是 – 在 instant 模式中 (如果您不需要自動擴展)

RunInstances
  • 您已經在使用 RunInstances API 來啟動隨需執行個體,而且您只想透過變更單一參數來變更為啟動 Spot 執行個體。

  • 您不需要具有不同執行個體類型的多個執行個體。

使用 AMI 和一個執行個體類型,啟動指定數量的執行個體。

否 – 因為 RunInstances 不允許在單一請求中使用混合執行個體類型

RequestSpotFleet
  • 我們強烈反對使用 RequestSpotFleet API,因為這是一個沒有計劃投資的舊式 API。

  • 如果您想要管理執行個體生命週期,請使用 CreateFleet API。

  • 如果您不想要管理執行個體生命週期,請使用 CreateAutoScalingGroup API。

請勿使用。RequestSpotFleet 是沒有計劃投資的舊式 API。

RequestSpotInstances
  • 我們強烈反對使用 RequestSpotInstances API,因為這是一個沒有計劃投資的舊式 API。

請勿使用。RequestSpotInstances 是沒有計劃投資的舊式 API。