

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon EMR クラスターのユニフォームインスタンスグループを設定する
<a name="emr-uniform-instance-group"></a>

インスタンスグループの構成では、各ノードタイプ (マスター、コア、またはタスク) は、同じインスタンスタイプで構成されており、オンデマンドまたはスポットインスタンスで、同じ購入オプションが使用されます。これらの設定は、インスタンスグループを作成するときに指定します。この価格を後で変更することはできません。ただし、同じタイプと同じ購入オプションのインスタンスを、コアインスタンスグループおよびタスクインスタンスグループに追加できます。インスタンスを削除することもできます。

クラスターのオンデマンドインスタンスが、アカウントで使用可能なオープンキャパシティ予約の属性 (インスタンスタイプ、プラットフォーム、テナンシー、アベイラビリティーゾーン) と一致する場合、キャパシティ予約は自動的に適用されます。プライマリノード、コアノード、およびタスクノードには、オープンキャパシティ予約を使用できます。ただし、インスタンスグループを使用してクラスターをプロビジョニングする場合、ターゲットキャパシティ予約を使用したり、一致する属性を持つオープンキャパシティ予約でインスタンスが起動しないようにしたりすることはできません。ターゲットキャパシティ予約を使用するか、またはインスタンスがオープンキャパシティ予約で起動しないようにする場合、代わりにインスタンスフリートを使用します。詳細については、「[Amazon EMR でインスタンスフリートにキャパシティ予約を使用する](on-demand-capacity-reservations.md)」を参照してください。

クラスターの作成後に異なるインスタンスタイプを追加するには、タスクインスタンスグループを追加することができます。インスタンスグループごとに、異なるインスタンスタイプと購入オプションを選択できます。詳細については、「[Amazon EMR クラスタースケーリングを使用してワークロードの変化に適応する](emr-scale-on-demand.md)」を参照してください。

インスタンスを起動するときに、オンデマンドインスタンスのキャパシティ予約設定がデフォルトの `open` に設定されるため、一致する属性 (インスタンスタイプ、プラットフォーム、アベイラビリティーゾーン) を持つすべてのオープンキャパシティ予約で実行できます。オンデマンドキャパシティ予約の共有については、「[Amazon EMR でインスタンスフリートにキャパシティ予約を使用する](on-demand-capacity-reservations.md)」を参照してください 。

このセクションでは、ユニフォームインスタンスグループでクラスターを作成する手順を説明します 手動でのインスタンスグループの追加または削除、あるいは移動スケーリングによって既存のインスタンスグループを変更する詳細については、「 [Amazon EMR クラスターの管理](emr-manage.md)」を参照してください。

## コンソールを使用してユニフォームインスタンスグループを設定する
<a name="emr-uniform-instance-group-console"></a>

------
#### [ Console ]

**新しいコンソールを使用してインスタンスグループでクラスターを作成するには**

1. にサインインし AWS マネジメントコンソール、[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) で Amazon EMR コンソールを開きます。

1. 左側のナビゲーションペインの **[EMR on EC2]** で、**[クラスター]** を選択し、**[クラスターの作成]** を選択します。

1. **[クラスターの設定]** で **[インスタンスグループ]** を選択します。

1. **[ノードグループ]** には、ノードグループのタイプごとにセクションがあります。プライマリノードグループで 3 つのプライマリノードを作成する場合は、**[複数のプライマリノードを使用]** チェックボックスを選択します。スポット購入を使用する場合は、**[スポット購入オプションを使用]** チェックボックスを選択します。

1. プライマリノードグループとコアノードグループでは、**[インスタンスタイプの追加]** を選択し、最大 5 つのインスタンスタイプを選択します。タスクグループでは、**[インスタンスタイプの追加]** を選択し、最大 15 個のインスタンスタイプを選択します。Amazon EMR は、クラスターを起動するときに、これらのインスタンスタイプの任意の組み合わせをプロビジョニングする場合があります。

1. 各ノードグループタイプで、各インスタンスの横にある **[アクション]** ドロップダウンメニューを選択し、これらの設定を変更します。  
**EBS ボリュームの追加**  
Amazon EMR がプロビジョニングした後に、インスタンスタイプにアタッチする EBS ボリュームを指定します。  
**最大スポット価格の編集**  
フリートのインスタンスタイプごとに、最大スポット料金を指定します。この料金は、オンデマンド料金のパーセンテージまたは特定の金額として設定できます。アベイラビリティーゾーンの現在のスポット料金が最大スポット料金を下回っている場合、Amazon EMR はスポットインスタンスをプロビジョニングします。お客様にご負担いただくのはスポット料金であり、必ずしも最大スポット料金ではありません。

1. オプションで、**[ノード設定]** を展開して JSON 設定を入力するか、Amazon S3 から JSON をロードします。

1. クラスターに適用するその他のオプションを選択します。

1. クラスターを起動するには、**[クラスターの作成]** を選択します。

------

## を使用して AWS CLI ユニフォームインスタンスグループを持つクラスターを作成する
<a name="emr-uniform-instance-group-cli"></a>

 AWS CLIを使用してクラスターのインスタンスグループ設定を指定するには、`create-cluster` コマンドと共に `--instance-groups` パラメータを使用します。インスタンスグループに `BidPrice` 引数を指定しない限り、Amazon EMR はオンデマンドインスタンスオプションを想定します。オンデマンドインスタンスとさまざまなクラスターオプションで、ユニフォームインスタンスグループを起動する `create-cluster` コマンドの例では、コマンドラインに `aws emr create-cluster help ` と入力するか、「*AWS CLI コマンドリファレンス*」の「[create-cluster](https://docs.aws.amazon.com/cli/latest/reference/emr/create-cluster.html)」を参照してください。

を使用して AWS CLI 、スポットインスタンスを使用するクラスターにユニフォームインスタンスグループを作成できます。提供されるスポット価格はアベイラビリティーゾーンによって異なります。CLI または API を使用する場合、`AvailabilityZone` 引数 (EC2-classic ネットワークを使用している場合)、または `--ec2-attributes ` パラメータの `SubnetID ` 引数でアベイラビリティーゾーンを指定することができます。選択するアベイラビリティーゾーンまたはサブネットはクラスターに適用されるため、すべてのインスタンスグループに使用されます。アベイラビリティーゾーンまたはサブネットを明示的に指定しない場合、Amazon EMR はクラスターの起動時に最低のスポット料金のアベイラビリティーゾーンを選択します。

次の例は、すべてがスポットインスタンスを使用しているプライマリ、コア、および 2 つのタスクインスタンスグループを作成する、`create-cluster` コマンドを示しています。{{myKey}} を Amazon EC2 キーペアの名前に置き換えます。

**注記**  
読みやすくするために、Linux 行連続文字 (\\) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

```
aws emr create-cluster --name "{{MySpotCluster}}" \
  --release-label {{emr-7.13.0}} \
  --use-default-roles \
  --ec2-attributes KeyName={{myKey}} \
  --instance-groups \
    InstanceGroupType={{MASTER}},InstanceType={{m5.xlarge}},InstanceCount={{1}},BidPrice={{0.25}} \
    InstanceGroupType={{CORE}},InstanceType={{m5.xlarge}},InstanceCount={{2}},BidPrice={{0.03}} \
    InstanceGroupType={{TASK}},InstanceType={{m5.xlarge}},InstanceCount={{4}},BidPrice={{0.03}} \
    InstanceGroupType={{TASK}},InstanceType={{m5.xlarge}},InstanceCount={{2}},BidPrice={{0.04}}
```

CLI を使用して、インスタンスグループ内のインスタンスタイプごとに一意のカスタム AMI を指定するユニフォームインスタンスグループクラスターを作成できます。これにより、同じインスタンスグループ内で異なるインスタンスアーキテクチャを使用できます。各インスタンスタイプは、アーキテクチャが一致するカスタム AMI を使用する必要があります。例えば、m5.xlarge インスタンスタイプは x86\_64 アーキテクチャのカスタム AMI を使用して設定し、m6g.xlarge インスタンスタイプは対応する `AWS AARCH64` (ARM) アーキテクチャのカスタム AMI を使用して設定します。

次の例は、2 つのインスタンスタイプで作成され、それぞれ独自のカスタム AMI を持つユニフォームインスタンスグループクラスターを示しています。カスタム AMI は、クラスターーレベルではなく、インスタンスタイプレベルでのみ指定されることに注意してください。これは、インスタンスタイプ AMI とクラスターレベルの AMI の間の競合を回避するためです。そうしないと、クラスターの起動が失敗する原因となります。

```
aws emr create-cluster
  --release-label emr-5.30.0 \
  --service-role EMR_DefaultRole \
  --ec2-attributes SubnetId=subnet-22XXXX01,InstanceProfile=EMR_EC2_DefaultRole \
  --instance-groups \
    InstanceGroupType=MASTER,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-123456 \
    InstanceGroupType=CORE,InstanceType=m6g.xlarge,InstanceCount=1,CustomAmiId=ami-234567
```

実行中のクラスターに追加するインスタンスグループに複数のカスタム AMI を追加できます。次の例に示すように、`CustomAmiId` 引数を `add-instance-groups` コマンドとともに使用できます。

```
aws emr add-instance-groups --cluster-id j-123456 \
  --instance-groups \
    InstanceGroupType=Task,InstanceType=m5.xlarge,InstanceCount=1,CustomAmiId=ami-123456
```

## Java SDK を使用してインスタンスグループを作成する
<a name="emr-instance-group-sdk"></a>

クラスターのインスタンスグループの構成を指定する `InstanceGroupConfig` オブジェクトをインスタンス化します。スポットインスタンスを使用するには、 `withBidPrice` オブジェクトで、 `withMarket` および `InstanceGroupConfig` プロパティを設定します。次のコードは、スポットインスタンスを実行するプライマリ、コア、およびタスクインスタンスグループを定義する方法を示します。

```
InstanceGroupConfig instanceGroupConfigMaster = new InstanceGroupConfig()
	.withInstanceCount(1)
	.withInstanceRole("MASTER")
	.withInstanceType("m4.large")
	.withMarket("SPOT")
	.withBidPrice("0.25"); 
	
InstanceGroupConfig instanceGroupConfigCore = new InstanceGroupConfig()
	.withInstanceCount(4)
	.withInstanceRole("CORE")
	.withInstanceType("m4.large")
	.withMarket("SPOT")
	.withBidPrice("0.03");
	
InstanceGroupConfig instanceGroupConfigTask = new InstanceGroupConfig()
	.withInstanceCount(2)
	.withInstanceRole("TASK")
	.withInstanceType("m4.large")
	.withMarket("SPOT")
	.withBidPrice("0.10");
```