

# チュートリアル: ターゲットのキャパシティ予約を使用してオンデマンドインスタンスを起動するように EC2 フリートを設定する
<a name="ec2-fleet-launch-on-demand-instances-using-targeted-capacity-reservations-walkthrough"></a>

このチュートリアルでは実行するべきステップを段階的に解説しています。それにより、EC2 フリートがオンデマンドインスタンスを`targeted`キャパシティー予約で起動できるようにします。

オンデマンドインスタンスの起動時に、最初に`targeted`オンデマンドキャパシティー予約を使用するようにフリートを設定する方法を学習します。また、オンデマンドターゲット容量の合計が使用可能な未使用のキャパシティ予約数を超えた場合、フリートは指定された割り当て戦略を使用して、残りのターゲット容量を起動するインスタンスプールを選択するようにフリートを設定する方法についても学習します。

**EC2 フリートの設定**

このチュートリアルでは、フリートは次のように設定されます。
+ ターゲット容量:10 オンデマンドインスタンス
+ 未使用の合計`targeted`キャパシティー予約:6 (フリートの目標オンデマンド容量である 10 オンデマンドインスタンスを下回っています)
+ キャパシティ予約のプールの数:2 (`us-east-1a`および`us-east-1b`)
+ プールあたりのキャパシティ予約数:3
+ オンデマンド割り当て戦略：`lowest-price`(未使用キャパシティーの予約の数が目標オンデマンド容量より少ない場合、フリートは、オンデマンド配分戦略に基づいて、残りのオンデマンド容量を起動するプールを決定します)。

  また、`lowest-price`割り当て戦略の代わりに`prioritized`割り当て戦略を使用することもできます。

**`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 フリートを作成する](#ec2-fleet-odcr-step7)
+ [(オプション) ステップ 8: 未使用のキャパシティ予約の残りの数を表示する](#ec2-fleet-odcr-step8)

## ステップ 1: キャパシティー予約を作成する
<a name="ec2-fleet-odcr-step1"></a>

[キャパシティー予約の作成](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-capacity-reservation.html)コマンドを使用してキャパシティ予約を作成します。3 つは`us-east-1a`の目的に、別の3つは`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`サービスを使用する、および[グループを作成する](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`サービス、および[グループリソース](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`サービス、および[グループリソースを表示する](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>

[起動テンプレートを作成する](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 フリートを作成する
<a name="ec2-fleet-odcr-step7"></a>

起動するインスタンスの設定情報を指定する EC2 フリートを作成します。以下の EC2 フリート設定は、この例に関連する設定のみを示しています。起動テンプレート`my-launch-template`は、ステップ 5 で作成した起動テンプレートです。2 つのインスタンスプールがあり、それぞれ同じインスタンスタイプ (`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 つのオンデマンドインスタンスが、`us-east-1b`での 3 つの`c5.xlarge``targeted`キャパシティー予約で起動します。
+ ターゲット容量を満たすために、4 つの追加のオンデマンドインスタンスは、オンデマンド配分戦略 (この例では`lowest-price`) に従って通常のオンデマンド容量で起動します。ただし、プールの価格は同じであるため (価格はアベイラビリティーゾーンごとではなく、リージョンごとであるため)、フリートは残りの 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
}
```