

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

# Amazon EMR と EC2 プレイスメントグループの統合
<a name="emr-plan-ha-placementgroup"></a>

Amazon EC2 で Amazon EMR の複数のプライマリノードクラスターを起動する場合、プレイスメントグループ戦略を使用して、ハードウェア障害から保護するためにプライマリノードインスタンスをデプロイする方法を指定することができます。

プレイスメントグループ機能は、複数のプライマリノードクラスターのオプションとして Amazon EMR バージョン 5.23.0 以降でサポートされています。現在、プレイスメントグループ機能ではプライマリノードタイプのみがサポートされており、`SPREAD` 戦略は、これらのプライマリノードに適用されます。`SPREAD` 戦略では、ハードウェア障害の発生時に複数のプライマリノードが失われるのを防ぐため、少数のインスタンスを別個の基盤となるハードウェア全体に配置します。リクエストを実行するための固有のハードウェアが不足している場合、インスタンスの起動リクエストが失敗する可能性があることに注意してください。EC2 プレイスメント戦略および制限については、「*Linux インスタンス用 EC2 ユーザーガイド*」の「[プレイスメントグループ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html)」を参照してください。

Amazon EC2 には、 AWS リージョンごとに起動できるプレイスメントグループ戦略対応クラスターが 500 個という初期制限があります。 AWS サポートに連絡して、許可されたプレイスメントグループの数の増加をリクエストしてください。Amazon EMR が Amazon EMR プレイスメントグループ戦略に関連付けているキーと値のペアを追跡することで、Amazon EMR が作成する EC2 プレイスメントグループを識別できます。EC2 クラスターのインスタンスタグの詳細については、「[Amazon EC2 でクラスターインスタンスを表示する](UsingEMR_Tagging.md)」を参照してください。

## Amazon EMRrole にプレイスメントグループの管理ポリシーをアタッチする
<a name="emr-plan-ha-launch-pg-policy"></a>

Amazon EMR が Amazon EC2 でプレイスメントグループを作成、削除、および記述できるようにするために、プレイスメントグループ戦略には `AmazonElasticMapReducePlacementGroupPolicy` という管理ポリシーが必要です。複数のプライマリノードを持つ Amazon EMR クラスターを起動する前に、`AmazonElasticMapReducePlacementGroupPolicy` を Amazon EMR のサービスロールにアタッチする必要があります。

プレイスメントグループ管理ポリシーの代わりに `AmazonEMRServicePolicy_v2` 管理ポリシーを Amazon EMR ロールにアタッチできます。`AmazonEMRServicePolicy_v2` は Amazon EC2 のプレイスメントグループに対して、`AmazonElasticMapReducePlacementGroupPolicy` と同じアクセスを許可します。詳細については、「[Amazon EMR のサービスロール (EMR ロール)](emr-iam-role.md)」を参照してください。

`AmazonElasticMapReducePlacementGroupPolicy` 管理ポリシーは、Amazon EMR が作成および管理する次の JSON テキストです。

**注記**  
`AmazonElasticMapReducePlacementGroupPolicy` 管理ポリシーは自動的に更新されるため、次に示すポリシーは最新のものでない可能性があります。 AWS マネジメントコンソールを使用して、現在のポリシーを表示します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Resource": [
        "*"
      ],
      "Effect": "Allow",
      "Action": [
        "ec2:DeletePlacementGroup",
        "ec2:DescribePlacementGroups"
      ],
      "Sid": "AllowEC2Deleteplacementgroup"
    },
    {
      "Resource": [
        "arn:aws:ec2:*:*:placement-group/pg-*"
      ],
      "Effect": "Allow",
      "Action": [
        "ec2:CreatePlacementGroup"
      ],
      "Sid": "AllowEC2Createplacementgroup"
    }
  ]
}
```

------

## プレイスメントグループ戦略を使用して、複数のプライマリノードを持つ Amazon EMR クラスターを起動する
<a name="emr-plan-ha-launch-pg-strategy"></a>

プレイスメントグループ戦略を使用して複数のプライマリノードを持つ Amazon EMR クラスターを起動するには、プレイスメントグループマネージドポリシー `AmazonElasticMapReducePlacementGroupPolicy` を Amazon EMR ロールにアタッチします。詳細については、「[Amazon EMRrole にプレイスメントグループの管理ポリシーをアタッチする](#emr-plan-ha-launch-pg-policy)」を参照してください。

このロールを使用して複数のプライマリノードを持つ Amazon EMR クラスターを起動するたびに、Amazon EMR は、それらのプライマリノードに適用される `SPREAD` 戦略を使用してクラスターを起動しようとします。プレイスメントグループマネージドポリシー `AmazonElasticMapReducePlacementGroupPolicy` がアタッチされていないロールを使用する場合、Amazon EMR は、プレイスメントグループ戦略なしで複数のプライマリノードを持つ Amazon EMR クラスターを起動しようとします。

Amazon EMR EMRAPI または CLI を使用して `placement-group-configs` パラメータを指定して複数のプライマリノードを持つ Amazon EMR クラスターを起動する場合、Amazon EMR は Amazon EMR ロールにプレイスメントグループマネージドポリシー `AmazonElasticMapReducePlacementGroupPolicy` がアタッチされている場合にのみクラスターを起動します。Amazon EMR ロールにポリシーがアタッチされていない場合、複数のプライマリノードを持つ Amazon EMR クラスターの起動は失敗します。

------
#### [ Amazon EMR API ]

**Example 例 - プレイスメントグループ戦略を使用して、Amazon EMR API から複数のプライマリノードを持つインスタンスグループクラスターを起動する**  
RunJobFlow アクションを使用して複数のプライマリノードを持つ Amazon EMR クラスターを作成する場合、`PlacementGroupConfigs` プロパティを以下のように設定します。現在、`MASTER` インスタンスロールは、自動的に `SPREAD` をプレイスメントグループ戦略として使用します。  

```
{
   "Name":"ha-cluster",
   "PlacementGroupConfigs":[
      {
         "InstanceRole":"MASTER"
      }
   ],
   "ReleaseLabel": emr-6.15.0,
   "Instances":{
      "ec2SubnetId":"subnet-22XXXX01",
      "ec2KeyName":"ec2_key_pair_name",
      "InstanceGroups":[
         {
            "InstanceCount":3,
            "InstanceRole":"MASTER",
            "InstanceType":"m5.xlarge"
         },
         {
            "InstanceCount":4,
            "InstanceRole":"CORE",
            "InstanceType":"m5.xlarge"
         }
      ]
   },
   "JobFlowRole":"EMR_EC2_DefaultRole",
   "ServiceRole":"EMR_DefaultRole"
}
```
+ *ha-cluster* を自分の高可用性クラスター名に置き換えます。
+ *subnet-22XXXX01* をサブネット ID に置き換えます。
+ *ec2\$1key\$1pair\$1name* をこのクラスターの EC2 キーペアの名前に置き換えます。EC2 キーペアはオプションであり、SSH を使用してクラスターにアクセスする場合にのみ必須です。

------
#### [ AWS CLI ]

**Example 例 – プレイスメントグループ戦略を使用して、 から複数のプライマリノードを持つインスタンスフリートクラスターを起動する AWS Command Line Interface**  
RunJobFlow アクションを使用して複数のプライマリノードを持つ Amazon EMR クラスターを作成する場合、`PlacementGroupConfigs` プロパティを以下のように設定します。現在、`MASTER` インスタンスロールは、自動的に `SPREAD` をプレイスメントグループ戦略として使用します。  

```
aws emr create-cluster \
--name "ha-cluster" \
--placement-group-configs InstanceRole=MASTER \
--release-label emr-6.15.0 \
--instance-fleets '[
    {
        "InstanceFleetType": "MASTER",
        "TargetOnDemandCapacity": 3,
        "TargetSpotCapacity": 0,
        "LaunchSpecifications": {
            "OnDemandSpecification": {
                "AllocationStrategy": "lowest-price"
            }
        },
        "InstanceTypeConfigs": [
            {
                "WeightedCapacity": 1,
                "BidPriceAsPercentageOfOnDemandPrice": 100,
                "InstanceType": "m5.xlarge"
            },
            {
                "WeightedCapacity": 1,
                "BidPriceAsPercentageOfOnDemandPrice": 100,
                "InstanceType": "m5.2xlarge"
            },
            {
                "WeightedCapacity": 1,
                "BidPriceAsPercentageOfOnDemandPrice": 100,
                "InstanceType": "m5.4xlarge"
            }
        ],
        "Name": "Master - 1"
    },
    {
        "InstanceFleetType": "CORE",
        "TargetOnDemandCapacity": 5,
        "TargetSpotCapacity": 0,
        "LaunchSpecifications": {
            "OnDemandSpecification": {
                "AllocationStrategy": "lowest-price"
            }
        },
        "InstanceTypeConfigs": [
            {
                "WeightedCapacity": 1,
                "BidPriceAsPercentageOfOnDemandPrice": 100,
                "InstanceType": "m5.xlarge"
            },
            {
                "WeightedCapacity": 2,
                "BidPriceAsPercentageOfOnDemandPrice": 100,
                "InstanceType": "m5.2xlarge"
            },
            {
                "WeightedCapacity": 4,
                "BidPriceAsPercentageOfOnDemandPrice": 100,
                "InstanceType": "m5.4xlarge"
            }
        ],
        "Name": "Core - 2"
    }
]' \
--ec2-attributes '{
    "KeyName": "ec2_key_pair_name",
    "InstanceProfile": "EMR_EC2_DefaultRole",
    "SubnetIds": [
        "subnet-22XXXX01",
        "subnet-22XXXX02"
    ]
}' \
--service-role EMR_DefaultRole \
--applications Name=Hadoop Name=Spark
```
+ *ha-cluster* を自分の高可用性クラスター名に置き換えます。
+ *ec2\$1key\$1pair\$1name* をこのクラスターの EC2 キーペアの名前に置き換えます。EC2 キーペアはオプションであり、SSH を使用してクラスターにアクセスする場合にのみ必須です。
+ *subnet-22XXXX01* および *subnet-22XXXX02* は、お使いのサブネット ID に置き換えてください。

------

## プレイスメントグループ戦略を使用せずに複数プライマリノードを持つクラスターを起動する
<a name="emr-plan-ha-launch-no-pg-strategy"></a>

プレイスメントグループ戦略を使用しないで複数プライマリノードを持つクラスターでプライマリノードを起動する場合、次のいずれかを実行する必要があります。
+ プレイスメントグループ管理ポリシー `AmazonElasticMapReducePlacementGroupPolicy` を Amazon EMRrole から削除する、または
+ Amazon EMRAPI または CLI を使用して `placement-group-configs` パラメータを指定し、`NONE` をプレイスメントグループ戦略として選択して、複数のプライマリノードを持つクラスターを起動します。

------
#### [ Amazon EMR API ]

**Example – Amazon EMRAPI を使用するプレイスメントグループ戦略を使用しないで、複数のプライマリノードを持つクラスターを起動します。**  
RunJobFlow アクションを使用して複数のプライマリノードを持つクラスターを作成する場合は、`PlacementGroupConfigs` プロパティを以下のように設定します。  

```
{
   "Name":"ha-cluster",
   "PlacementGroupConfigs":[
      {
         "InstanceRole":"MASTER",
         "PlacementStrategy":"NONE"
      }
   ],
   "ReleaseLabel":"emr-5.30.1",
   "Instances":{
      "ec2SubnetId":"subnet-22XXXX01",
      "ec2KeyName":"ec2_key_pair_name",
      "InstanceGroups":[
         {
            "InstanceCount":3,
            "InstanceRole":"MASTER",
            "InstanceType":"m5.xlarge"
         },
         {
            "InstanceCount":4,
            "InstanceRole":"CORE",
            "InstanceType":"m5.xlarge"
         }
      ]
   },
   "JobFlowRole":"EMR_EC2_DefaultRole",
   "ServiceRole":"EMR_DefaultRole"
}
```
+ *ha-cluster* を自分の高可用性クラスター名に置き換えます。
+ *subnet-22XXXX01* をサブネット ID に置き換えます。
+ *ec2\$1key\$1pair\$1name* をこのクラスターの EC2 キーペアの名前に置き換えます。EC2 キーペアはオプションであり、SSH を使用してクラスターにアクセスする場合にのみ必須です。

------
#### [ Amazon EMR CLI ]

**Example — Amazon EMRCLI を使用するプレイスメントグループ戦略を使用せずに、複数のプライマリノードを持つクラスターを起動します。**  
RunJobFlow アクションを使用して複数のプライマリノードを持つクラスターを作成する場合は、`PlacementGroupConfigs` プロパティを以下のように設定します。  

```
aws emr create-cluster \
--name "ha-cluster" \
--placement-group-configs InstanceRole=MASTER,PlacementStrategy=NONE \
--release-label emr-5.30.1 \
--instance-groups InstanceGroupType=MASTER,InstanceCount=3,InstanceType=m5.xlarge InstanceGroupType=CORE,InstanceCount=4,InstanceType=m5.xlarge \
--ec2-attributes KeyName=ec2_key_pair_name,InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-22XXXX01 \
--service-role EMR_DefaultRole \
--applications Name=Hadoop Name=Spark
```
+ *ha-cluster* を自分の高可用性クラスター名に置き換えます。
+ *subnet-22XXXX01* をサブネット ID に置き換えます。
+ *ec2\$1key\$1pair\$1name* をこのクラスターの EC2 キーペアの名前に置き換えます。EC2 キーペアはオプションであり、SSH を使用してクラスターにアクセスする場合にのみ必須です。

------

## 複数のプライマリノードを持つクラスターにアタッチされたプレイスメントグループ戦略設定の確認
<a name="emr-plan-ha-check-pg-using-api"></a>

Amazon EMR クラスター記述 API を使用して、複数のプライマリノードを持つクラスターにアタッチされたプレイスメントグループ戦略の設定を確認できます。

**Example**  

```
aws emr describe-cluster --cluster-id "j-xxxxx"
{
   "Cluster":{
      "Id":"j-xxxxx",
      ...
      ...
      "PlacementGroups":[
         {
            "InstanceRole":"MASTER",
            "PlacementStrategy":"SPREAD"
         }
      ]
   }
}
```