

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

# 教學課程：使用目標容量保留設定 EC2 機群啟動隨需執行個體
<a name="ec2-fleet-launch-on-demand-instances-using-targeted-capacity-reservations-walkthrough"></a>

本教學課程將逐步引導您完成必須執行的所有步驟，以便您的 EC2 Fleet 啟動隨需執行個體至 `targeted` 容量預留。

您將會了解到如何設定機群，以在啟動隨需執行個體時先使用 `targeted` 隨需容量預留。您也會了解到如何設定機群，以便機群在隨需目標容量總計超過可用的未使用容量預留數目時，使用指定的分配策略來選取要在其中啟動剩餘目標容量的執行個體集區。

**EC2 Fleet 組態**

本教學課程機群設定如下所示：
+ 目標容量：10 個隨需執行個體
+ 總計未使用的 `targeted` 容量保留：6 (小於機群的隨需目標容量：10 個隨需執行個體)
+ 容量保留集區數目：2 (`us-east-1a` 和 `us-east-1b`)
+ 每個集區的容量保留數目：3
+ 隨需分配策略：`lowest-price` (當未使用的容量保留數目小於隨需目標容量時，機群會根據隨需分配策略決定要用來啟動剩餘隨需容量的集區。)

  請注意，您也可以使用 `prioritized` 分配策略，而不使用 `lowest-price` 分配策略。

**若要按照 `targeted` 容量預留來啟動隨需執行個體，必須執行以下幾個步驟：**
+ [步驟 1：建立容量預留](#ec2-fleet-odcr-step1)
+ [步驟 2：建立容量預留資源群組](#ec2-fleet-odcr-step2)
+ [步驟 3：將容量預留新增至容量預留資源群組](#ec2-fleet-odcr-step3)
+ [(選用) 步驟 4：檢視資源群組中的容量預留](#ec2-fleet-odcr-step4)
+ [步驟 5：建立啟動範本，此範本指定容量預留以特定資源群組為目標](#ec2-fleet-odcr-step5)
+ [(選用) 步驟 6：描述啟動範本](#ec2-fleet-odcr-step6)
+ [步驟 7：建立 EC2 Fleet](#ec2-fleet-odcr-step7)
+ [(選用) 步驟 8：檢視剩餘未使用的容量預留數目](#ec2-fleet-odcr-step8)

## 步驟 1：建立容量預留
<a name="ec2-fleet-odcr-step1"></a>

使用 [create-capacity-reservation](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-capacity-reservation.html) 命令來建立容量預留，其中三個用於 `us-east-1a`，另外三個用於 `us-east-1b`。除了可用區域之外，容量預留的其他屬性皆相同。

**在 `us-east-1a` 中的 3 個容量預留**

```
aws ec2 create-capacity-reservation \
    --availability-zone us-east-1a \
    --instance-type c5.xlarge \
    --instance-platform Linux/UNIX \
    --instance-count 3 \
    --instance-match-criteria targeted
```

最後產生的容量預留 ID 範例

```
cr-1234567890abcdef1
```

**在 `us-east-1b` 中的 3 個容量預留**

```
aws ec2 create-capacity-reservation \
    --availability-zone us-east-1b \
    --instance-type c5.xlarge \
    --instance-platform Linux/UNIX \
    --instance-count 3 \
    --instance-match-criteria targeted
```

最後產生的容量預留 ID 範例

```
cr-54321abcdef567890
```

## 步驟 2：建立容量預留資源群組
<a name="ec2-fleet-odcr-step2"></a>

使用 `resource-groups` 服務和 [create-group](https://docs.aws.amazon.com/cli/latest/reference/resource-groups/create-group.html) 命令來建立容量預留資源群組。在此範例中，資源群組會命名為 `my-cr-group`。如需為何必須建立資源群組的相關資訊，請參閱 [使用容量保留功能來保留 EC2 機群中的隨需容量](ec2-fleet-on-demand-capacity-reservations.md)。

```
aws resource-groups create-group \
    --name my-cr-group \
    --configuration '{"Type":"AWS::EC2::CapacityReservationPool"}' '{"Type":"AWS::ResourceGroups::Generic", "Parameters": [{"Name": "allowed-resource-types", "Values": ["AWS::EC2::CapacityReservation"]}]}'
```

## 步驟 3：將容量預留新增至容量預留資源群組
<a name="ec2-fleet-odcr-step3"></a>

使用 `resource-groups` 服務和 [group-resources](https://docs.aws.amazon.com/cli/latest/reference/resource-groups/group-resources.html) 命令，將您在步驟 1 中建立的容量預留新增至容量預留資源群組。請注意，您必須參考隨需容量預留的 ARN。

```
aws resource-groups group-resources \
    --group my-cr-group \
    --resource-arns \
      arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1 \
      arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890
```

範例輸出

```
{
   "Failed": [], 
   "Succeeded": [ 
   "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1", 
   "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890" 
   ] 
}
```

## (選用) 步驟 4：檢視資源群組中的容量預留
<a name="ec2-fleet-odcr-step4"></a>

使用 `resource-groups` 服務和 [list-group-resources](https://docs.aws.amazon.com/cli/latest/reference/resource-groups/list-group-resources.html) 命令可選擇性地描述資源群組以檢視其容量預留。

```
aws resource-groups list-group-resources --group my-cr-group
```

範例輸出

```
{
    "ResourceIdentifiers": [
        {
            "ResourceType": "AWS::EC2::CapacityReservation",
            "ResourceArn": "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1"
        },
        {
            "ResourceType": "AWS::EC2::CapacityReservation",
            "ResourceArn": "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890"
        }
    ]
}
```

## 步驟 5：建立啟動範本，此範本指定容量預留以特定資源群組為目標
<a name="ec2-fleet-odcr-step5"></a>

使用 [create-launch-template](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-launch-template.html) 命令來建立啟動範本，使用此範本來指定要使用的容量預留。在此範例中，機群會使用新增至資源群組的 `targeted` 容量預留。因此，啟動範本資料會指定容量預留以特定資源群組為目標。在此範例中，啟動範本會命名為 `my-launch-template`。

```
aws ec2 create-launch-template \
    --launch-template-name my-launch-template \
    --launch-template-data \
        '{"ImageId": "ami-0123456789example",
          "CapacityReservationSpecification": 
            {"CapacityReservationTarget": 
                { "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-cr-group" }
            }
        }'
```

## (選用) 步驟 6：描述啟動範本
<a name="ec2-fleet-odcr-step6"></a>

使用 [describe-launch-template-versions](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-launch-template-versions.html) 命令可選擇性地描述啟動範本，以檢視其組態。

```
aws ec2 describe-launch-template-versions --launch-template-name my-launch-template
```

範例輸出

```
{
    "LaunchTemplateVersions": [
        {
            "LaunchTemplateId": "lt-01234567890example",
            "LaunchTemplateName": "my-launch-template",
            "VersionNumber": 1,
            "CreateTime": "2021-01-19T20:50:19.000Z",
            "CreatedBy": "arn:aws:iam::123456789012:user/Admin",
            "DefaultVersion": true,
            "LaunchTemplateData": {
                "ImageId": "ami-0947d2ba12ee1ff75",
                "CapacityReservationSpecification": {
                    "CapacityReservationTarget": {
                        "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-cr-group"
                    }
                }
            }
        }
    ]
}
```

## 步驟 7：建立 EC2 Fleet
<a name="ec2-fleet-odcr-step7"></a>

建立 EC2 Fleet，該機群會指定將啟動之執行個體的組態資訊。下列 EC2 Fleet 組態僅顯示此範例的相關組態。啟動範本 `my-launch-template` 是您在步驟 5 中建立的啟動範本。有兩個執行個體集區，每個集區內的執行個體類型相同 (`c5.xlarge`)，但使用不同的可用區域 (`us-east-1a` 和 `us-east-1b`)。執行個體集區的價格相同，因為定價是根據區域界定，而不是根據可用區域界定的。總目標容量為 10，預設目標容量類型為 `on-demand`。隨需分配策略為 `lowest-price`。容量預留的使用策略為 `use-capacity-reservations-first`。

**注意**  
機群類型必須為 `instant`。其他機群類型不支援 `use-capacity-reservations-first`。

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-launch-template",
                "Version": "1"
            },
            "Overrides": [
               {
                   "InstanceType": "c5.xlarge",
                   "AvailabilityZone": "us-east-1a"
               },
               {
                    "InstanceType": "c5.xlarge",
                    "AvailabilityZone": "us-east-1b"
               }
            ]
        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 10,
        "DefaultTargetCapacityType": "on-demand"
    },
    "OnDemandOptions": {
        "AllocationStrategy": "lowest-price",
        "CapacityReservationOptions": {
             "UsageStrategy": "use-capacity-reservations-first"
         }
    },
    "Type": "instant"
}
```

使用上述組態建立 `instant` 機群之後，會啟動以下 10 個執行個體以符合目標容量：
+ 會先使用容量保留來啟動 6 個隨需執行個體，如下所示：
  + 3 個隨需執行個體已在 `us-east-1a` 中啟動至 3 個 `c5.xlarge` `targeted` 容量保留
  + 3 個隨需執行個體已在 `c5.xlarge` 中啟動至 3 個 `targeted` `us-east-1b` 容量保留
+ 為了滿足目標容量，會根據隨需分配策略 (在本例中為 `lowest-price`) 使用一般隨需容量來啟動 4 個額外的隨需執行個體。不過，由於集區的價格相同 (因為價格是按區域而非可用區域計價)，因此機群會使用任一個集區來啟動剩餘的 4 個隨需執行個體。

## (選用) 步驟 8：檢視剩餘未使用的容量預留數目
<a name="ec2-fleet-odcr-step8"></a>

啟動機群後，您也可以執行 [describe-capacity-reservations](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html)，以查看還剩餘多少個未使用的容量預留。在此範例中，您應該會看到下列回應，其中顯示所有集區中的所有容量保留都已使用。

```
{ "CapacityReservationId":  "cr-111",
     "InstanceType":  "c5.xlarge",  
     "AvailableInstanceCount":  0
}

 { "CapacityReservationId":  "cr-222",
     "InstanceType":  "c5.xlarge", 
     "AvailableInstanceCount":  0
}
```