指定屬性,為 EC2 機群或 Spot 機群選取執行個體類型 - Amazon Elastic Compute Cloud

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

指定屬性,為 EC2 機群或 Spot 機群選取執行個體類型

建立 EC2 機群或 Spot 機群時,您必須指定一或多個執行個體類型,以在機群中設定隨需執行個體和 Spot 執行個體。做為手動指定執行個體類型的替代方式,您可以指定執行個體必須具有的屬性,然後 Amazon EC2 會識別具有這些屬性的所有執行個體類型。這就是所謂的屬性型執行個體類型選項。例如,您可以指定執行個體所需的 vCPU 數目下限和上限,然後機群將使用符合這些 vCPU 需求的任何可用執行個體類型來啟動執行個體。

屬性型執行個體類型選擇非常適合可對其使用哪些執行個體類型具有彈性的工作負載和架構,例如執行容器或 Web 機群、處理大數據,以及實作持續整合和部署 (CI/CD) 工具時。

優勢

屬性型執行個體類型選擇具有下列優勢:

  • 輕鬆使用正確的執行個體類型:由於有太多可用的執行個體類型,為您的工作負載尋找適當的執行個體類型可能會非常耗時。當您指定執行個體類型屬性時,執行個體類型會自動具有工作負載所需的屬性。

  • 簡化的組態:若要針對機群手動指定多個執行個體類型,您必須為每個執行個體類型建立個別的啟動範本覆寫。但是,有了屬性型執行個體類型選擇,若要提供多個執行個體類型,您只需要在啟動範本或在啟動範本覆寫中指定執行個體屬性。

  • 自動使用新的執行個體類型:當您指定執行個體屬性而非執行個體類型時,您的機群可以在新一代的執行個體類型釋出時使用它們,即「為未來提供」機群的組態。

  • 執行個體類型彈性:當您指定執行個體屬性而非執行個體類型時,機群可以從用於啟動 Spot 執行個體的廣泛執行個體類型中進行選擇,而這些執行個體類型符合 Spot 執行個體類型靈活性的最佳實務

屬性型執行個體類型選擇的運作方式

若要在機群組態中使用屬性型執行個體類型選擇,請將執行個體類型清單取代為執行個體所需的執行個體屬性清單。EC2 機群或 Spot 機群將在具有所指定執行個體屬性的任何可用執行個體類型上啟動執行個體。

執行個體屬性的類型

有數個您可以指定來表達運算需求的執行個體屬性,例如:

  • vCPU 數量:每個執行個體的 vCPU 數量下限和上限。

  • 記憶體:每個執行個體的記憶體 GiB 下限和上限。

  • 本機儲存:是否使用本機儲存的 EBS 或執行個體儲存體磁碟區。

  • 爆量效能:是否使用 T 執行個體系列,包括 T4g、T3a、T3和 T2 類型。

如需每個屬性和預設值的描述,請參閱 Amazon EC2 API 參考中的 InstanceRequirements

要在何處設定屬性型執行個體類型選擇

視您使用的是 主控台或 而定 AWS CLI,您可以指定屬性型執行個體類型選擇的執行個體屬性,如下所示:

在主控台中,您可以在下列機群組態元件中指定執行個體屬性:

  • 在啟動範本中,則參考機群請求中的啟動範本

  • (僅限 Spot 機群) 在機群請求中

在 中 AWS CLI,您可以在下列一或多個機群組態元件中指定執行個體屬性:

  • 在啟動範本中,則參考機群請求中的啟動範本

  • 在啟動範本覆寫中

    如果想要混合使用不同 AMI 的執行個體,您可以在多個啟動範本覆寫中指定執行個體屬性。例如,不同的執行個體類型可以使用 x86 和 ARM 型處理器。

  • (僅限 Spot 機群) 在啟動規格中

EC2 機群或 Spot 機群在佈建機群時如何使用屬性型執行個體類型選擇

EC2 機群或 Spot 機群以下列方式佈建機群:

  • EC2 機群可識別具有所指定屬性的執行個體類型。

  • EC2 機群會使用價格保護來決定要排除哪些執行個體類型。

  • 它會根據具有相符執行個體類型的 AWS 區域或可用區域,決定其將考慮啟動執行個體的容量集區。

  • EC2 機群會套用指定的分配策略,以決定要從哪些容量集區中啟動執行個體。

    請注意,屬性型執行個體類型選擇不會挑選要從中佈建機群的容量集區;這是分配策略的任務。

    如果您指定分配策略,機群將根據指定的分配策略啟動執行個體。

    • 對於 Spot 執行個體,屬性型執行個體類型選擇支援價格容量最佳化容量最佳化最低價格分配策略。請注意,我們不建議最低價格的 Spot 配置策略,因為該策略具有最高的 Spot 執行個體中斷風險。

    • 若為隨需執行個體,屬性型執行個體類型選擇支援最低價格分配策略。

  • 如果具有所指定執行個體屬性的執行個體類型沒有容量,則無法啟動任何執行個體,而且機群會傳回錯誤。

價格保護

價格保護是一項功能,可防止 EC2 機群或 Spot 機群使用您認為過於昂貴的執行個體類型,即使它們剛好符合您指定的屬性也一樣。若要使用價格保護,您必須設定價格閾值。隨後,當 Amazon EC2 選取具有您屬性的執行個體類型時,其會排除定價高於閾值的執行個體類型。

Amazon EC2 計算價格閾值的方式如下:

  • Amazon EC2 會先從符合您屬性的執行個體類型中,識別價格最低的執行個體類型。

  • 然後,Amazon EC2 會取得您為價格保護參數指定的值 (以百分比表示),並將其乘以已識別執行個體類型的價格。結果即為價格閾值的價格。

隨需執行個體和 Spot 執行個體有不同的價格閾值。

當您使用屬性型執行個體類型選擇建立機群時,價格保護將預設啟用。您可以保留預設值,也可以指定自己的值。

您也可以關閉價格保護。若要表示沒有價格保護閾值,請指定高百分比值,例如 999999

如何識別價格最低的執行個體類型

Amazon EC2 會從符合您指定屬性的執行個體中,找出價格最低的執行個體類型,從而決定價格門檻所依據的價格。Amazon EC2 會透過下列方式執行此操作:

  • 首先,查看符合您屬性的目前世代 C、M 或 R 執行個體類型。如果找到任何相符項目,則會識別價格最低的執行個體類型。

  • 如果沒有相符項目,則會查看任何符合您屬性的目前世代執行個體類型。如果找到任何相符項目,則會識別價格最低的執行個體類型。

  • 如果沒有相符項目,則會查看任何符合您屬性的上一代執行個體類型,並識別價格最低的執行個體類型。

隨需執行個體價格保護

隨需執行個體類型的價格保護閾值的計算方式,是高於已識別最低價格隨需執行個體類型 (OnDemandMaxPricePercentageOverLowestPrice) 的百分比。您可以指定您願意支付的百分比。如果您未指定此參數,則會使用 20 的預設值來計算比已識別價格高 20% 的價格保護閾值。

例如,如果識別的隨需執行個體價格為 0.4271,而您指定 25,則價格閾值比 0.4271 多 25%。計算方式如下:0.4271 * 1.25 = 0.533875。計算的價格是您願意為隨需執行個體支付的最高金額,在此範例中,Amazon EC2 會排除任何超過 0.533875 的隨需執行個體類型。

Spot 執行個體價格保護

根據預設,Amazon EC2 會自動套用最佳 Spot 執行個體價格保護,以一致方式從各種執行個體類型中選擇。您也可以自行手動設定價格保護。不過,若您讓 Amazon EC2 為您執行此操作,則可以提高 Spot 容量被滿足的可能性。

您可以使用下列其中一個選項手動指定價格保護。如果您手動設定價格保護,我們建議您使用第一個選項。

  • 已識別價格最低的隨需執行個體類型百分比 [MaxSpotPriceAsPercentageOfOptimalOnDemandPrice]

    例如,如果識別的隨需執行個體類型價格為 0.4271,而您指定 60,則價格閾為 0.4271 的 60%。計算方式如下:0.4271 * 0.60 = 0.25626。計算的價格是您願意為 Spot 執行個體支付的最高金額,在此範例中,Amazon EC2 會排除任何超過 0.25626 的 Spot 執行個體類型。

  • 高於已識別價格最低的 Spot 執行個體類型百分比 [SpotMaxPricePercentageOverLowestPrice]

    例如,如果識別的 Spot 執行個體類型價格為 0.1808,而您指定 25,則價格閾值比 0.1808 多 25%。計算方式如下:0.1808 * 1.25 = 0.226。計算的價格是您願意為 Spot 執行個體支付的最高金額,在此範例中,Amazon EC2 會排除任何超過 0.266 的 Spot 執行個體類型。我們不建議使用此參數,因為 Spot 價格可能會波動,因此您的價格保護閾值也可能會波動。

指定價格保護閾值

使用 指定價格保護閾值 AWS CLI

使用 建立 EC2 機群或 Spot 機群時 AWS CLI,請針對屬性型執行個體類型選取設定機群,然後執行下列動作:

  • 如要指定隨需執行個體價格保護閾值,請於 JSON 組態檔案的 InstanceRequirements 結構中,對於 OnDemandMaxPricePercentageOverLowestPrice,以百分比形式輸入價格保護閾值。

  • 若要指定 Spot 執行個體價格保護閾值,請在 JSON 組態檔案中的 InstanceRequirements 結構中,指定下列其中一個參數:

    • 若為 MaxSpotPriceAsPercentageOfOptimalOnDemandPrice,請以百分比形式輸入價格保護閾值。

    • 若為 SpotMaxPricePercentageOverLowestPrice,請以百分比形式輸入價格保護閾值。

如需詳細資訊,請參閱 建立具有屬性型執行個體類型選擇的 EC2 機群建立具有屬性型執行個體類型選擇的 Spot 機群

(僅限 Spot機群) 使用主控台指定價格保護閾值

使用主控台建立 Spot 機群時,為屬性型執行個體類型選擇設定機群,然後執行下列作業:

  • 如要指定隨需執行個體價格保護閾值,請在其他執行個體屬性下,選擇隨需價格保護,然後選擇新增屬性,然後輸入價格保護閾值 (百分比)。

  • 如要指定 Spot 執行個體價格保護閾值,請在其他執行個體屬性,選擇 Spot 價格保護,然後選擇新增屬性,選擇一個基本值,以作為您的價格依據,然後輸入價格保護閾值 (百分比)。

注意

建立機群時,若您將 TargetCapacityUnitType 設定為 vcpumemory-mib,則價格保護閾值會根據每個 vCPU 或每個記憶體的價格進行套用,而非每個執行個體的價格。

效能保護

效能保護功能可確保 EC2 機群或 Spot 機群使用類似或超過指定效能基準的執行個體類型。若要使用效能保護,您可以將執行個體系列指定為基準參考。指定執行個體系列的功能會建立最低可接受效能層級。當 Amazon EC2 為您的機群選取執行個體類型時,會考慮您指定的屬性和效能基準。低於效能基準的執行個體類型,將自動排除在選取範圍之外,即使這些類型符合您的其他指定屬性。這可確保所有選取的執行個體類型所提供的效能,與指定執行個體系列所建立的基準類似或更好。Amazon EC2 將使用此基準來引導執行個體類型選擇,但選取的執行個體類型不一定會超過每個應用程式的基準。

目前,此功能僅支援以 CPU 效能作為基準效能因素。指定執行個體系列的 CPU 處理器的 CPU 效能,可以做為效能基準,確保選取的執行個體類型類似於或超過此基準。具有相同 CPU 處理器的執行個體系列會產生相同的篩選結果,即使其網路或磁碟效能不同。例如,指定 c6inc6i 作為基準參考,會產生相同的效能型篩選結果,因為兩個執行個體系列都使用相同的 CPU 處理器。

不支援的執行個體系列

效能保護不支援下列執行個體系列:

  • c1

  • g3 | g3s

  • hpc7g

  • m1 | m2

  • mac1 | mac2 | mac2-m1ultra | mac2-m2 | mac2-m2pro

  • p3dn | p4d | p5

  • t1

  • u-12tb1 | u-18tb1 | u-24tb1 | u-3tb1 | u-6tb1 | u-9tb1 | u7i-12tb | u7in-16tb | u7in-24tb | u7in-32tb

如果您透過指定支援的執行個體系列來啟用效能保護,則傳回的執行個體類型將排除上述不支援的執行個體系列。

如果您將不支援的執行個體系列指定為基準效能值,API 會傳回 GetInstanceTypesFromInstanceRequirements 的空白回應,並傳回 CreateFleetRequestSpotFleetModifyFleetModifySpotFleetRequest 的例外狀況。

範例:設定 CPU 效能基準

在下面的示例中,執行個體需求是使用執行個體類型啟動,該執行個體類型有與 c6i 執行個體系列相同的 CPU 核心性能。這將篩選效能較低的 CPU 處理器的執行個體類型,即使它們符合您的其他指定執行個體需求,例如 vCPU 數量。例如,如果您指定的執行個體屬性包含 4 個 vCPU 和 16GB 的記憶體,則具有這些屬性但 CPU 效能低於 c6i 的執行個體類型將被排除在選擇之外。

"BaselinePerformanceFactors": { "Cpu": { "References": [ { "InstanceFamily": "c6i" } ] }

考量事項

  • 您可以在 EC2 機群或 Spot 機群中指定執行個體類型或執行個體屬性,但不能同時指定兩者。

    使用 CLI 時,啟動範本覆寫將覆寫啟動範本。例如,如果啟動範本包含執行個體類型,且啟動範本覆寫包含執行個體屬性,則執行個體屬性所識別的執行個體將覆寫啟動範本中的執行個體類型。

  • 使用 CLI 時,若將執行個體屬性指定為覆寫,您也無法指定權重或優先順序。

  • 您最多可以在請求組態中指定四個 InstanceRequirements 結構。

建立具有屬性型執行個體類型選擇的 EC2 機群

您可以使用 AWS CLI,將 EC2 機群設定為使用屬性型執行個體類型選擇。

若要建立具有屬性型執行個體類型選取的 EC2 機群 (AWS CLI)

使用 create-fleet (AWS CLI) 命令建立 EC2 機群。指定 JSON 檔案中的機群組態。

aws ec2 create-fleet \ --region us-east-1 \ --cli-input-json file://file_name.json

範例 file_name.json 檔案

下列範例包含將 EC2 機群設定為使用屬性型執行個體類型選取的參數,其後是文字說明。

{ "SpotOptions": { "AllocationStrategy": "price-capacity-optimized" }, "LaunchTemplateConfigs": [{ "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "1" }, "Overrides": [{ "InstanceRequirements": { "VCpuCount": { "Min": 2 }, "MemoryMiB": { "Min": 4 } } }] }], "TargetCapacitySpecification": { "TotalTargetCapacity": 20, "DefaultTargetCapacityType": "spot" }, "Type": "instant" }

屬性型執行個體類型選取的屬性在 InstanceRequirements 結構中予以指定。在此範例中,會指定兩個屬性:

  • VCpuCount – 至少指定 2 個 vCPU。由於未指定最大值,因此沒有最大限制。

  • MemoryMiB – 至少指定 4 MiB 的記憶體。由於未指定最大值,因此沒有最大限制。

將會識別任何具有 2 個或更多 vCPU 和 4 MiB 或更多記憶體的執行個體類型。但是,當 EC2 機群佈建機群時,價格保護和分配策略可能會排除某些執行個體類型。

如需您可指定之所有可能屬性的清單和說明,請參閱 Amazon EC2 API 參考中的InstanceRequirements

注意

InstanceRequirements 併入機群組態中時,必須排除 InstanceTypeWeightedCapacity;它們無法與執行個體屬性同時決定機群組態。

JSON 也包含下列機群組態:

  • "AllocationStrategy": "price-capacity-optimized" – 機群中 Spot 執行個體的分配策略。

  • "LaunchTemplateName": "my-launch-template", "Version": "1" – 啟動範本包含一些執行個體組態資訊,但如果指定了任何執行個體類型,則會由 InstanceRequirements 中指定的屬性進行覆寫。

  • "TotalTargetCapacity": 20 – 目標容量為 20 個執行個體。

  • "DefaultTargetCapacityType": "spot" – 預設容量為 Spot 執行個體。

  • "Type": "instant" – 機群的要求類型為 instant

建立具有屬性型執行個體類型選擇的 Spot 機群

您可以使用 Amazon EC2 主控台或 AWS CLI,將機群設定為使用屬性型執行個體類型選擇。

使用主控台建立 Spot 機群

為屬性型執行個體類型選擇配置 Spot 機群 (主控台)
  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇 Spot Requests (Spot 請求),然後選擇 Request Spot Instances (請求 Spot 執行個體)。

  3. 遵循步驟來建立 Spot 機群。如需詳細資訊,請參閱 使用已定義的參數建立 Spot Fleet 請求 (主控台)

    在建立 Spot 機群時,為屬性型執行個體類型選擇設定機群,如下所示:

    1. 對於 Instance type requirements (執行個體類型請求),選擇 Specify instance attributes that match your compute requirements (指定符合運算需求的執行個體屬性)。

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

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

    4. (選用) 對於 Additional instance attributes (其他執行個體屬性),您可以選擇性地指定一或多個屬性,以更詳細地表達您的運算需求。每個額外屬性都會將進一步的限制新增至您的請求。

    5. (選用) 展開 Preview matching instance types (預覽相符的執行個體類型),以檢視具有所指定屬性的執行個體類型。

使用 AWS CLI建立 Spot 機群

使用 為屬性型執行個體類型選取設定 Spot 機群 AWS CLI

使用 request-spot-fleet 命令來建立 Spot Fleet。指定 JSON 檔案中的機群組態。

aws ec2 request-spot-fleet \ --region us-east-1 \ --spot-fleet-request-config file://file_name.json

範例 file_name.json 檔案

下列範例包含將 Spot 機群設定為使用屬性型執行個體類型選取的參數,其後是文字說明。

{ "AllocationStrategy": "priceCapacityOptimized", "TargetCapacity": 20, "Type": "request", "LaunchTemplateConfigs": [{ "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "1" }, "Overrides": [{ "InstanceRequirements": { "VCpuCount": { "Min": 2 }, "MemoryMiB": { "Min": 4 } } }] }] }

屬性型執行個體類型選取的屬性在 InstanceRequirements 結構中予以指定。在此範例中,會指定兩個屬性:

  • VCpuCount – 至少指定 2 個 vCPU。由於未指定最大值,因此沒有最大限制。

  • MemoryMiB – 至少指定 4 MiB 的記憶體。由於未指定最大值,因此沒有最大限制。

將會識別任何具有 2 個或更多 vCPU 和 4 MiB 或更多記憶體的執行個體類型。但是,當 Spot 機群佈建機群時,價格保護和分配策略可能會排除某些執行個體類型。

如需您可指定之所有可能屬性的清單和說明,請參閱 Amazon EC2 API 參考中的InstanceRequirements

注意

InstanceRequirements 併入機群組態中時,必須排除 InstanceTypeWeightedCapacity;它們無法與執行個體屬性同時決定機群組態。

JSON 也包含下列機群組態:

  • "AllocationStrategy": "priceCapacityOptimized" – 機群中 Spot 執行個體的分配策略。

  • "LaunchTemplateName": "my-launch-template", "Version": "1" – 啟動範本包含一些執行個體組態資訊,但如果指定了任何執行個體類型,則會由 InstanceRequirements 中指定的屬性進行覆寫。

  • "TargetCapacity": 20 – 目標容量為 20 個執行個體。

  • "Type": "request" – 機群的要求類型為 request

有效和無效的 EC2 機群組態範例

如果您使用 AWS CLI 來建立 EC2 機群,則必須確保您的機群組態有效。下列範例顯示有效和無效的組態。

當組態包含下列項目時,視為無效:

  • 同時具有 OverridesInstanceRequirements 的單一 InstanceType

  • 兩個 Overrides 結構, 一個具有 InstanceRequirements,而另一個具有 InstanceType

  • 兩個在同一 InstanceRequirements 內具有重疊屬性值的 LaunchTemplateSpecification 結構

有效組態:具有覆寫的單一啟動範本

下列組態有效。其包含一個啟動範本和一個 Overrides 結構 (其中包含一個 InstanceRequirements 結構)。範例組態的文字說明如下。

{ "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "My-launch-template", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 2, "Max": 8 }, "MemoryMib": { "Min": 0, "Max": 10240 }, "MemoryGiBPerVCpu": { "Max": 10000 }, "RequireHibernateSupport": true } } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 5000, "DefaultTargetCapacityType": "spot", "TargetCapacityUnitType": "vcpu" } } }
InstanceRequirements

若要使用屬性型執行個體選擇,您必須在組態中包含 InstanceRequirements 結構,並為機群中的執行個體指定所需的屬性。

在上述範例中,指定了下列執行個體屬性:

  • VCpuCount – 執行個體類型必須具有最少 2 個,最多 8 個的 vCPU。

  • MemoryMiB – 執行個體類型必須具有最多 10240 MiB 的記憶體。最小值若為 0,表示沒有最小限制。

  • MemoryGiBPerVCpu – 執行個體類型必須具有每個 vCPU 最多 10,000 MiB 的記憶體。Min 為選用參數。若省略它,表示沒有最小限制。

TargetCapacityUnitType

TargetCapacityUnitType 參數會指定目標容量的單位。在範例中,目標容量為 5000,而目標容量單位類型為 vcpu,它們一起指定了所需的目標容量,即 5,000 個 vCPU。EC2 機群將啟動足夠的執行個體,以便機群中的 vCPU 總數為 5,000 個 vCPU。

有效組態:具有多個 InstanceRequirements 的單一啟動範本

下列組態有效。其包含一個啟動範本和一個 Overrides 結構 (其中包含兩個 InstanceRequirements 結構)。InstanceRequirements 中指定的屬性是有效的,因為這些值不重疊—第一個 InstanceRequirements 結構會指定 0-2 個 vCPU 的VCpuCount,而第二個 InstanceRequirements 結構則會指定 4-8 個 vCPU。

{ "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } }, { "InstanceRequirements": { "VCpuCount": { "Min": 4, "Max": 8 }, "MemoryMiB": { "Min": 0 } } } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 1, "DefaultTargetCapacityType": "spot" } } }

有效組態:兩個啟動範本,每個都具有覆寫

下列組態有效。其包含兩個啟動範本,每個都具有一個 Overrides 結構 (其中包含一個 InstanceRequirements 結構)。這個組態有助於同一個機群中的 armx86 架構支援。

{ "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "armLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } }, { "LaunchTemplateSpecification": { "LaunchTemplateName": "x86LaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 1, "DefaultTargetCapacityType": "spot" } } }

有效組態:僅限指定的 InstanceRequirements,沒有重疊的屬性值

下列組態有效。其包含兩個 LaunchTemplateSpecification 結構,每個都有一個啟動範本和一個 Overrides 結構 (其中包含一個 InstanceRequirements 結構)。InstanceRequirements 中指定的屬性是有效的,因為這些值不重疊—第一個 InstanceRequirements 結構會指定 0-2 個 vCPU 的VCpuCount,而第二個 InstanceRequirements 結構則會指定 4-8 個 vCPU。

{ "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } } ] }, { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyOtherLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 4, "Max": 8 }, "MemoryMiB": { "Min": 0 } } } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 1, "DefaultTargetCapacityType": "spot" } } }

組態無效:Overrides 包含 InstanceRequirementsInstanceType

下列組態無效。Overrides 結構同時包含 InstanceRequirementsInstanceType。針對 Overrides,您可以指定 InstanceRequirementsInstanceType,但不能同時指定兩者。

{ "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } }, { "InstanceType": "m5.large" } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 1, "DefaultTargetCapacityType": "spot" } } }

組態無效:兩個 Overrides 包含 InstanceRequirementsInstanceType

下列組態無效。Overrides 結構同時包含 InstanceRequirementsInstanceType。您可以指定 InstanceRequirementsInstanceType,但不能同時指定兩者,即使它們處於不同的 Overrides 結構也一樣。

{ "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } } ] }, { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyOtherLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceType": "m5.large" } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 1, "DefaultTargetCapacityType": "spot" } } }

組態無效:重疊屬性值

下列組態無效。兩個 InstanceRequirements 結構每個都包含 "VCpuCount": {"Min": 0, "Max": 2}。這些屬性的值重疊,這會導致容量集區重複。

{ "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } }, { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } } } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 1, "DefaultTargetCapacityType": "spot" } } }

有效和無效的 Spot 機群組態範例

如果您使用 AWS CLI 來建立 Spot 機群,則必須確保您的機群組態有效。下列範例顯示有效和無效的組態。

當組態包含下列項目時,視為無效:

  • 同時具有 OverridesInstanceRequirements 的單一 InstanceType

  • 兩個 Overrides 結構, 一個具有 InstanceRequirements,而另一個具有 InstanceType

  • 兩個在同一 InstanceRequirements 內具有重疊屬性值的 LaunchTemplateSpecification 結構

有效組態:具有覆寫的單一啟動範本

下列組態有效。其包含一個啟動範本和一個 Overrides 結構 (其中包含一個 InstanceRequirements 結構)。範例組態的文字說明如下。

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000:role/aws-ec2-spot-fleet-tagging-role", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "My-launch-template", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 2, "Max": 8 }, "MemoryMib": { "Min": 0, "Max": 10240 }, "MemoryGiBPerVCpu": { "Max": 10000 }, "RequireHibernateSupport": true } } ] } ], "TargetCapacity": 5000, "OnDemandTargetCapacity": 0, "TargetCapacityUnitType": "vcpu" } }
InstanceRequirements

若要使用屬性型執行個體選擇,您必須在組態中包含 InstanceRequirements 結構,並為機群中的執行個體指定所需的屬性。

在上述範例中,指定了下列執行個體屬性:

  • VCpuCount – 執行個體類型必須具有最少 2 個,最多 8 個的 vCPU。

  • MemoryMiB – 執行個體類型必須具有最多 10240 MiB 的記憶體。最小值若為 0,表示沒有最小限制。

  • MemoryGiBPerVCpu – 執行個體類型必須具有每個 vCPU 最多 10,000 MiB 的記憶體。Min 為選用參數。若省略它,表示沒有最小限制。

TargetCapacityUnitType

TargetCapacityUnitType 參數會指定目標容量的單位。在範例中,目標容量為 5000,而目標容量單位類型為 vcpu,它們一起指定了所需的目標容量,即 5,000 個 vCPU。Spot 機群將啟動足夠的執行個體,以便機群中的 vCPU 總數為 5,000 個 vCPU。

有效組態:具有多個 InstanceRequirements 的單一啟動範本

下列組態有效。其包含一個啟動範本和一個 Overrides 結構 (其中包含兩個 InstanceRequirements 結構)。InstanceRequirements 中指定的屬性是有效的,因為這些值不重疊—第一個 InstanceRequirements 結構會指定 0-2 個 vCPU 的VCpuCount,而第二個 InstanceRequirements 結構則會指定 4-8 個 vCPU。

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000:role/aws-ec2-spot-fleet-tagging-role", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } }, { "InstanceRequirements": { "VCpuCount": { "Min": 4, "Max": 8 }, "MemoryMiB": { "Min": 0 } } } ] } ], "TargetCapacity": 1, "OnDemandTargetCapacity": 0, "Type": "maintain" } }

有效組態:兩個啟動範本,每個都具有覆寫

下列組態有效。其包含兩個啟動範本,每個都具有一個 Overrides 結構 (其中包含一個 InstanceRequirements 結構)。這個組態有助於同一個機群中的 armx86 架構支援。

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000:role/aws-ec2-spot-fleet-tagging-role", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "armLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } }, { "LaunchTemplateSpecification": { "LaunchTemplateName": "x86LaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } } ] } ], "TargetCapacity": 1, "OnDemandTargetCapacity": 0, "Type": "maintain" } }

有效組態:僅限指定的 InstanceRequirements,沒有重疊的屬性值

下列組態有效。其包含兩個 LaunchTemplateSpecification 結構,每個都有一個啟動範本和一個 Overrides 結構 (其中包含一個 InstanceRequirements 結構)。InstanceRequirements 中指定的屬性是有效的,因為這些值不重疊—第一個 InstanceRequirements 結構會指定 0-2 個 vCPU 的VCpuCount,而第二個 InstanceRequirements 結構則會指定 4-8 個 vCPU。

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000:role/aws-ec2-spot-fleet-tagging-role", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } } ] }, { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyOtherLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 4, "Max": 8 }, "MemoryMiB": { "Min": 0 } } } ] } ], "TargetCapacity": 1, "OnDemandTargetCapacity": 0, "Type": "maintain" } }

組態無效:Overrides 包含 InstanceRequirementsInstanceType

下列組態無效。Overrides 結構同時包含 InstanceRequirementsInstanceType。針對 Overrides,您可以指定 InstanceRequirementsInstanceType,但不能同時指定兩者。

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000:role/aws-ec2-spot-fleet-tagging-role", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } }, { "InstanceType": "m5.large" } ] } ], "TargetCapacity": 1, "OnDemandTargetCapacity": 0, "Type": "maintain" } }

組態無效:兩個 Overrides 包含 InstanceRequirementsInstanceType

下列組態無效。Overrides 結構同時包含 InstanceRequirementsInstanceType。您可以指定 InstanceRequirementsInstanceType,但不能同時指定兩者,即使它們處於不同的 Overrides 結構也一樣。

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000:role/aws-ec2-spot-fleet-tagging-role", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } } ] }, { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyOtherLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceType": "m5.large" } ] } ], "TargetCapacity": 1, "OnDemandTargetCapacity": 0, "Type": "maintain" } }

組態無效:重疊屬性值

下列組態無效。兩個 InstanceRequirements 結構每個都包含 "VCpuCount": {"Min": 0, "Max": 2}。這些屬性的值重疊,這會導致容量集區重複。

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000:role/aws-ec2-spot-fleet-tagging-role", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } }, { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } } } ] } ], "TargetCapacity": 1, "OnDemandTargetCapacity": 0, "Type": "maintain" } }

預覽具有所指定屬性的執行個體類型

您可以使用 get-instance-types-from-instance-requirements 命令來預覽符合您指定屬性的執行個體類型。這特別有助於解決在不啟動任何執行個體的情況下要在請求組態中指定哪些屬性。請注意,該命令不會考慮可用容量。

若要透過指定屬性來預覽執行個體類型的清單,請使用 AWS CLI
  1. (選用) 若要產生可指定的所有可能屬性,請使用 get-instance-types-from-instance-requirements 命令和 --generate-cli-skeleton 參數。您可以選擇性地將輸出導向至檔案來儲存它,方法是使用 input > attributes.json

    aws ec2 get-instance-types-from-instance-requirements \ --region us-east-1 \ --generate-cli-skeleton input > attributes.json

    預期的輸出結果

    { "DryRun": true, "ArchitectureTypes": [ "i386" ], "VirtualizationTypes": [ "hvm" ], "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 0 }, "MemoryMiB": { "Min": 0, "Max": 0 }, "CpuManufacturers": [ "intel" ], "MemoryGiBPerVCpu": { "Min": 0.0, "Max": 0.0 }, "ExcludedInstanceTypes": [ "" ], "InstanceGenerations": [ "current" ], "SpotMaxPricePercentageOverLowestPrice": 0, "OnDemandMaxPricePercentageOverLowestPrice": 0, "BareMetal": "included", "BurstablePerformance": "included", "RequireHibernateSupport": true, "NetworkInterfaceCount": { "Min": 0, "Max": 0 }, "LocalStorage": "included", "LocalStorageTypes": [ "hdd" ], "TotalLocalStorageGB": { "Min": 0.0, "Max": 0.0 }, "BaselineEbsBandwidthMbps": { "Min": 0, "Max": 0 }, "AcceleratorTypes": [ "gpu" ], "AcceleratorCount": { "Min": 0, "Max": 0 }, "AcceleratorManufacturers": [ "nvidia" ], "AcceleratorNames": [ "a100" ], "AcceleratorTotalMemoryMiB": { "Min": 0, "Max": 0 }, "NetworkBandwidthGbps": { "Min": 0.0, "Max": 0.0 }, "AllowedInstanceTypes": [ "" ] }, "MaxResults": 0, "NextToken": "" }
  2. 使用上一個步驟的輸出來建立 JSON 組態檔,並將其設定如下:

    注意

    您必須提供 ArchitectureTypesVirtualizationTypesVCpuCountMemoryMiB 的值。您可以省略其他屬性;省略時,就會使用預設值。

    如需每個屬性及其預設值的說明,請參閱 get-instance-types-from-instance-requirements

    1. 針對 ArchitectureTypes,指定一或多種類型的處理器架構。

    2. 針對 VirtualizationTypes,指定一或多種類型的虛擬化。

    3. 針對 VCpuCount,指定 vCPU 數目下限和上限。若要指定沒有下限,請針對 Min,指定 0。若要指定沒有上限,請省略 Max 參數。

    4. 針對 MemoryMiB,指定記憶體的數量下限和上限 (以 MiB 為單位)。若要指定沒有下限,請針對 Min,指定 0。若要指定沒有上限,請省略 Max 參數。

    5. 您可以選擇性地指定一或多個其他屬性,以進一步限制傳回的執行個體類型清單。

  3. 若要預覽具有您在 JSON 檔案中指定之屬性的執行個體類型,請使用 get-instance-types-from-instance-requirements 命令,並使用 --cli-input-json 參數指定 JSON 檔案的名稱和路徑。您可以選擇性地格式化要以表格格式出現的輸出。

    aws ec2 get-instance-types-from-instance-requirements \ --cli-input-json file://attributes.json \ --output table

    範例 attributes.json 文件

    在此範例中,JSON 檔案中包含必要的屬性。它們是 ArchitectureTypesVirtualizationTypesVCpuCountMemoryMiB。此外,選用 InstanceGenerations 屬性也包含在內。請注意,對於 MemoryMiB,可以省略 Max,以表示沒有限制。

    { "ArchitectureTypes": [ "x86_64" ], "VirtualizationTypes": [ "hvm" ], "InstanceRequirements": { "VCpuCount": { "Min": 4, "Max": 6 }, "MemoryMiB": { "Min": 2048 }, "InstanceGenerations": [ "current" ] } }

    範例輸出

    ------------------------------------------ |GetInstanceTypesFromInstanceRequirements| +----------------------------------------+ || InstanceTypes || |+--------------------------------------+| || InstanceType || |+--------------------------------------+| || c4.xlarge || || c5.xlarge || || c5a.xlarge || || c5ad.xlarge || || c5d.xlarge || || c5n.xlarge || || d2.xlarge || ...
  4. 在識別符合您需求的執行個體類型之後,請記下您使用的執行個體屬性,以便在設定機群請求時可以使用它們。