指定EC2叢集或 Spot 叢集的執行個體類型選取屬性 - Amazon Elastic Compute Cloud

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

指定EC2叢集或 Spot 叢集的執行個體類型選取屬性

建立EC2叢集或 Spot 叢集時,您必須指定一或多個執行個體類型,以便在叢集中設定隨需執行個體和 Spot 執行個體。作為手動指定執行個體類型的替代方法,您可以指定執行個體必須具有的屬性,Amazon EC2 將使用這些屬性識別所有執行個體類型。這就是所謂的屬性型執行個體類型選項。例如,您可以指定執行個體 vCPUs 所需的最小和最大數量,叢集會使用任何符合這些 v 需CPU求的可用執行個體類型啟動執行個體。

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

優勢

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

  • 輕鬆使用正確的執行個體類型 — 有這麼多可用的執行個體類型,因此尋找適合您工作負載的執行個體類型可能非常耗時。當您指定執行個體類型屬性時,執行個體類型會自動具有工作負載所需的屬性。

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

  • 自動使用新的執行個體類型 — 當您指定執行個體屬性而非執行個體類型時,您的叢集可以在發行時使用新一代執行個體類型,「future 校對」叢集的配置。

  • 執行個體類型彈性 — 當您指定執行個體屬性而非執行個體類型時,叢集可以從各種執行個體類型中進行選取,以啟動競價型執行個體類型,這符合 Spot 執行個體類型彈性的最佳實務

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

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

執行個體屬性的類型

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

  • v CPU 計數 — 每個執行個體的最小和最大 vCPUs 數目。

  • 記憶體 — 每個執行個體 GiBs 的記憶體下限和最大記憶體。

  • 本地存儲 — 是否使用EBS或實例存儲卷用於本地存儲。

  • 高載效能 — 是否使用 T 執行個體系列,包括 T4G、T3A、T3 和 T2 類型。

如需每個屬性和預設值的說明,請參閱 Amazon 參EC2API考InstanceRequirements中的。

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

根據您使用的是主控台還是 AWS CLI,您可以指定以屬性為基礎之執行個體類型選取的執行個體屬性,如下所示:

在主控台中,您可以在下列叢集設定元件中指定執行個體屬性:

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

  • (僅限 Spot 叢集) 在叢集請求中

在中 AWS CLI,您可以在下列一或所有叢集組態元件中指定執行個體屬性:

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

  • 在啟動範本覆寫中

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

  • (僅限 Spot 艦隊) 在啟動規格中

EC2叢集或 Spot 叢集在佈建叢集時如何使用以屬性為基礎的執行個體類型選取

EC2艦隊或 Spot 艦隊以下列方式佈建艦隊:

  • 它會識別具有指定屬性的執行個體類型。

  • 它使用價格保護來確定要排除哪些執行個體類型。

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

  • 它會套用指定的配置策略,以決定要從哪個容量集區啟動執行個體。

    請注意,以屬性為基礎的執行個體類型選取不會挑選要佈建叢集的容量集區;這就是配置策略的工作。

    如果您指定配置策略,叢集將會根據指定的配置策略啟動執行個體。

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

    • 對於隨需執行個體,屬性型執行個體類型選取支援最低價格配置策略。

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

價格保護

價格保護是一項功能,可防止您的EC2叢集或 Spot Fleet 使用執行個體類型,即使它們恰好符合您指定的屬性,您也會認為這些執行個體類型過於昂貴。要使用價格保護,請設置價格閾值。然後,當 Amazon EC2 選取具有屬性的執行個體類型時,就會排除定價高於閾值的執行個體類型。

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

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

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

隨需執行個體和 Spot 執行個體有不同的價格門檻。

當您使用以屬性為基礎的執行個體類型選項建立叢集時,預設會啟用價格保護。您可以保留預設值,也可以指定自己的值。

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

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

Amazon 透過識別與指EC2定屬性相符的執行個體類型中最低價格的執行個體類型,來決定價格閾值的價格。它通過以下方式執行此操作:

  • 它首先查看與您的屬性匹配的當前一代 C,M 或 R 實例類型。如果找到任何相符項目,就會識別價格最低的執行個體類型。

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

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

隨需執行個體價格保

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

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

競價型實例價格保護

根據預設,Amazon EC2 會自動套用最佳競價型執行個體價格保護,以持續從各種執行個體類型中進行選取。您也可以自行手動設定價格保護。但是,讓 Amazon 為您EC2做到這一點可以提高您的 Spot 容量滿足的可能性。

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

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

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

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

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

指定價格保護門檻

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

使用建立EC2叢集或 Spot 叢集時 AWS CLI,針對以屬性為基礎的執行個體類型選取設定叢集,然後執行下列動作:

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

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

    • 對於MaxSpotPriceAsPercentageOfOptimalOnDemandPrice,以百分比輸入價格保護閾值。

    • 對於SpotMaxPricePercentageOverLowestPrice,以百分比輸入價格保護閾值。

如需詳細資訊,請參閱 使用以屬性為基礎的執行個體類型選擇建立EC2叢集建立具有屬性型執行個體類型選擇的 Spot Fleet

(僅限競價型叢集) 使用主控台指定價格保護閾值

在主控台中建立 Spot 叢集時,針對以屬性為基礎的執行個體類型選擇設定叢集,然後執行下列動作:

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

  • 若要指定競價型執行個體價格保護閾值、其他執行個體屬性、選擇競價型價格保護、選擇 [新增屬性]、選擇價格基礎的基礎值,然後以百分比輸入價格保護閾值。

注意

建立叢集時,如果您設定TargetCapacityUnitTypevcpumemory-mib,則會根據每 V CPU 或每個記憶體的價格而非每個執行個體價格套用價格保護閾值。

考量事項

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

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

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

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

使用以屬性為基礎的執行個體類型選擇建立EC2叢集

您可以使用將EC2叢集設定為使用屬性型執行個體類型選取。 AWS CLI

使用以屬性為基礎的執行個體類型選取建立EC2叢集 ()AWS CLI

使用建立叢集 (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— 至少指 vCPUs 定 2。由於未指定最大值,因此沒有最大限制。

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

任何具有 2 或更多記憶體 vCPUs 和 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 Fleet

您可以使用 Amazon EC2 主控台或將叢集設定為使用屬性型執行個體類型選取。 AWS CLI

使用主控台建立 Spot Fleet

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

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

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

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

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

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

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

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

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

使用 AWS CLI建立 Spot Fleet

若要為屬性型執行個體類型選取設定 Spot Fleet (AWS CLI)

使用 request-spot-fleet(AWS CLI) 指令建立競價型叢集。在檔案中指定叢集配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— 至少指 vCPUs 定 2。由於未指定最大值,因此沒有最大限制。

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

任何具有 2 或更多記憶體 vCPUs 和 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 個vCPUs。

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

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

TargetCapacityUnitType

TargetCapacityUnitType 參數會指定目標容量的單位。在此範例中,目標容量為5000且目標容量單位類型為vcpu,它們共同指定所需的目標容量 5,000 vCPUs。EC2叢集將啟動足夠的執行個體,因此叢集 vCPUs 中的總數為 5,000 個vCPUs。

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

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

{ "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 結構)。中指定VCpuCount的屬性InstanceRequirements有效,因為值不會重疊 — 第一個InstanceRequirements結構指定 a 為 0-2vCPUs,而第二個InstanceRequirements結構則指定 4-8。vCPUs

{ "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" } } }

有效且無效的競價型叢集組態範例

如果您使用 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 個vCPUs。

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

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

TargetCapacityUnitType

TargetCapacityUnitType 參數會指定目標容量的單位。在此範例中,目標容量為5000且目標容量單位類型為vcpu,它們共同指定所需的目標容量 5,000 vCPUs。Spot 叢集將啟動足夠的執行個體,因此叢集 vCPUs 中的總數為 5,000 個vCPUs。

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

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

{ "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 結構)。中指定VCpuCount的屬性InstanceRequirements有效,因為值不會重疊 — 第一個InstanceRequirements結構指定 a 為 0-2vCPUs,而第二個InstanceRequirements結構則指定 4-8。vCPUs

{ "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-要求 AWS CLI 指令來預覽符合您指定屬性的執行個體類型。這特別有助於解決在不啟動任何執行個體的情況下要在請求組態中指定哪些屬性。請注意,該命令不會考慮可用容量。

若要透過指定屬性來預覽執行個體類型的清單,請使用 AWS CLI
  1. (選擇性) 若要產生所有可指定的可能屬性,請使用 get-instance-types-from-instance-需求指令和參數。--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執行個體需求。

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

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

    3. 對於VCpuCount,指定的最小和最大數目vCPUs。若要指定沒有下限,請針對 Min,指定 0。若要指定沒有上限,請省略 Max 參數。

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

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

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

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

    範例 attributes.json file

    在此範例中,必要的屬性包含在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. 在識別符合您需求的執行個體類型之後,請記下您使用的執行個體屬性,以便在設定機群請求時可以使用它們。