

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

# 計算 Spot 配置分數
<a name="work-with-spot-placement-score"></a>

您可以根據目標容量和運算需求計算 Spot 配置分數。如需詳細資訊，請參閱[Spot 配置分數的運作方式](how-sps-works.md)。

**所需的 許可**  
請確保備妥必要許可。如需詳細資訊，請參閱[Spot 配置分數的必要許可](sps-iam-permission.md)。

**Topics**
+ [使用執行個體屬性計算](#sps-specify-instance-attributes-console)
+ [使用執行個體類型計算](#sps-specify-instance-types-console)
+ [使用 計算 AWS CLI](#calculate-sps-cli)

**是否在尋找自動化解決方案？** 您可以建置 Spot 配置分數追蹤器儀表板，以自動擷取分數並將分數儲存在 Amazon CloudWatch 中，而不是遵循本「使用者指南」中的手動步驟。如需詳細資訊，請參閱[「 AWS上的建置 Spot 配置分數追蹤器儀表板指南」](https://aws.amazon.com/solutions/guidance/building-a-spot-placement-score-tracker-dashboard-on-aws/)。

## 使用執行個體屬性計算
<a name="sps-specify-instance-attributes-console"></a>

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

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在瀏覽窗格中，選擇 **Spot 請求**。

1. 選擇**請求 Spot 執行個體**旁的向下箭頭，然後選擇**計算 Spot 配置分數**。

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

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

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

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

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

1. 對於 **CPU architecture** (CPU 架構)，選取所需的執行個體架構。

1. (選用) 對於 **Additional instance attributes** (其他執行個體屬性)，您可以選擇性地指定一或多個屬性，以更詳細地表達您的運算需求。每個額外屬性都會將進一步的限制新增至您的請求。您可以省略額外屬性；省略時，就會使用預設值。如需每個屬性及其預設值的描述，請參閱 [get-spot-placement-scores](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-spot-placement-scores.html)。

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

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

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

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

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

## 使用執行個體類型計算
<a name="sps-specify-instance-types-console"></a>

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

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在瀏覽窗格中，選擇 **Spot 請求**。

1. 選擇**請求 Spot 執行個體**旁的向下箭頭，然後選擇**計算 Spot 配置分數**。

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

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

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

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

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

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

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

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

## 使用 計算 AWS CLI
<a name="calculate-sps-cli"></a>

**計算 Spot 配置分數**

1. (選用) 若要產生可以針對 Spot 配置分數組態指定的所有可能參數，請使用 [get-spot-placement-scores](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-spot-placement-scores.html) 命令和 `--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": ""
   }
   ```

1. 使用上一個步驟的輸出來建立 JSON 組態檔，並將其設定如下：

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

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

      有效值：`units` (其會轉換為執行個體的數量) \$1 `vcpu` \$1 `memory-mib`

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

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

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

   1. 您可以包含 `InstanceTypes` 或 `InstanceRequirements`，但兩者不能同時位於相同的組態中。

      在 JSON 組態中指定下列其中一個項目：
      + 若要指定執行個體類型的清單，請在 `InstanceTypes` 參數中指定執行個體類型。指定至少三種不同的執行個體類型。如果您只指定一個或兩個執行個體類型，Spot 配置分數會傳回低分數。如需執行個體類型的清單，請參閱 [Amazon EC2 執行個體類型](https://aws.amazon.com/ec2/instance-types/)。
      + 若要指定執行個體屬性，以便 Amazon EC2 可以識別符合這些屬性的執行個體類型，請指定位於 `InstanceRequirements` 結構中的屬性。

        您必須提供 `VCpuCount`、`MemoryMiB` 和 `CpuManufacturers` 的值。您可以省略其他屬性；省略時，就會使用預設值。如需每個屬性及其預設值的描述，請參閱 [get-spot-placement-scores](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-spot-placement-scores.html)。

      如需組態範例，請參閱 [範例組態](#sps-example-configs)。

1. 若要取得您在 JSON 檔案中指定之需求的 Spot 配置分數，請使用 [get-spot-placement-scores](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-spot-placement-scores.html) 命令，並使用 `--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
       },
      ...
   ```

### 範例組態
<a name="sps-example-configs"></a>

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

**Topics**
+ [範例：指定執行個體類型和目標容量](#example-config-instance-type-override)
+ [範例：根據記憶體指定執行個體類型和目標容量](#example-config-instance-type-memory-unit-override)
+ [範例：為屬性型執行個體類型選取指定屬性](#example-config-attribute-based-instance-type-selection)
+ [範例：為屬性型執行個體類型選取指定屬性，並傳回可用區域的得分清單](#example-config-sps-singleAZ)

#### 範例：指定執行個體類型和目標容量
<a name="example-config-instance-type-override"></a>

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

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

#### 範例：根據記憶體指定執行個體類型和目標容量
<a name="example-config-instance-type-memory-unit-override"></a>

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

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

#### 範例：為屬性型執行個體類型選取指定屬性
<a name="example-config-attribute-based-instance-type-selection"></a>

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

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

請注意，有幾個您可以指定的其他選用屬性。如需屬性清單，請參閱 [get-spot-placement-scores](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-spot-placement-scores.html)。

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

#### 範例：為屬性型執行個體類型選取指定屬性，並傳回可用區域的得分清單
<a name="example-config-sps-singleAZ"></a>

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

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