インスタンスフリートでキャパシティ予約を使用する
キャパシティ予約オプションを使用してオンデマンドインスタンスフリートを起動するには、キャパシティ予約オプションを使用するために必要な追加のサービスロールのアクセス許可をアタッチします。キャパシティ予約オプションはオンデマンド配分戦略と一緒に使用する必要があるため、配分戦略に必要なアクセス許可をサービスロールと管理ポリシーに含める必要もあります。詳細については、「配分戦略のアクセス許可」を参照してください。
Amazon EMR は、オープンキャパシティ予約とターゲットキャパシティ予約の両方をサポートしています。以下のトピックでは、オンデマンドキャパシティ予約を使用してインスタンスフリートを起動するために RunJobFlow
アクションまたは create-cluster
コマンドとともに使用できるインスタンスフリート設定について説明します。
ベストエフォートベースでオープンキャパシティ予約を使用する
クラスターのオンデマンドインスタンスが、アカウントで使用可能なオープンキャパシティ予約の属性 (インスタンスタイプ、プラットフォーム、テナンシー、アベイラビリティーゾーン) と一致する場合、キャパシティ予約は自動的に適用されます。ただし、キャパシティ予約が使用されるかどうかは保証されません。クラスターをプロビジョニングするために、Amazon EMR は起動リクエストで指定されたすべてのインスタンスプールを評価し、リクエストされたすべてのコアノードを起動するのに十分な容量を持つ最低料金のインスタンスプールを使用します。インスタンスプールに一致する使用可能なオープンキャパシティ予約が自動的に適用されます。利用可能なオープンキャパシティ予約がインスタンスプールと一致しない場合、それらは未使用のままになります。
コアノードがプロビジョニングされると、アベイラビリティーゾーンが選択され、修正されます。Amazon EMR は、すべてのタスクノードがプロビジョニングされるまで、選択したアベイラビリティーゾーン内の最低料金のものからインスタンスプールにタスクノードをプロビジョニングします。インスタンスプールに一致する使用可能なオープンキャパシティ予約が自動的に適用されます。
ベストエフォートベースでオープンキャパシティ予約を使用するための Amazon EMR 容量の割り当てロジックのユースケースを次に示します。
例 1: 起動リクエストで最低料金のインスタンスプールに、使用可能なオープンキャパシティ予約がある
この場合、Amazon EMR はオンデマンドインスタンスを使用して最低料金のインスタンスプールで容量を起動します。そのインスタンスプール内の使用可能なオープンキャパシティ予約が自動的に使用されます。
On-Demand Strategy | lowest-price | ||
Requested Capacity | 100 | ||
Instance Type | c5.xlarge | m5.xlarge | r5.xlarge |
Available Open capacity reservations | 150 | 100 | 100 |
On-Demand Price | $ | $$ | $$$ |
プロビジョニングされたインスタンス | 100 | - | - |
---|---|---|---|
使用されたオープンキャパシティ予約 | 100 | - | - |
使用可能なオープンキャパシティ予約 | 50 | 100 | 100 |
インスタンスフリートの起動後、describe-capacity-reservations
を実行して、未使用のままのキャパシティ予約の数を確認できます。
例 2: 起動リクエストで最低料金のインスタンスプールに、使用可能なオープンキャパシティ予約がない
この場合、Amazon EMR はオンデマンドインスタンスを使用して最低料金のインスタンスプールで容量を起動します。ただし、オープンキャパシティ予約は未使用のままです。
On-Demand Strategy | lowest-price | ||
Requested Capacity | 100 | ||
Instance Type | c5.xlarge | m5.xlarge | r5.xlarge |
使用可能なオープンキャパシティ予約 |
- | - | 100 |
On-Demand Price | $ | $$ | $$$ |
プロビジョニングされたインスタンス | 100 | - | - |
---|---|---|---|
使用されたオープンキャパシティ予約 | - | - | - |
使用可能なオープンキャパシティ予約 | - | - | 100 |
ベストエフォートベースでオープンキャパシティ予約を使用するようにインスタンスフリートを設定する
RunJobFlow
アクションを使用して、インスタンスフリートベースのクラスターを作成する場合、オンデマンド配分戦略を lowest-price
に設定し、キャパシティ予約オプションの CapacityReservationPreference
を open
に設定します。または、このフィールドを空白のままにすると、Amazon EMR はオンデマンドインスタンスのキャパシティ予約設定をデフォルトの open
に設定します。
"LaunchSpecifications": {"OnDemandSpecification": { "AllocationStrategy": "lowest-price", "CapacityReservationOptions": { "CapacityReservationPreference": "open" } } }
また、Amazon EMR CLI により、オープンキャパシティ予約を使用してインスタンスフリートベースのクラスターを作成することもできます。
aws emr create-cluster \ --name 'open-ODCR-cluster' \ --release-label emr-5.30.0 \ --service-role EMR_DefaultRole \ --ec2-attributes SubnetId=subnet-22XXXX01,InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=c4.xlarge}'] \ InstanceFleetType=CORE,TargetOnDemandCapacity=100,InstanceTypeConfigs=['{InstanceType=c5.xlarge},{InstanceType=m5.xlarge},{InstanceType=r5.xlarge}'],\ LaunchSpecifications={OnDemandSpecification='{AllocationStrategy=lowest-price,CapacityReservationOptions={CapacityReservationPreference=open}}'}
各パラメータの意味は次のとおりです。
-
open-ODCR-cluster
は、オープンキャパシティ予約を使用するクラスターの名前に置き換えられます。 -
subnet-22XXXX01
は、サブネット ID に置き換えられます。
オープンキャパシティ予約を最初に使用する
Amazon EMR クラスターのプロビジョニング中に、最低料金の配分戦略をオーバーライドし、使用可能なオープンキャパシティ予約を最初に使用することを優先するように選択できます。この場合、Amazon EMR は起動リクエストで指定された、キャパシティ予約を使用するすべてのインスタンスプールを評価し、リクエストされたすべてのコアノードを起動するのに十分な容量を持つ最低料金のインスタンスプールを使用します。キャパシティ予約を使用するインスタンスプールに、リクエストされたコアノードのための十分な容量がない場合、Amazon EMR は前のトピックで説明したベストエフォートのケースにフォールバックします。つまり、Amazon EMR は起動リクエストで指定されたすべてのインスタンスプールを評価し直し、リクエストされたすべてのコアノードを起動するのに十分な容量を持つ最低料金のインスタンスプールを使用します。インスタンスプールに一致する使用可能なオープンキャパシティ予約が自動的に適用されます。利用可能なオープンキャパシティ予約がインスタンスプールと一致しない場合、それらは未使用のままになります。
コアノードがプロビジョニングされると、アベイラビリティーゾーンが選択され、修正されます。Amazon EMR は、すべてのタスクノードがプロビジョニングされるまで、選択したアベイラビリティーゾーン内の最低料金のものから、キャパシティ予約を使用するインスタンスプールにタスクノードをプロビジョニングします。Amazon EMR は、選択したアベイラビリティーゾーン内の各インスタンスプールで使用可能なオープンキャパシティ予約を最初に使用し、必要な場合のみ、最低料金戦略を使用して残りのタスクノードをプロビジョニングします。
オープンキャパシティ予約を最初に使用するための Amazon EMR 容量の割り当てロジックのユースケースを次に示します。
例 1: 起動リクエストで使用可能なオープンキャパシティ予約があるインスタンスプールに、コアノードのための十分な容量がある
この場合、Amazon EMR は、インスタンスプールの料金に関係なく、使用可能なオープンキャパシティ予約があるインスタンスプールでキャパシティを起動します。その結果、すべてのコアノードがプロビジョニングされるまで、可能な限りオープンキャパシティ予約が使用されます。
On-Demand Strategy | lowest-price | ||
Requested Capacity | 100 | ||
Usage Strategy | use-capacity-reservations-first | ||
Instance Type | c5.xlarge | m5.xlarge | r5.xlarge |
Available Open capacity reservations | - | - | 150 |
On-Demand Price | $ | $$ | $$$ |
プロビジョニングされたインスタンス | - | - | 100 |
---|---|---|---|
使用されたオープンキャパシティ予約 | - | - | 100 |
使用可能なオープンキャパシティ予約 | - | - | 50 |
例 2: 起動リクエストで使用可能なオープンキャパシティ予約があるインスタンスプールに、コアノードのための十分な容量がない
この場合、Amazon EMR は、最低料金戦略とキャパシティ予約を使用するベストエフォートを使用して、起動コアノードにフォールバックします。
On-Demand Strategy | lowest-price | ||
Requested Capacity | 100 | ||
Usage Strategy | use-capacity-reservations-first | ||
Instance Type | c5.xlarge | m5.xlarge | r5.xlarge |
Available Open capacity reservations | 10 | 50 | 50 |
On-Demand Price | $ | $$ | $$$ |
プロビジョニングされたインスタンス | 100 | - | - |
---|---|---|---|
使用されたオープンキャパシティ予約 | 10 | - | - |
使用可能なオープンキャパシティ予約 | - | 50 | 50 |
インスタンスフリートの起動後、describe-capacity-reservations
を実行して、未使用のままのキャパシティ予約の数を確認できます。
オープンキャパシティ予約を最初に使用するようにインスタンスフリートを設定する
RunJobFlow
アクションを使用して、インスタンスフリートベースのクラスターを作成する場合、オンデマンド配分戦略を lowest-price
に設定し、CapacityReservationOptions
の UsageStrategy
を use-capacity-reservations-first
に設定します。
"LaunchSpecifications": {"OnDemandSpecification": { "AllocationStrategy": "lowest-price", "CapacityReservationOptions": { "UsageStrategy": "use-capacity-reservations-first" } } }
また、Amazon EMR CLI により、キャパシティ予約を最初に使用してインスタンスフリートベースのクラスターを作成することもできます。
aws emr create-cluster \ --name 'use-CR-first-cluster' \ --release-label emr-5.30.0 \ --service-role EMR_DefaultRole \ --ec2-attributes SubnetId=subnet-22XXXX01,InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets \ InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=c4.xlarge}'] \ InstanceFleetType=CORE,TargetOnDemandCapacity=100,InstanceTypeConfigs=['{InstanceType=c5.xlarge},{InstanceType=m5.xlarge},{InstanceType=r5.xlarge}'],\ LaunchSpecifications={OnDemandSpecification='{AllocationStrategy=lowest-price,CapacityReservationOptions={UsageStrategy=use-capacity-reservations-first}}'}
各パラメータの意味は次のとおりです。
-
use-CR-first-cluster
は、オープンキャパシティ予約を使用するクラスターの名前に置き換えられます。 -
subnet-22XXXX01
は、サブネット ID に置き換えられます。
ターゲットキャパシティ予約を最初に使用する
Amazon EMR クラスターをプロビジョニングするときに、最低料金の配分戦略をオーバーライドし、使用可能なターゲットキャパシティ予約を最初に使用することを優先するように選択できます。この場合、Amazon EMR は起動リクエストで指定された、ターゲットキャパシティ予約を使用するすべてのインスタンスプールを評価し、リクエストされたすべてのコアノードを起動するのに十分な容量を持つ最低料金のインスタンスプールを選択します。ターゲットキャパシティ予約を使用するインスタンスプールに、コアノードのための十分な容量がない場合、Amazon EMR は前のトピックで説明したベストエフォートのケースにフォールバックします。つまり、Amazon EMR は起動リクエストで指定されたすべてのインスタンスプールを評価し直し、リクエストされたすべてのコアノードを起動するのに十分な容量を持つ最低料金のインスタンスプールを選択します。インスタンスプールに一致する使用可能なオープンキャパシティ予約が自動的に適用されます。ただし、ターゲットキャパシティ予約は未使用のままです。
コアノードがプロビジョニングされると、アベイラビリティーゾーンが選択され、修正されます。Amazon EMR は、すべてのタスクノードがプロビジョニングされるまで、選択したアベイラビリティーゾーン内の最低料金のものから、ターゲットキャパシティ予約を使用するインスタンスプールにタスクノードをプロビジョニングします。Amazon EMR は、選択したアベイラビリティーゾーン内の各インスタンスプールで使用可能なターゲットキャパシティ予約を最初に使用しようとします。次に、必要な場合にのみ、Amazon EMR は最低料金戦略を使用して、残りのタスクノードをプロビジョニングします。
ターゲットキャパシティ予約を最初に使用するための Amazon EMR 容量の割り当てロジックのユースケースを次に示します。
例 1: 起動リクエストで使用可能なターゲットキャパシティ予約があるインスタンスプールに、コアノードのための十分な容量がある
この場合、Amazon EMR は、インスタンスプールの料金に関係なく、使用可能なターゲットキャパシティ予約があるインスタンスプールでキャパシティを起動します。その結果、すべてのコアノードがプロビジョニングされるまで、可能な限りターゲットキャパシティ予約が使用されます。
On-Demand Strategy | lowest-price | ||
Usage Strategy | use-capacity-reservations-first | ||
Requested Capacity | 100 | ||
Instance Type | c5.xlarge | m5.xlarge | r5.xlarge |
Available targeted capacity reservations | - | - | 150 |
On-Demand Price | $ | $$ | $$$ |
プロビジョニングされたインスタンス | - | - | 100 |
---|---|---|---|
使用されたターゲットキャパシティ予約 | - | - | 100 |
使用可能なターゲットキャパシティ予約 | - | - | 50 |
例 2: 起動リクエストで使用可能なターゲットキャパシティ予約があるインスタンスプールに、コアノードのための十分な容量がない
On-Demand Strategy | lowest-price | ||
Requested Capacity | 100 | ||
Usage Strategy | use-capacity-reservations-first | ||
Instance Type | c5.xlarge | m5.xlarge | r5.xlarge |
Available targeted capacity reservations | 10 | 50 | 50 |
On-Demand Price | $ | $$ | $$$ |
プロビジョニングされたインスタンス | 100 | - | - |
---|---|---|---|
使用されたターゲットキャパシティ予約 | - | - | - |
使用可能なターゲットキャパシティ予約 | 10 | 50 | 50 |
インスタンスフリートの起動後、describe-capacity-reservations
を実行して、未使用のままのキャパシティ予約の数を確認できます。
ターゲットキャパシティ予約を最初に使用するようにインスタンスフリートを設定する
RunJobFlow
アクションを使用して、インスタンスフリートベースのクラスターを作成する場合、オンデマンド配分戦略を lowest-price
に、CapacityReservationOptions
の UsageStrategy
を use-capacity-reservations-first
に、そして CapacityReservationOptions
のCapacityReservationResourceGroupArn
を <your resource group
ARN>
に設定します。詳細については、「Linux インスタンス用 Amazon EC2 ユーザーガイド」の「キャパシティの予約の操作」を参照してください。
"LaunchSpecifications": {"OnDemandSpecification": { "AllocationStrategy": "lowest-price", "CapacityReservationOptions": { "UsageStrategy": "use-capacity-reservations-first", "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:sa-east-1:123456789012:group/MyCRGroup" } } }
arn:aws:resource-groups:sa-east-1:123456789012:group/MyCRGroup
は、リソースグループ ARN に置き換えられます。
また、Amazon EMR CLI により、ターゲットキャパシティ予約を使用してインスタンスフリートベースのクラスターを作成することもできます。
aws emr create-cluster \ --name 'targeted-CR-cluster' \ --release-label emr-5.30.0 \ --service-role EMR_DefaultRole \ --ec2-attributes SubnetId=subnet-22XXXX01,InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=c4.xlarge}'] \ InstanceFleetType=CORE,TargetOnDemandCapacity=100,\ InstanceTypeConfigs=['{InstanceType=c5.xlarge},{InstanceType=m5.xlarge},{InstanceType=r5.xlarge}'],\ LaunchSpecifications={OnDemandSpecification='{AllocationStrategy=lowest-price,CapacityReservationOptions={UsageStrategy=use-capacity-reservations-first,CapacityReservationResourceGroupArn=arn:aws:resource-groups:sa-east-1:123456789012:group/MyCRGroup}}'}
各パラメータの意味は次のとおりです。
-
targeted-CR-cluster
は、ターゲットキャパシティ予約を使用するクラスターの名前に置き換えられます。 -
subnet-22XXXX01
は、サブネット ID に置き換えられます。 -
arn:aws:resource-groups:sa-east-1:123456789012:group/MyCRGroup
は、リソースグループ ARN に置き換えられます。
使用可能なオープンキャパシティ予約を使用しないようにする
Amazon EMR クラスターの起動時にオープンキャパシティの予約のいずれかが予期せず使用されないようにするには、オンデマンド配分戦略を lowest-price
に、CapacityReservationOptions
の CapacityReservationPreference
をnone
に設定します。そうしないと、Amazon EMR はオンデマンドインスタンスのキャパシティ予約設定をデフォルトの open
に設定して、使用可能なオープンキャパシティ予約をベストエフォートベースで使用しようとします。
"LaunchSpecifications": {"OnDemandSpecification": { "AllocationStrategy": "lowest-price", "CapacityReservationOptions": { "CapacityReservationPreference": "none" } } }
また、Amazon EMR CLI により、オープンキャパシティ予約を使用しないでインスタンスフリートベースのクラスターを作成することもできます。
aws emr create-cluster \ --name 'none-CR-cluster' \ --release-label emr-5.30.0 \ --service-role EMR_DefaultRole \ --ec2-attributes SubnetId=subnet-22XXXX01,InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets \ InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=c4.xlarge}'] \ InstanceFleetType=CORE,TargetOnDemandCapacity=100,InstanceTypeConfigs=['{InstanceType=c5.xlarge},{InstanceType=m5.xlarge},{InstanceType=r5.xlarge}'],\ LaunchSpecifications={OnDemandSpecification='{AllocationStrategy=lowest-price,CapacityReservationOptions={CapacityReservationPreference=none}}'}
各パラメータの意味は次のとおりです。
-
none-CR-cluster
は、オープンキャパシティ予約を使用していないクラスターの名前に置き換えられます。 -
subnet-22XXXX01
は、サブネット ID に置き換えられます。
キャパシティ予約を使用するシナリオ
次のシナリオでキャパシティ予約を使用すると利点があります。
シナリオ 1: キャパシティ予約を使用して長時間稼働するクラスターをローテーションする
長時間稼働するクラスターをローテーションする場合、プロビジョニングする新しいインスタンスのインスタンスタイプとアベイラビリティーゾーンに厳格な要件がある場合があります。キャパシティ予約では、キャパシティ保証を使用して、中断することなくクラスターのローテーションを完了できます。
シナリオ 2: キャパシティ予約を使用して存続期間の短い連続したクラスターをプロビジョニングする
また、キャパシティ予約を使用して、個々のワークロードに対して存続期間の短い連続するクラスターのグループをプロビジョニングして、あるクラスターを終了するときに次のクラスターがキャパシティ予約を使用できるようにすることもできます。ターゲットキャパシティ予約を使用して、目的のクラスターだけがキャパシティ予約を使用するようにできます。