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 請求不可能成功。
若要使用 Spot 配置分數功能,請遵循下列步驟:
步驟 1:指定您的 Spot 需求
首先,您可以指定所需的目標 Spot 容量和運算需求,如下所示:
-
指定目標 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*4 個 vCPU)、2 m5.2xlarge (2*8 個 vCPU) 和 3 r5.large (3*2 個 vCPUs) 的混合。
-
指定執行個體類型或執行個體屬性。
您可以指定要使用的執行個體類型,也可以指定運算需求所需的執行個體屬性,然後讓 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 政策。
若要提供存取權,請新增許可到您的使用者、群組或角色:
-
AWS IAM Identity Center (successor to AWS Single Sign-On) 中的使用者和群組:
建立許可集合。請遵循《AWS IAM Identity Center (successor to AWS Single Sign-On) 使用者指南》的建立許可集合中的指示。
-
透過身分提供者在 IAM 中管理的使用者:
建立聯合身分的角色。請遵循《IAM 使用者指南》的為第三方身分提供者 (聯合) 建立角色中的指示。
-
IAM 使用者:
-
建立您的使用者可擔任的角色。請遵循《IAM 使用者指南》的為 IAM 使用者建立角色中的指示。
-
(不建議) 將政策直接連接至使用者,或將使用者新增至使用者群組。請遵循《IAM 使用者指南》的新增許可到使用者 (主控台)中的指示。
-
計算 Spot 配置分數
您可以使用 Amazon EC2 主控台或 AWS CLI,計算 Spot 配置分數。
指定執行個體屬性來計算 Spot 配置分數 (主控台)
執行個體屬性來計算 Spot 配置分數
-
在 https://console.aws.amazon.com/ec2/
開啟 Amazon EC2 主控台。 -
在瀏覽窗格中,選擇 Spot 請求。
-
選擇 Spot placement score (Spot 配置分數)。
-
選擇 Enter requirements (輸入需求)。
-
對於 Target capacity (目標容量),根據 instances (執行個體) 或 vCPUs 的數目,或 memory (MiB) (記憶體 (MiB)) 的數量輸入您所需的容量。
-
對於 Instance type requirements (執行個體類型需求),若要指定您的運算需求,並讓 Amazon EC2 識別符合這些要求的最佳執行個體類型,請選擇 Specify instance attributes that match your compute requirements (指定符合運算需求的執行個體屬性)。
-
對於 vCPUs,輸入所需的 vCPU 數量下限和上限。若要指定無限制,請選取 No minimum (無下限)、No maximum (無上限),或兩者。
-
對於 Memory (GiB) (記憶體 (GiB)),輸入所需記憶體數量的下限和上限。若要指定無限制,請選取 No minimum (無下限)、No maximum (無上限),或兩者。
-
對於 CPU architecture (CPU 架構),選取所需的執行個體架構。
-
(選用) 對於 Additional instance attributes (其他執行個體屬性),您可以選擇性地指定一或多個屬性,以更詳細地表達您的運算需求。每個額外屬性都會將進一步的限制新增至您的請求。您可以省略額外屬性;省略時,就會使用預設值。如需每個屬性及其預設值的描述,請參閱 Amazon EC2 命令列參考中的 get-spot-placement-scores。
-
(選用) 若要檢視具有所指定屬性的執行個體類型,請展開 Preview matching instance types (預覽相符的執行個體類型)。若要排除執行個體類型,使其不在配置評估中使用,請選取執行個體,然後選取 Exclude selected instance types (排除選取的執行個體類型)。
-
選擇 Load placement scores (載入配置分數),然後檢閱結果。
-
(選用) 若要顯示特定區域的 Spot 配置分數,請針對 Regions to evaluate (要評估的區域),選取要評估的區域,然後選取 Calculate placement scores (計算配置分數)。
-
(選用) 若要顯示所顯示區域中可用區域的 Spot 配置分數,請選取 Provide placement scores per Availability Zone (提供每個可用區域的配置分數) 核取方塊。如果您想要將所有 Spot 容量啟動至單一可用區域,得分可用區域的清單很有用。
-
(選用) 若要編輯您的運算需求並取得新的配置分數,請選擇 Edit (編輯)、進行必要的調整,然後選擇 Calculate placement scores (計算配置分數)。
指定執行個體類型來計算 Spot 配置分數 (主控台)
指定執行個體類型來計算 Spot 配置分數
-
在 https://console.aws.amazon.com/ec2/
開啟 Amazon EC2 主控台。 -
在瀏覽窗格中,選擇 Spot 請求。
-
選擇 Spot placement score (Spot 配置分數)。
-
選擇 Enter requirements (輸入需求)。
-
對於 Target capacity (目標容量),根據 instances (執行個體) 或 vCPUs 的數目,或 memory (MiB) (記憶體 (MiB)) 的數量輸入您所需的容量。
-
對於 Instance type requirements (執行個體類型需求),若要指定要使用的執行個體類型,請選取 Manually select instance types (手動選取執行個體類型)。
-
選取 Select instance types (選取執行個體類型)、選取要使用的執行個體類型,然後選取 Select (選取)。若要快速尋找執行個體類型,您可以使用篩選條件列,依不同屬性篩選執行個體類型。
-
選擇 Load placement scores (載入配置分數),然後檢閱結果。
-
(選用) 若要顯示特定區域的 Spot 配置分數,請針對 Regions to evaluate (要評估的區域),選取要評估的區域,然後選取 Calculate placement scores (計算配置分數)。
-
(選用) 若要顯示所顯示區域中可用區域的 Spot 配置分數,請選取 Provide placement scores per Availability Zone (提供每個可用區域的配置分數) 核取方塊。如果您想要將所有 Spot 容量啟動至單一可用區域,得分可用區域的清單很有用。
-
(選用) 若要編輯執行個體類型的清單並取得新的配置分數,請選擇 Edit (編輯)、進行必要的調整,然後選擇 Calculate placement scores (計算配置分數)。
計算 Spot 配置分數 (AWS CLI)
計算 Spot 配置分數
-
(選用) 若要產生可以針對 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": "" }
-
使用上一個步驟的輸出來建立 JSON 組態檔,並將其設定如下:
-
對於
TargetCapacity
,根據執行個體 或 vCPU 的數目,或記憶體 (MiB) 的數量輸入您所需的 Spot 容量。 -
對於
TargetCapacityUnitType
,輸入目標容量的單位。如果省略此參數,則其會預設為units
。有效值:
units
(其會轉換為執行個體的數量) |vcpu
|memory-mib
-
對於
SingleAvailabilityZone
,指定true
,以取得傳回得分可用區域清單的回應。如果您想要將所有 Spot 容量啟動至單一可用區域,得分可用區域的清單很有用。如果省略此參數,則其會預設為false
,並且回應會傳回得分區域的清單。 -
(選用) 對於
RegionNames
,請指定要用作篩選條件的區域。您必須指定區域代碼,例如us-east-1
。搭配區域篩選條件,回應只會傳回您指定的區域。如果您針對
SingleAvailabilityZone
指定了true
,則回應只會傳回所指定區域中的可用區域。 -
您可以包含
InstanceTypes
或InstanceRequirements
,但兩者不能同時位於相同的組態中。在 JSON 組態中指定下列其中一個項目:
-
若要指定執行個體類型的清單,請在
InstanceTypes
參數中指定執行個體類型。指定至少三種不同的執行個體類型。如果您只指定一個或兩個執行個體類型,Spot 配置分數會傳回低分數。如需執行個體類型的清單,請參閱 Amazon EC2 執行個體類型。 -
若要指定執行個體屬性,以便 Amazon EC2 可以識別符合這些屬性的執行個體類型,請指定位於
InstanceRequirements
結構中的屬性。您必須提供
VCpuCount
、MemoryMiB
和CpuManufacturers
的值。您可以省略其他屬性;省略時,就會使用預設值。如需每個屬性及其預設值的描述,請參閱 Amazon EC2 命令列參考中的 get-spot-placement-scores。
如需組態範例,請參閱 範例組態。
-
-
-
若要取得您在 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 } } } }