Spot 配置分數 - Amazon Elastic Compute Cloud

Spot 配置分數

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

注意

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

優勢

您可以針對下列情況使用 Spot 配置分數功能:

  • 視需要在不同區域中重新放置並擴展 Spot 運算容量,以回應目前區域中增加的容量需求或降低的可用容量。

  • 識別執行單一可用區域工作負載的最佳可用區域。

  • 模擬未來的 Spot 容量需求,以便您可以挑選最佳區域來擴充 Spot 型工作負載。

  • 尋找執行個體類型的最佳組合以滿足您的 Spot 容量需求。

成本

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

Spot 配置分數的運作方式

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

步驟 1:指定您的 Spot 需求

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

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

    您可以根據執行個體或 vCPU 的數量或 MiB 中的記憶體容量來指定所需的目標 Spot 容量。若要以 vCPU 數目或記憶體數量指定目標容量,您必須將目標容量單位指定為 vcpumemory-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*4 個 vCPU)、2 m5.2xlarge (2*8 個 vCPU) 和 3 r5.large (3*2 個 vCPUs) 的混合。

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

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

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

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

如需指定 Spot 需求的不同方式範例,請參閱 範例組態

步驟 2:篩選 Spot 配置分數回應

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

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

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

步驟 3:檢閱建議

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

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

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

步驟 4:使用建議

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

雖然 Spot 配置分數充當指導方針,而且沒有任何分數保證您的 Spot 請求會完全或部分實現,但您可以使用下列資訊來取得最佳結果:

  • 使用相同組態 – 僅在 Auto Scaling 群組、EC2 Fleet 或 Spot Fleet 中的 Spot 請求組態 (目標容量、目標容量單位,以及執行個體類型或執行個體屬性) 與您為了取得 Spot 配置分數而輸入的組態相同時,Spot 配置分數才相關。

    如果您在 Spot 配置分數請求中使用了屬性型執行個體類型選擇,則可以使用屬性型執行個體類型選擇,來設定 Auto Scaling 群組、EC2 Fleet 或 Spot Fleet。如需詳細資訊,請參閱建立對所使用之執行個體類型具有一組需求的 Auto Scaling 群組EC2 Fleet 的屬性型執行個體類型選擇Spot Fleet 的屬性型執行個體類型選擇

    注意

    如果您根據 vCPU 數目或記憶體數量指定目標容量,並在 Spot 配置分數組態中指定了執行個體類型,請注意,您目前無法在 Auto Scaling 群組、EC2 Fleet 或 Spot Fleet 中建立此組態。反之,您必須使用 WeightedCapacity 參數,手動設定執行個體加權。

  • 使用 capacity-optimized 分配策略 – 任何分數都假設您的機群請求將設定為使用所有的可用區域 (用於跨區域請求容量) 或單一可用區域 (如果在某個可用區域請求容量) 和 capacity-optimized Spot 分配策略,以便您可以成功請求 Spot 容量。如果您使用其他配置策略 (例如 lowest-price),取得可用 Spot 容量的可能性將不符合分數。

  • 立即對分數採取行動 – Spot 配置分數建議會反映請求時的可用 Spot 容量,並且由於 Spot 容量波動,因此在不同時間計算時,相同的組態可能會產生不同的分數。雖然分數 10 表示您的 Spot 容量請求很可能 (但不保證) 成功,但為了取得最佳結果,我們建議您立即對分數採取行動。我們也建議您在每次嘗試容量請求時取得全新的分數。

限制

  • 目標容量限制 – 您的 Spot 配置分數目標容量限制是基於最近的 Spot 用量,同時考量潛在的用量成長。如果沒有最近的 Spot 用量,我們會為您提供符合 Spot 請求限制的低預設限制。

  • 請求組態限制 – 如果我們偵測到未與 Spot 配置分數功能之預期用途相關聯的模式,可以在 24 小時期間內限制新請求組態的數目。如果達到限制,您可以重試已使用的請求組態,但無法指定新的請求組態,直到下一個 24 小時期間。

  • 執行個體類型數目下限 – 如果指定執行個體類型,則您必須至少指定三種不同的執行個體類型,否則 Amazon EC2 將傳回低 Spot 配置分數。同樣地,如果您指定執行個體屬性,它們必須解析為至少三種不同的執行個體類型。如果執行個體類型具有不同的名稱,則會將其視為不同。例如,m5.8xlarge、m5a.8xlarge 和 m5.12xlarge 都會視為不同。

所需的 IAM 許可

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

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

{ "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中的編輯 IAM 政策

計算 Spot 配置分數

您可以使用 Amazon EC2 主控台或 AWS CLI,計算 Spot 配置分數。

指定執行個體屬性來計算 Spot 配置分數 (主控台)

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

  1. https://console.aws.amazon.com/ec2spot 開啟 Spot 主控台。

  2. 選擇 Spot placement score (Spot 配置分數)。

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

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

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

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

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

  8. 對於 CPU architecture (CPU 架構),選取所需的執行個體架構。

  9. (選用) 對於 Additional instance attributes (其他執行個體屬性),您可以選擇性地指定一或多個屬性,以更詳細地表達您的運算需求。每個額外屬性都會將進一步的限制新增至您的請求。您可以省略額外屬性;省略時,就會使用預設值。如需每個屬性及其預設值的描述,請參閱 Amazon EC2 命令列參考中的 get-spot-placement-scores

  10. (選用) 若要檢視具有所指定屬性的執行個體類型,請展開 Preview matching instance types (預覽相符的執行個體類型)。若要排除執行個體類型,使其不在配置評估中使用,請選取執行個體,然後選擇 Exclude selected instance types (排除選取的執行個體類型)。

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

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

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

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

指定執行個體類型來計算 Spot 配置分數 (主控台)

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

  1. https://console.aws.amazon.com/ec2spot 開啟 Spot 主控台。

  2. 選擇 Spot placement score (Spot 配置分數)。

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

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

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

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

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

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

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

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

計算 Spot 配置分數 (AWS CLI)

計算 Spot 配置分數

  1. (選用) 若要產生可以針對 Spot 配置分數組態指定的所有可能參數,請使用 get-spot-placement-scores 命令和 --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": "" }
  2. 使用上一個步驟的輸出來建立 JSON 組態檔,並將其設定如下:

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

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

      有效值:units (其會轉換為執行個體的數量) | vcpu | memory-mib

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

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

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

    5. 您可以包含 InstanceTypesInstanceRequirements,但兩者不能同時位於相同的組態中。

      在 JSON 組態中指定下列其中一個項目:

      • 若要指定執行個體類型的清單,請在 InstanceTypes 參數中指定執行個體類型。指定至少三種不同的執行個體類型。如果您只指定一個或兩個執行個體類型,Spot 配置分數會傳回低分數。如需執行個體類型的清單,請參閱 Amazon EC2 執行個體類型

      • 若要指定執行個體屬性,以便 Amazon EC2 可以識別符合這些屬性的執行個體類型,請指定位於 InstanceRequirements 結構中的屬性。

        您必須提供 VCpuCountMemoryMiBCpuManufacturers 的值。您可以省略其他屬性;省略時,就會使用預設值。如需每個屬性及其預設值的描述,請參閱 Amazon EC2 命令列參考中的 get-spot-placement-scores

      如需組態範例,請參閱 範例組態

  3. 若要取得您在 JSON 檔案中指定之需求的 Spot 配置分數,請使用 get-spot-placement-scores 命令,並使用 --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 }, ...

範例組態

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

範例:指定執行個體類型和目標容量

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

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

範例:根據記憶體指定執行個體類型和目標容量

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

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

範例:為屬性型執行個體類型選擇指定屬性

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

{ "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 參數,表示沒有最大限制。

請注意,有幾個您可以指定的其他選用屬性。如需屬性清單,請參閱 Amazon EC2 命令列參考中的 get-spot-placement-scores

TargetCapacityUnitType

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

範例:為屬性型執行個體類型選擇指定屬性,並傳回可用區域的得分清單

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

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