

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

# 使用屬性型執行個體類型選取項目建立混合執行個體群組
<a name="create-mixed-instances-group-attribute-based-instance-type-selection"></a>

您可以指定一組描述運算需求的執行個體屬性，而不必手動選擇混合執行個體群組的執行個體類型。Amazon EC2 Auto Scaling 啟動執行個體時，Auto Scaling 群組使用的任何執行個體類型都必須與您所需的執行個體屬性相符。這就是所謂的*屬性型執行個體類型選取範圍*。

此方法非常適合那些可以靈活處理其所使用的執行個體類型的工作負載和架構，例如容器、大數據和 CI/CD。

屬性型執行個體類型選取範圍具有以下優勢：
+ **Spot 執行個體的最佳彈性** – Amazon EC2 Auto Scaling 可以從各種執行個體類型中選擇，以啟動 Spot 執行個體。這符合靈活處理執行個體類型的 Spot 最佳實務，讓 Amazon EC2 Spot 服務有更好的機會尋找和分配您所需的運算容量。
+ **輕鬆使用正確的執行個體類型**：由於有太多可用的執行個體類型，為您的工作負載尋找適當的執行個體類型可能會非常耗時。當您指定執行個體類型屬性時，執行個體類型會自動具有工作負載所需的屬性。
+ **自動使用新的執行個體類型** – Auto Scaling 群組可以在發行時使用較新一代的執行個體類型。當新一代執行個體類型符合您的需求並與您為 Auto Scaling 群組選擇的分配策略保持一致時，系統會自動使用這些執行個體類型。

**Topics**
+ [屬性型執行個體類型選擇的運作方式](#how-attribute-based-instance-type-selection-works)
+ [價格保護](#understand-price-protection)
+ [效能保護](#understand-performance-protection)
+ [先決條件](#attribute-based-instance-type-selection-prerequisites)
+ [使用屬性型執行個體類型選取項目 （主控台） 建立混合執行個體群組](#attribute-based-instance-type-selection-console)
+ [使用屬性型執行個體類型選取項目建立混合執行個體群組 (AWS CLI)](#attribute-based-instance-type-selection-aws-cli)
+ [範例組態](#attribute-based-instance-type-selection-example-configurations)
+ [預覽執行個體類型](#attribute-based-instance-type-selection-preview)
+ [相關資源](#attribute-based-instance-type-selection-related-resources)

## 屬性型執行個體類型選擇的運作方式
<a name="how-attribute-based-instance-type-selection-works"></a>

透過屬性型執行個體類型選擇，您可以提供執行個體所需的執行個體屬性清單，例如：
+ **vCPU 數量**：每個執行個體的 vCPU 數量下限和上限。
+ **記憶體**：每個執行個體的記憶體 GiB 下限和上限。
+ **本機儲存**：是否使用本機儲存的 EBS 或執行個體儲存體磁碟區。
+ **爆量效能**：是否使用 T 執行個體系列，包括 T4g、T3a、T3和 T2 類型。

有許多選項可用於定義您的執行個體需求。如需每個選項和預設值的說明，請參閱《*Amazon EC2 Auto Scaling API 參考*》中的 [InstanceRequirements](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_InstanceRequirements.html)。

當您的 Auto Scaling 群組需要啟動執行個體時，它會搜尋符合您指定屬性且可在該可用區域中使用的執行個體類型。然後，配置策略會決定要啟動哪些相符的執行個體類型。根據預設，屬性型執行個體類型選擇已啟用價格保護功能，以防止 Auto Scaling 群組啟動超過預算閾值的執行個體類型。

根據預設，您在設定 Auto Scaling 群組的所需容量時，會使用執行個體數量做為度量單位，這表示每個執行個體都會計為一個單位。

或者，您可以將所需容量的值設定為 vCPU 的數量或記憶體量。若要這樣做，請使用 **中的所需容量類型**下拉式清單欄位， AWS 管理主控台 或 `CreateAutoScalingGroup`或 `UpdateAutoScalingGroup` API 操作中的 `DesiredCapacityType` 屬性。然後，Amazon EC2 Auto Scaling 會啟動滿足所需 vCPU 或記憶體容量所需的執行個體數量。例如，如果您使用 vCPUs做為所需的容量類型，並使用各具有 2 個 vCPUs執行個體，則 10 個 vCPUs的所需容量會啟動 5 個執行個體。這是一個可以替代[執行個體加權](ec2-auto-scaling-mixed-instances-groups-instance-weighting.md)的有用方案。

## 價格保護
<a name="understand-price-protection"></a>

透過價格保護，您可以指定您願意為 Auto Scaling 群組啟動的 EC2 執行個體支付的最高價格。價格保護功能可防止 Auto Scaling 群組使用您認為過於昂貴的執行個體類型，即使它們剛好符合您指定的屬性。

價格保護預設為啟用，並具有個別的隨需執行個體和 Spot 執行個體價格閾值。當 Amazon EC2 Auto Scaling 需要啟動新的執行個體時，不會啟動任何價格高於相關閾值的執行個體類型。

**Topics**
+ [隨需價格保護](#on-demand-price-price-protection)
+ [Spot 價格保護](#spot-price-price-protection)
+ [自訂價格保護](#customize-price-price-protection)

### 隨需價格保護
<a name="on-demand-price-price-protection"></a>

對於隨需執行個體，您可以將您願意支付的最高隨需價格定義為高於已識別隨需價格的百分比。識別的隨需價格是價格最低的目前世代 C、M 或 R 執行個體類型，以及您指定的屬性。

如果未明確定義隨需價格保護值，則會使用高於指定隨需價格 20% 的預設隨需價格上限。

### Spot 價格保護
<a name="spot-price-price-protection"></a>

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

您可以使用下列其中一個選項手動指定價格保護。如果您手動設定價格保護，我們建議您使用第一個選項。
+ **已識別*的隨需價格*百分比** – 已識別的隨需價格是具有您指定屬性之價格最低的目前世代 C、M 或 R 執行個體類型的價格。
+ **高於已識別 *Spot 價格*的百分比** – 已識別的 Spot 價格是具有您指定屬性的最低價格目前世代 C、M 或 R 執行個體類型的價格。我們不建議使用此選項，因為 Spot 價格可能會波動，因此您的價格保護閾值也可能會波動。

### 自訂價格保護
<a name="customize-price-price-protection"></a>

您可以在 Amazon EC2 Auto Scaling 主控台或使用 AWS CLI 或 SDKs自訂價格保護閾值。
+ 在 主控台中，使用**其他執行個體屬性**中的**隨需價格保護**和 **Spot 價格保護**設定。
+ 在 [InstanceRequirements](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_InstanceRequirements.html) 結構中，若要指定隨需執行個體價格保護閾值，請使用 `OnDemandMaxPricePercentageOverLowestPrice` 屬性。若要指定 Spot 執行個體價格保護閾值，請使用 `MaxSpotPriceAsPercentageOfOptimalOnDemandPrice`或 `SpotMaxPricePercentageOverLowestPrice` 屬性。

如果您將**所需容量類型 **(`DesiredCapacityType`) 設定為 **vCPUs**或**記憶體 GiB**，則價格保護會根據每個 vCPU 或每個記憶體價格套用，而不是每個執行個體的價格。

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

**注意**  
如果沒有最新一代的 C、M 或 R 執行個體類型符合您指定的屬性，則價格保護仍然適用。找不到相符項目時，識別的價格來自價格最低的目前世代執行個體類型，或不符合價格最低的前一代執行個體類型，以符合您的屬性。

## 效能保護
<a name="understand-performance-protection"></a>

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

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

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

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

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

**考量事項**  
使用效能保護時，請考慮下列事項：
+ 您可以指定執行個體類型或執行個體屬性，但不能同時指定兩者。
+ 您最多可以在請求組態中指定四個 `InstanceRequirements` 結構。

## 先決條件
<a name="attribute-based-instance-type-selection-prerequisites"></a>
+ 建立啟動範本。如需詳細資訊，請參閱[為 Auto Scaling 群組建立啟動範本](create-launch-template.md)。
+ 驗證啟動範本是否尚未請求 Spot 執行個體。

## 使用屬性型執行個體類型選取項目 （主控台） 建立混合執行個體群組
<a name="attribute-based-instance-type-selection-console"></a>

請遵循以下程序，使用屬性型執行個體類型選取範圍來建立混合執行個體群組。為了協助您有效率地完成這些步驟，我們會略過某些選用的區段。

對於大多數一般用途的工作負載來說，只需指定所需的 vCPU 和記憶體數量就已足夠。對於進階使用案例，您可以指定儲存類型、網路介面、CPU 製造商和加速器類型等屬性。

若要檢閱混合執行個體群組的最佳實務，請參閱 [建立混合執行個體群組的設定概觀](mixed-instances-groups-set-up-overview.md)。

**建立混合執行個體群組**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 在畫面上方的導覽列中，選擇您用來建立啟動範本的相同 AWS 區域 。

1. 選擇**建立 Auto Scaling 群組**。

1. 在**選擇啟動範本或組態**頁面上，針對**Auto Scaling 群組名稱**，請輸入 Auto Scaling 群組的名稱。

1. 若要選擇您的啟動範本，請執行以下操作：

   1. 針對**啟動範本**，選擇現有的啟動範本。

   1. 針對 **Launch template version** (啟動範本版本)，選擇 Auto Scaling 群組擴增時使用啟動範本的預設、最新或特定版本。

   1. 確認您的啟動範本支援您打算使用的所有選項，然後選擇 **Next** (下一步)。

1. 在**選擇執行個體啟動選項**頁面上，請執行以下操作：

   1. 對於 **Instance type requirements** (執行個體類型需求)，選擇 **Override launch template** (覆寫啟動範本)。
**注意**  
如果您選擇的啟動範本已包含一組執行個體屬性 (例如 vCPU 和記憶體)，則會顯示執行個體屬性。這些屬性會新增至 Auto Scaling 群組屬性，您隨時可從 Amazon EC2 Auto Scaling 主控台更新這些屬性。

   1. 在 **Specify instance attributes** (指定執行個體屬性) 下，首先輸入您的 vCPU 和記憶體需求。
      + 對於 **vCPUs**，輸入所需的 vCPU 數量下限和上限。若要指定無限制，請選取 **No minimum** (無下限)、**No maximum** (無上限)，或兩者。
      + 對於 **Memory (GiB)** (記憶體 (GiB))，輸入所需記憶體數量的下限和上限。若要指定無限制，請選取 **No minimum** (無下限)、**No maximum** (無上限)，或兩者。

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

   1. 展開**預覽比對執行個體類型**，以檢視具有您指定屬性的執行個體類型。

   1. 在**執行個體購買選項**下的**執行個體分佈**，分別指定群組要以隨需執行個體和 Spot 執行個體啟動的百分比。如果您的應用程式無狀態、可容錯並且可以處理被中斷的執行個體，則您可以指定較高的 Spot 執行個體百分比。

   1. (選用) 當您指定 Spot 執行個體的百分比時，您可以勾選**包含隨需基本容量**旁的核取方塊，然後指定 Auto Scaling 群組初始容量中應以隨需執行個體履行的數量下限。超過基本容量的項目會使用 **Instances distribution** (執行個體分佈) 設定來決定啟動多少隨需執行個體和 Spot 執行個體。

   1. 在 **Allocation strategies** (分配策略) 下，**On-Demand allocation strategy** (隨需分配策略) 會自動選取 **Lowest price** (最低價格)，且無法對其進行變更。

   1. 對於 **Spot allocation strategy** (Spot 分配策略)，選擇分配策略。依預設會選取**最佳化的價格容量**。

   1. 對於**容量重新平衡**，請選擇啟用或停用容量重新平衡。當 Spot 執行個體因 Spot 中斷而即將終止時，可使用容量重新平衡來自動回應。如需詳細資訊，請參閱[Auto Scaling 中的容量重新平衡，以取代具有風險的 Spot 執行個體](ec2-auto-scaling-capacity-rebalancing.md)。

   1. 在 **Network** (網路) 下，對於 **VPC**，選擇 VPC。Auto Scaling 群組必須與您在啟動範本中指定的安全群組建立在同一個 VPC 中。

   1. 對於**可用區域和子網路**，請選擇指定 VPC 中的一個或多個子網路。在多個可用區域中，請使用子網路，以獲得高可用性。如需詳細資訊，請參閱[選擇 VPC 子網路時的注意事項](asg-in-vpc.md#as-vpc-considerations)。

   1. 選擇**下一步**、**下一步**。

1. 針對**設定群組大小和擴展政策**步驟，請執行以下操作：

   1. 若要以執行個體以外的單位來量測所需容量，應為**群組大小**、**所需容量類型**選擇適當的選項。支援 **Units** (單位)、**vCPU** 和 **Memory GiB** (記憶體 GiB)。根據預設，Amazon EC2 Auto Scaling 會指定 **Units** (單位)，其會轉譯為執行個體數目。

   1. **所需容量**為 Auto Scaling 群組的初始大小。

   1. 在**擴展**區段的**擴展限制**下，如果**所需容量**的新值大於**所需容量下限**和**所需容量上限**，則**所需容量上限**會自動增加到新的所需容量值。您可視需要變更這些限制。如需詳細資訊，請參閱[設定 Auto Scaling 群組的擴展限制](asg-capacity-limits.md)。

1. 選擇 **Skip to review** (跳過以進行檢閱)。

1. 在 **Review** (檢閱) 頁面上，選擇 **Create Auto Scaling group** (建立 Auto Scaling 群組)。

## 使用屬性型執行個體類型選取項目建立混合執行個體群組 (AWS CLI)
<a name="attribute-based-instance-type-selection-aws-cli"></a>

**使用命令列建立混合執行個體群組**  
請使用以下其中一個命令：
+ [create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html) (AWS CLI)
+ [New-ASAutoScalingGroup](https://docs.aws.amazon.com/powershell/latest/reference/items/New-ASAutoScalingGroup.html) (AWS Tools for Windows PowerShell)

## 範例組態
<a name="attribute-based-instance-type-selection-example-configurations"></a>

若要使用 AWS CLI建立具有屬性型執行個體類型選取範圍的 Auto Scaling 群組，請使用以下 [create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html) 命令。

會指定以下執行個體屬性：
+ `VCpuCount` – 執行個體類型必須具有最少 4 個，最多 8 個的 vCPU。
+ `MemoryMiB` – 執行個體類型必須具有最少 16,384 MiB 的記憶體。
+ `CpuManufacturers` – 執行個體類型必須具有 Intel 製造的 CPU。

### JSON
<a name="attribute-based-instance-type-selection-aws-cli-json"></a>

```
aws autoscaling create-auto-scaling-group --cli-input-json {{file://~/config.json}}
```

以下是範例 `config.json` 檔案。

```
{
    "AutoScalingGroupName": "{{my-asg}}",
    "DesiredCapacityType": "units",
    "MixedInstancesPolicy": {
        "LaunchTemplate": {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "{{my-launch-template}}",
                "Version": "{{$Default}}"
            },
            "Overrides": [{
                "InstanceRequirements": {
                    "VCpuCount": {"Min": {{4}}, "Max": {{8}}},
                    "MemoryMiB": {"Min": {{16384}}},
                    "CpuManufacturers": ["intel"]
                }
            }]
        },
        "InstancesDistribution": {
            "OnDemandPercentageAboveBaseCapacity": {{50}},
            "SpotAllocationStrategy": "price-capacity-optimized"
        }
    },
    "MinSize": {{0}},
    "MaxSize": {{100}},
    "DesiredCapacity": {{4}},
    "DesiredCapacityType": "units",
    "VPCZoneIdentifier": "{{subnet-5ea0c127}},{{subnet-6194ea3b}},{{subnet-c934b782}}"
}
```

要將所需容量的值設定為 vCPU 的數量或記憶體容量，請在檔案中指定 `"DesiredCapacityType": "vcpu"` 或 `"DesiredCapacityType": "memory-mib"`。預設所需的容量類型為 `units`，它將所需容量的值設定為執行個體數量。

### YAML
<a name="attribute-based-instance-type-selection-aws-cli-yaml"></a>

或者，您可使用以下 [create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html) 命令建立 Auto Scaling 群組。這將參考 YAML 檔案作為 Auto Scaling 群組的唯一參數。

```
aws autoscaling create-auto-scaling-group --cli-input-yaml {{file://~/config.yaml}}
```

以下是範例 `config.yaml` 檔案。

```
---
AutoScalingGroupName: {{my-asg}}
DesiredCapacityType: units
MixedInstancesPolicy:
  LaunchTemplate:
    LaunchTemplateSpecification:
      LaunchTemplateName: {{my-launch-template}}
      Version: {{$Default}}
    Overrides:
    - InstanceRequirements:
         VCpuCount:
           Min: 2
           Max: 4
         MemoryMiB:
           Min: 2048
         CpuManufacturers:
         - intel
  InstancesDistribution:
    OnDemandPercentageAboveBaseCapacity: {{50}}
    SpotAllocationStrategy: price-capacity-optimized
MinSize: {{0}}
MaxSize: {{100}}
DesiredCapacity: {{4}}
DesiredCapacityType: units
VPCZoneIdentifier: {{subnet-5ea0c127}},{{subnet-6194ea3b}},{{subnet-c934b782}}
```

要將所需容量的值設定為 vCPU 的數量或記憶體容量，請在檔案中指定 `DesiredCapacityType: vcpu` 或 `DesiredCapacityType: memory-mib`。預設所需的容量類型為 `units`，它將所需容量的值設定為執行個體數量。

如需如何搭配屬性型執行個體類型選擇使用多個啟動範本的範例，請參閱 [使用多個啟動範本](ec2-auto-scaling-mixed-instances-groups-launch-template-overrides.md)。

## 預覽執行個體類型
<a name="attribute-based-instance-type-selection-preview"></a>

您可以預覽符合運算需求的執行個體類型，而無需啟動它們，並根據需要調整您的需求。在 Amazon EC2 Auto Scaling 主控台中建立 Auto Scaling 群組時，執行個體類型的預覽會顯示在 **Choose instance launch options** (選擇執行個體啟動選項) 頁面的 **Preview matching instance types** (預覽相符執行個體類型) 中。

或者，您可以使用 AWS CLI 或 SDK 進行 Amazon EC2 [GetInstanceTypesFromInstanceRequirements](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html) API 呼叫來預覽執行個體類型。傳遞請求中的 `InstanceRequirements` 參數，使用您會用於建立或更新 Auto Scaling 群組的相同格式。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[使用指定屬性預覽執行個體類型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html#ec2fleet-get-instance-types-from-instance-requirements)。

## 相關資源
<a name="attribute-based-instance-type-selection-related-resources"></a>

若要進一步了解屬性型執行個體類型選擇，請參閱 AWS 部落格上的 [ EC2 Auto Scaling 和 EC2 機群的屬性型執行個體類型選擇](https://aws.amazon.com/blogs/aws/new-attribute-based-instance-type-selection-for-ec2-auto-scaling-and-ec2-fleet/)。

使用 CloudFormation建立 Auto Scaling 群組時，您可以宣告屬性型執行個體類型選取範圍。如需詳細資訊，請參閱《*CloudFormation 使用者指南*》中的 [Auto scaling 範本程式碼片段](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-autoscaling.html#scenario-mixed-instances-group-template-examples)一節。