

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

# インタラクティブエンドポイントの設定
<a name="managed-endpoint-parameters"></a>

このセクションでは、インタラクティブエンドポイントとポッド設定のさまざまな設定をカバーする一連のトピックについて説明します。これにより、障害のモニタリングとトラブルシューティング、Amazon S3 または へのログ情報の送信 Amazon CloudWatch Logs、カスタムポッドテンプレートを指定するインタラクティブエンドポイントの作成を行うことができます。

**Topics**
+ [モニタリング Spark ジョブ](monitoring-spark-jobs.md)
+ [インタラクティブエンドポイントでカスタムポッドテンプレートを指定する](custom-pod-templates.md)
+ [JEG ポッドのノードグループへのデプロイ](managed-endpoint-nodegroups-setup.md)
+ [Jupyter エンタープライズゲートウェイ (JEG) 設定オプション](jeg-config-options.md)
+ [PySpark セッションパラメータの変更](modify-pyspark-parameters.md)
+ [インタラクティブエンドポイントを含むカスタムカーネルイメージ](custom-kernel.md)

# モニタリング Spark ジョブ
<a name="monitoring-spark-jobs"></a>

障害のモニタリングとトラブルシューティングをできるようにするには、エンドポイントで起動したジョブで Amazon S3、Amazon CloudWatch Logs、またはその両方にログ情報を送信できるようにインタラクティブエンドポイントを設定します。以下のセクションでは、EKS での Amazon EMR インタラクティブエンドポイントで起動した Spark ジョブの Amazon S3 へ Spark アプリケーションログを送信する方法について説明します。

**Amazon S3 ログ用の IAM ポリシーを設定する**

カーネルが Amazon S3 にログデータを送信できるようにするには、ジョブ実行ロールのアクセス権限ポリシーに次のアクセス権限を含める必要があります。*amzn-s3-demo-destination-bucket* をログ記録バケットの名前に置き換えます。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket",
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ],
      "Sid": "AllowS3Putobject"
    }
  ]
}
```

------

**注記**  
EKS での Amazon EMR は、S3 バケットを作成することもできます。S3 バケットが利用できない場合は、IAM ポリシーに `s3:CreateBucket` アクセス権限を含めてください。

S3 バケットにログを送信するために必要なアクセス権限を実行ロールに付与すると、ログデータは次の Amazon S3 ロケーションに送信されます。これは、`s3MonitoringConfiguration` が `create-managed-endpoint` リクエストの `monitoringConfiguration` セクションで渡されるときに起こります。
+ **ドライバーログ** — `logUri/virtual-cluster-id/endpoints/endpoint-id/containers/spark-application-id/spark-application-id-driver/(stderr.gz/stdout.gz)`
+ **エグゼキュターログ** — `logUri/virtual-cluster-id/endpoints/endpoint-id/containers/spark-application-id/executor-pod-name-exec-<Number>/(stderr.gz/stdout.gz)`

**注記**  
EKS での Amazon EMR は、エンドポイントログを S3 バケットにアップロードしません。

# インタラクティブエンドポイントでカスタムポッドテンプレートを指定する
<a name="custom-pod-templates"></a>

ドライバーとエグゼキュター用のカスタムポッドテンプレートを指定するインタラクティブエンドポイントを作成できます。*ポッドテンプレート*は、各ポッドの実行方法を決定する仕様です。ポッドテンプレートファイルを使用して、Spark 構成でサポートされていないドライバーまたはエグゼキュターポッドの設定を定義できます。ポッドテンプレートは現在、Amazon EMR リリース 6.3.0 以降でサポートされています。

ポッドテンプレートの詳細については、「*Amazon EMR on EKS Development Guide*」の「[Using pod templates](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/pod-templates.html)」を参照してください。

次の例は、ポッドテンプレートを使用してインタラクティブエンドポイントを作成する方法を示しています。

```
aws emr-containers create-managed-endpoint \
    --type JUPYTER_ENTERPRISE_GATEWAY \
    --virtual-cluster-id virtual-cluster-id \
    --name example-endpoint-name \
    --execution-role-arn arn:aws:iam::aws-account-id:role/EKSClusterRole \
    --release-label emr-6.9.0-latest \
    --configuration-overrides '{
        "applicationConfiguration": [
        {
            "classification": "spark-defaults",
            "properties": {
                "spark.kubernetes.driver.podTemplateFile": "path/to/driver/template.yaml",
                "spark.kubernetes.executor.podTemplateFile": "path/to/executor/template.yaml"
            }
        }]
    }'
```

# JEG ポッドのノードグループへのデプロイ
<a name="managed-endpoint-nodegroups-setup"></a>

JEG (Jupyter Enterprise Gateway) ポッド配置は、特定のノードグループにインタラクティブエンドポイントをデプロイできるようにする機能です。この機能により、インタラクティブエンドポイントの `instance type` などの設定を行うことができます。

## マネージドノードグループに JEG ポッドを関連付ける
<a name="associate-jegpod-to-nodegroup"></a>

次の設定プロパティでは、JEG ポッドをデプロイする Amazon EKS クラスター上のマネージドノードグループの名前を指定できます。

```
//payload 
--configuration-overrides '{
      "applicationConfiguration": [
            {
                "classification": "endpoint-configuration",
                "properties": {
                    "managed-nodegroup-name": NodeGroupName
                }        
            }
        ] 
    }'
```

ノードグループには、ノードグループに含まれるすべてのノードに Kubernetes ラベル `for-use-with-emr-containers-managed-endpoint-ng=NodeGroupName` がアタッチされている必要があります。このタグを持つノードグループのすべてのノードをリストするには、次のコマンドを使用します。

```
kubectl get nodes --show-labels | grep for-use-with-emr-containers-managed-endpoint-ng=NodeGroupName
```

上記のコマンドの出力でマネージドノードグループの一部であるノードが返されない場合は、`for-use-with-emr-containers-managed-endpoint-ng=NodeGroupName` Kubernetes ラベルがアタッチされたノードがノードグループにありません。この場合、以下の手順に従って、そのラベルをノードグループ内のノードにアタッチします。

1. 次のコマンドを使用して、マネージドノードグループ `NodeGroupName` のすべてのノードに `for-use-with-emr-containers-managed-endpoint-ng=NodeGroupName` Kubernetes ラベルを追加します。

   ```
   kubectl label nodes --selector eks:nodegroup-name=NodeGroupName for-use-with-emr-containers-managed-endpoint-ng=NodeGroupName
   ```

1. 次のコマンドを使用して、ノードが正しくラベル付けされていることを確認します。

   ```
   kubectl get nodes --show-labels | grep for-use-with-emr-containers-managed-endpoint-ng=NodeGroupName
   ```

マネージドノードグループは Amazon EKS クラスターのセキュリティグループに関連付ける必要があります。通常、`eksctl` を使用してクラスターとマネージドノードグループを作成した場合にこれが当てはまります。これは、次の手順を使用して AWS コンソールで確認できます。

1. Amazon EKS コンソールでクラスターに移動します。

1. クラスターの [ネットワーキング] タブに移動し、クラスターセキュリティグループを書き留めます。

1. クラスターの [コンピューティング] タブに移動し、マネージドノードグループ名をクリックします。

1. マネージドノードグループの **[詳細]** タブで、前にメモしたクラスターセキュリティグループが **[セキュリティグループ]** に表示されていることを確認します。

マネージドノードグループが Amazon EKS クラスターセキュリティグループにアタッチされていない場合は、`for-use-with-emr-containers-managed-endpoint-sg=ClusterName/NodeGroupName` タグをノードグループのセキュリティグループにアタッチする必要があります。このタグをアタッチするには、次の手順を使用します。

1. Amazon EC2 コンソールに移動し、左側のナビゲーションペインで [セキュリティグループ] をクリックします。

1. チェックボックスをクリックして、マネージドノードグループのセキュリティグループを選択します。

1. **[タグ]** タブの **[タグの管理]** ボタンを使用してタグ `for-use-with-emr-containers-managed-endpoint-sg=ClusterName/NodeGroupName` を追加します。

## セルフマネージドノードグループに JEG ポッドを関連付ける
<a name="associate-jegpod-to-self-managed-nodegroup"></a>

次の設定プロパティでは、JEG ポッドがデプロイされる Amazon EKS クラスター上のセルフマネージドノードグループまたはアンマネージドノードグループの名前を指定できます。

```
//payload 
--configuration-overrides '{
      "applicationConfiguration": [
            {
                "classification": "endpoint-configuration",
                "properties": {
                    "self-managed-nodegroup-name": NodeGroupName
                }        
            }
        ] 
    }'
```

ノードグループには、ノードグループに含まれるすべてのノードに `for-use-with-emr-containers-managed-endpoint-ng=NodeGroupName` Kubernetes ラベルがアタッチされている必要があります。このタグを持つノードグループのすべてのノードをリストするには、次のコマンドを使用します。

```
kubectl get nodes --show-labels | grep for-use-with-emr-containers-managed-endpoint-ng=NodeGroupName
```

上記のコマンドの出力でセルフマネージドノードグループの一部であるノードが返されない場合は、`for-use-with-emr-containers-managed-endpoint-ng=NodeGroupName` Kubernetes ラベルがアタッチされたノードがノードグループにありません。この場合、以下の手順に従って、そのラベルをノードグループ内のノードにアタッチします。

1. `eksctl` を使用してセルフマネージドノードグループを作成した場合は、以下のコマンドを使用して、セルフマネージドノードグループ `NodeGroupName` のすべてのノードに `for-use-with-emr-containers-managed-endpoint-ng=NodeGroupName` Kubernetes ラベルを一度に追加します。

   ```
   kubectl label nodes --selector alpha.eksctl.io/nodegroup-name=NodeGroupName for-use-with-emr-containers-managed-endpoint-ng=NodeGroupName
   ```

   セルフマネージドノードグループの作成に `eksctl` を使用しなかった場合は、上記のコマンドのセレクターを、ノードグループのすべてのノードにアタッチされている別の Kubernetes ラベルに置き換える必要があります。

1. 次のコマンドを使用して、ノードが正しくラベル付けされていることを確認します。

   ```
   kubectl get nodes --show-labels | grep for-use-with-emr-containers-managed-endpoint-ng=NodeGroupName
   ```

セルフマネージドノードグループのセキュリティグループには `for-use-with-emr-containers-managed-endpoint-sg=ClusterName/NodeGroupName` タグがアタッチされている必要があります。次の手順に従って、 AWS マネジメントコンソールからセキュリティグループにタグをアタッチします。

1. Amazon EC2 コンソールに移動します。左側のナビゲーションペインで **[セキュリティグループ]** を選択します。

1. セルフマネージドノードグループのセキュリティグループの横にあるチェックボックスをオンにします。

1. **[タグ]** タブの **[タグの管理]** ボタンを使用してタグ `for-use-with-emr-containers-managed-endpoint-sg=ClusterName/NodeGroupName` を追加します。`ClusterName` と `NodeGroupName` を適切な値に置き換えます。

## オンデマンドインスタンスがあるマネージドノードグループに JEG ポッドを関連付ける
<a name="associate-jegpod-to-on-demand-instances"></a>

*Kubernetes ラベルセレクター*と呼ばれる追加のラベルを定義して、特定のノードまたはノードグループでインタラクティブエンドポイントを実行するための追加の制約や制限を指定することもできます。次の例は、JEG ポッドにオンデマンド Amazon EC2 インスタンスを使用する方法を示しています。

```
--configuration-overrides '{
      "applicationConfiguration": [
            {
                "classification": "endpoint-configuration",
                "properties": {
                    "managed-nodegroup-name": NodeGroupName,
                    "node-labels": "eks.amazonaws.com/capacityType:ON_DEMAND"
                }        
            }
        ] 
    }'
```

**注記**  
`node-labels` プロパティは、`managed-nodegroup-name` または `self-managed-nodegroup-name` プロパティでのみ使用できます。

# Jupyter エンタープライズゲートウェイ (JEG) 設定オプション
<a name="jeg-config-options"></a>

EKS での Amazon EMR は Jupyter エンタープライズゲートウェイ (JEG) を使用してインタラクティブエンドポイントを有効にします。エンドポイントを作成するときに、許可リストに登録されている JEG 設定に次の値を設定できます。
+ **`RemoteMappingKernelManager.cull_idle_timeout`** — 秒単位 (整数) のタイムアウト。この時間が過ぎると、カーネルはアイドル状態になり、カリングできる状態になります。`0` 以下の値はカリングを無効にします。タイムアウトが短いと、ネットワーク接続が不十分なユーザーのカーネルがカリングされる可能性があります。
+ **`RemoteMappingKernelManager.cull_interval`** — カリングタイムアウト値を超えるアイドル状態のカーネルをチェックする秒単位の間隔 (整数)。

# PySpark セッションパラメータの変更
<a name="modify-pyspark-parameters"></a>

EKS での Amazon EMR リリース 6.9.0 以降、Amazon EMR Studio では EMR ノートブックセルで `%%configure` マジックコマンドを実行することで、PySpark セッションに関連付けられた Spark 設定を調整できるようになりました。

次の例は、Spark ドライバーとエグゼキュターのメモリ、コア、その他のプロパティを変更するために使用できるサンプルペイロードを示しています。`conf` 設定では、[Apache Spark の設定ドキュメント](https://spark.apache.org/docs/latest/configuration.html)で説明されている任意の Spark 設定を構成できます。

```
%%configure -f
{
  "driverMemory": "16G",
  "driverCores": 4,
  "executorMemory" : "32G",
  "executorCores": 2,
  "conf": {
     "spark.dynamicAllocation.maxExecutors" : 10,
     "spark.dynamicAllocation.minExecutors": 1
  }
}
```

次の例は、ファイル、pyFiles、および jar 依存関係を Spark ランタイムに追加するために使用できるサンプルペイロードを示しています。

```
%%configure -f
{
  "files": "s3://amzn-s3-demo-bucket-emr-eks/sample_file.txt",
  "pyFiles": : "path-to-python-files",
  "jars" : "path-to-jars
}
```

# インタラクティブエンドポイントを含むカスタムカーネルイメージ
<a name="custom-kernel"></a>

Amazon EMR Studio からインタラクティブワークロードを実行するときにアプリケーションに適切な依存関係があることを確認するには、インタラクティブエンドポイントの Docker イメージをカスタマイズし、カスタマイズされたベースカーネルイメージを実行します。インタラクティブエンドポイントを作成してカスタム Docker イメージに接続するには、以下の手順を実行します。

**注記**  
上書きできるのはベースイメージだけです。新しいカーネルイメージタイプを追加することはできません。

1. **カスタマイズした Docker イメージを作成して公開します。**ベースイメージには、Spark ランタイムと、Spark ランタイムで実行されるノートブックのカーネルが含まれています。イメージを作成するには、[Docker イメージをカスタマイズする方法](docker-custom-images-steps.md) のステップ 1～4 に従います。ステップ 1 では、Docker ファイル内のベースイメージ URI で、`notebook-spark` を `spark` の代わりに使用する必要があります。

   ```
   ECR-registry-account.dkr.ecr.Region.amazonaws.com/notebook-spark/container-image-tag
   ```

    AWS リージョン およびコンテナイメージタグの選択方法の詳細については、「」を参照してください[ベースイメージ URI の選択の詳細](docker-custom-images-tag.md)。

1. **カスタムイメージで使用できるインタラクティブエンドポイントを作成します。**

   1. 次の内容を含む JSON ファイル `custom-image-managed-endpoint.json` を作成します。この例では、Amazon EMR リリース 6.9.0 を使用します。  
**Example**  

      ```
      {
          "name": "endpoint-name",
          "virtualClusterId": "virtual-cluster-id",
          "type": "JUPYTER_ENTERPRISE_GATEWAY",
          "releaseLabel": "emr-6.9.0-latest",
          "executionRoleArn": "execution-role-arn",
          "configurationOverrides": {
              "applicationConfiguration": [
                  {
                      "classification": "jupyter-kernel-overrides",
                      "configurations": [
                          {
                              "classification": "python3",
                              "properties": {
                                  "container-image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/custom-notebook-python:latest"
                              }
                          },
                          {
                              "classification": "spark-python-kubernetes",
                              "properties": {
                                  "container-image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/custom-notebook-spark:latest"
                              }
                          }
                      ] 
                  }
              ]
          }
      }
      ```

   1. 次の例で示すように、JSON ファイルで指定された設定を使用してインタラクティブエンドポイントを作成します。詳細については、「[`create-managed-endpoint` コマンドでインタラクティブエンドポイントを作成する](create-managed-endpoint.md#create-using-json-file)」を参照してください。

      ```
      aws emr-containers create-managed-endpoint --cli-input-json custom-image-managed-endpoint.json
      ```

1. **EMR Studio 経由でインタラクティブエンドポイントに接続します。**詳細と完了する手順については、 AWS Workshop [Studio ドキュメントの Amazon EMR on EKS セクションの「Studio からの接続](https://emr-on-eks.workshop.aws/advanced/emr-studio/connecting-from-studio.html)」を参照してください。