

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

# Amazon EMR on EKS の Docker イメージのカスタマイズ
<a name="docker-custom-images"></a>

カスタマイズした Docker イメージは、Amazon EMR on EKS で使用できます。Amazon EMR on EKS ランタイムイメージをカスタマイズすると、次の利点を得られます。
+ アプリケーションの依存関係とランタイム環境を単一のイミュータブルコンテナにパッケージ化し、移植性を高め、各ワークロードの依存関係管理を効率化します。
+ ワークロードに最適化されたパッケージをインストールして設定します。これらのパッケージは、Amazon EMR ランタイムのパブリックディストリビューションでは広く利用できない場合があります。
+ Amazon EMR on EKS を、ローカルでの開発やテストなど、組織内で現在確立されているビルド、テスト、デプロイの各プロセスと統合します。
+ 組織内のコンプライアンスおよびガバナンス要件を満たす、確立されたセキュリティプロセス (イメージスキャンなど) を適用します。

**Topics**
+ [Docker イメージをカスタマイズする方法](docker-custom-images-steps.md)
+ [ベースイメージ URI の選択の詳細](docker-custom-images-tag.md)
+ [イメージをカスタマイズするための考慮事項](docker-custom-images-considerations.md)

# Docker イメージをカスタマイズする方法
<a name="docker-custom-images-steps"></a>

Amazon EMR on EKS の Docker イメージをカスタマイズするには、次の手順を行います。この手順では、ベースイメージを取得して、カスタマイズして公開し、イメージを使用することによってワークロードを送信する方法を示します。
+ [前提条件](#docker-custom-images-prereq)
+ [ステップ 1: Amazon Elastic Container Registry (Amazon ECR) からベースイメージを取得する](#docker-custom-images-retrieve)
+ [ステップ 2: ベースイメージをカスタマイズする](#docker-custom-images-customize)
+ [ステップ 3: (オプション、ただし推奨) カスタムイメージを検証する](#docker-custom-images-validate)
+ [ステップ 4: カスタムイメージを公開する](#docker-custom-images-publish)
+ [ステップ 5: カスタムイメージを使用して Amazon EMR で Spark ワークロードを送信する](#docker-custom-images-submit)

**注記**  
Docker イメージのカスタマイズ時に考慮することが必要な場合があるその他のオプションは、インタラクティブエンドポイント用にカスタマイズすることです。これは、必要な依存関係を確保する、またはマルチアーキテクチャコンテナイメージを使用するために行います。  
[インタラクティブエンドポイントの Docker イメージをカスタマイズする](docker-custom-images-managed-endpoint.md)
[マルチアーキテクチャイメージを使用する](docker-custom-images-multi-architecture.md)

## 前提条件
<a name="docker-custom-images-prereq"></a>
+ Amazon EMR on EKS で [Amazon EMR on EKS のセットアップ](setting-up.md) ステップを実行します。
+ ご自分の環境に Docker をインストールします。詳細については、[Get Docker](https://docs.docker.com/get-docker/) を参照してください。

## ステップ 1: Amazon Elastic Container Registry (Amazon ECR) からベースイメージを取得する
<a name="docker-custom-images-retrieve"></a>

ベースイメージには、Amazon EMR ランタイムと、他の AWS サービスへのアクセスに使用されるコネクタが含まれています。Amazon EMR 6.9.0 以降の場合は、Amazon ECR Public Gallery からベースイメージを取得できます。ギャラリーを参照してイメージリンクを見つけ、そのイメージをローカルワークスペースに取り込みます。例えば、Amazon EMR 7.12.0 リリースの場合、次の`docker pull`コマンドは最新の標準ベースイメージを取得します。`emr-7.12.0:latest` を `emr-7.12.0-spark-rapids:latest` に置き換えると、Nvidia RAPIDS アクセラレーターがあるイメージを取得できます。`emr-7.12.0:latest` を `emr-7.12.0-java11:latest` に置き換えて Java 11 ランタイムでイメージを取得することもできます。

```
docker pull public.ecr.aws/emr-on-eks/spark/emr-7.12.0:latest
```

Amazon EMR 6.9.0 以前のリリースのベースイメージを取得したい場合、または各リージョンの Amazon ECR レジストリアカウントから取得したい場合は、次のステップを使用してください。

1. ベースイメージ URI を選択します。次の例で示されるように、イメージ URI は `ECR-registry-account.dkr.ecr.Region.amazonaws.com/spark/container-image-tag` の形式に従います。

   ```
   895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest
   ```

   ご利用のリージョンのベースイメージを選択するには、[ベースイメージ URI の選択の詳細](docker-custom-images-tag.md) を参照してください。

1. ベースイメージが保存されている Amazon ECR リポジトリにログインします。*895885662937* と *us-west-2* を Amazon ECR レジストリアカウントと選択した AWS リージョンに置き換えます。

   ```
   aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 895885662937.dkr.ecr.us-west-2.amazonaws.com
   ```

1. ベースイメージをローカルワークスペースにプルします。*emr-6.6.0:latest* を、選択したコンテナイメージタグに置き換えます。

   ```
   docker pull 895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest
   ```

## ステップ 2: ベースイメージをカスタマイズする
<a name="docker-custom-images-customize"></a>

Amazon ECR からプルしたベースイメージをカスタマイズするには、次の手順を行います。

1. ローカルワークスペースで新しい `Dockerfile` を作成します。

1. 前の手順で作成した `Dockerfile` を編集し、以下のコンテンツを追加します。この `Dockerfile` は、`895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest` からプルしたコンテナイメージを使用します。

   ```
   FROM 895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest
   USER root
   ### Add customization commands here ####
   USER hadoop:hadoop
   ```

1. `Dockerfile` にコマンドを追加して、ベースイメージをカスタマイズします。たとえば、次の `Dockerfile` で示すように、Python ライブラリをインストールするコマンドを追加します。

   ```
   FROM 895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest
   USER root
   RUN pip3 install --upgrade boto3 pandas numpy // For python 3
   USER hadoop:hadoop
   ```

1. `Dockerfile` が作成されたディレクトリと同じディレクトリから、次のコマンドを実行して Docker イメージを作成します。Docker イメージの名前を指定します (例えば、*emr6.6\$1custom* など)。

   ```
   docker build -t emr6.6_custom .
   ```

## ステップ 3: (オプション、ただし推奨) カスタムイメージを検証する
<a name="docker-custom-images-validate"></a>

公開する前に、カスタムイメージの互換性をテストすることをお勧めします。[Amazon EMR on EKS カスタムイメージ CLI](https://github.com/awslabs/amazon-emr-on-eks-custom-image-cli) を使用して、イメージに Amazon EMR on EKS で実行するために必要なファイル構造と正しい構成があるかどうかを確認できます。

**注記**  
Amazon EMR on EKS カスタムイメージ CLI では、イメージにエラーがないことを確認できません。ベースイメージから依存関係を削除する際は、注意してください。

カスタムイメージを検証するには、次のステップに従います。

1. Amazon EMR on EKS カスタムイメージ CLI をダウンロードしてインストールします。詳細については、[Amazon EMR on EKS カスタムイメージ CLI インストールガイド](https://github.com/awslabs/amazon-emr-on-eks-custom-image-cli/blob/main/installer/assets/INSTALLATION_GUIDE.md)を参照してください。

1. 以下のコマンドを実行して、インストールをテストします。

   ```
   emr-on-eks-custom-image --version
   ```

   出力の例を以下に示します。

   ```
   Amazon EMR on EKS Custom Image CLI
   Version: x.xx
   ```

1. 以下のコマンドを実行して、カスタムイメージを検証します。

   ```
   emr-on-eks-custom-image validate-image -i image_name -r release_version [-t image_type]
   ```
   + `-i` には、検証する必要のあるローカルイメージ URI を指定します。これには、イメージ URI や、イメージについて定義した任意の名前またはタグを指定できます。
   + `-r` には、ベースイメージの正確なリリースバージョンを指定します (たとえば、`emr-6.6.0-latest` など)。
   + `-t` には、イメージタイプを指定します。これが Spark イメージの場合は、`spark` を入力します。デフォルト値は `spark` です。現在の Amazon EMR on EKS カスタムイメージ CLI バージョンでは、Spark ランタイムイメージのみがサポートされています。

   コマンドが正常に実行され、カスタムイメージが必須のすべての設定とファイル構造を満たしている場合、以下の例で示すように、返される出力にはすべてのテストの結果が表示されます。

   ```
   Amazon EMR on EKS Custom Image Test
   Version: x.xx
   ... Checking if docker cli is installed
   ... Checking Image Manifest
   [INFO] Image ID: xxx
   [INFO] Created On: 2021-05-17T20:50:07.986662904Z
   [INFO] Default User Set to hadoop:hadoop : PASS
   [INFO] Working Directory Set to /home/hadoop : PASS
   [INFO] Entrypoint Set to /usr/bin/entrypoint.sh : PASS
   [INFO] SPARK_HOME is set with value: /usr/lib/spark : PASS
   [INFO] JAVA_HOME is set with value: /etc/alternatives/jre : PASS
   [INFO] File Structure Test for spark-jars in /usr/lib/spark/jars: PASS
   [INFO] File Structure Test for hadoop-files in /usr/lib/hadoop: PASS
   [INFO] File Structure Test for hadoop-jars in /usr/lib/hadoop/lib: PASS
   [INFO] File Structure Test for bin-files in /usr/bin: PASS
   ... Start Running Sample Spark Job
   [INFO] Sample Spark Job Test with local:///usr/lib/spark/examples/jars/spark-examples.jar : PASS
   -----------------------------------------------------------------
   Overall Custom Image Validation Succeeded.
   -----------------------------------------------------------------
   ```

   カスタムイメージが必須の設定またはファイル構造を満たしていない場合、エラーメッセージが表示されます。返される出力では、誤った設定またはファイル構造に関する情報が提供されます。

## ステップ 4: カスタムイメージを公開する
<a name="docker-custom-images-publish"></a>

新しい Docker イメージを Amazon ECR レジストリに公開します。

1. 次のコマンドを実行して、Docker イメージを保存するための Amazon ECR リポジトリを作成します。リポジトリの名前を入力します (例えば、*emr6.6\$1custom\$1repo* など)。*us-west-2* を、ご利用のリージョンに置き換えます。

   ```
   aws ecr create-repository \
       --repository-name emr6.6_custom_repo \
       --image-scanning-configuration scanOnPush=true \
       --region us-west-2
   ```

   詳細については、*Amazon ECR ユーザーガイド*の[リポジトリの作成](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html#cli-create-repository)を参照してください。

1. 次のコマンドを実行して、デフォルトレジストリに対して認証します。

   ```
   aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-west-2.amazonaws.com
   ```

   詳細については、*Amazon ECR ユーザーガイド*の[デフォルトレジストリに対して認証する](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html#cli-authenticate-registry)を参照してください。

1. イメージにタグを付けて、作成した Amazon ECR リポジトリに公開します。

   イメージにタグを付けます。

   ```
   docker tag emr6.6_custom aws_account_id.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo
   ```

   イメージをプッシュします。

   ```
   docker push aws_account_id.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo
   ```

   詳細については、*Amazon ECR ユーザーガイド*の[イメージを Amazon ECR にプッシュする](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html#cli-push-image)を参照してください。

## ステップ 5: カスタムイメージを使用して Amazon EMR で Spark ワークロードを送信する
<a name="docker-custom-images-submit"></a>

カスタムイメージを作成して公開したら、カスタムイメージを使用して Amazon EMR on EKS ジョブを送信できます。

まず、次の JSON ファイルの例で示すように、start-job-run-request.json ファイルを作成して、`spark.kubernetes.container.image` パラメータを指定し、カスタムイメージを参照します。

**注記**  
以下の JSON スニペットの `entryPoint` 引数で示すように、`local://` スキームを使用してカスタムイメージで利用可能なファイルを参照できます。`local://` スキームを使用して、アプリケーションの依存関係を参照することもできます。`local://` スキームを使用して参照されるすべてのファイルと依存関係は、カスタムイメージの指定されたパスにすでに存在している必要があります。

```
{
    "name": "spark-custom-image", 
    "virtualClusterId": "virtual-cluster-id", 
    "executionRoleArn": "execution-role-arn", 
    "releaseLabel": "emr-6.6.0-latest", 
    "jobDriver": {
      "sparkSubmitJobDriver": {
        "entryPoint": "local:///usr/lib/spark/examples/jars/spark-examples.jar", 
        "entryPointArguments": [
                  "10"
              ],
         "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi --conf spark.kubernetes.container.image=123456789012.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo"
       }
    }
}
```

次の例で示すように、`applicationConfiguration` プロパティを使用してカスタムイメージを参照することもできます。

```
{
    "name": "spark-custom-image", 
    "virtualClusterId": "virtual-cluster-id", 
    "executionRoleArn": "execution-role-arn", 
    "releaseLabel": "emr-6.6.0-latest", 
    "jobDriver": {
      "sparkSubmitJobDriver": {
        "entryPoint": "local:///usr/lib/spark/examples/jars/spark-examples.jar", 
        "entryPointArguments": [
                  "10"
              ],
         "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi"
       }
    },
    "configurationOverrides": {
        "applicationConfiguration": [
            {
                "classification": "spark-defaults",
                "properties": {
                    "spark.kubernetes.container.image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/emr6.6_custom_repo"
                }
            }
        ]
    }
}
```

次に、`start-job-run` コマンドを実行してジョブを送信します。

```
aws emr-containers start-job-run --cli-input-json file://./start-job-run-request.json
```

上記の JSON の例では、*emr-6.6.0-latest* を Amazon EMR リリースバージョンに置き換えます。`-latest` リリースバージョンを使用して、選択したバージョンに最新のセキュリティ更新プログラムが含まれていることを確認することを強くお勧めします。Amazon EMR リリースバージョンおよびそれらのイメージタグの詳細については、「[ベースイメージ URI の選択の詳細](docker-custom-images-tag.md)」を参照してください。

**注記**  
`spark.kubernetes.driver.container.image` と `spark.kubernetes.executor.container.image` を使用して、ドライバーポッドとエグゼキュターポッドに別のイメージを指定できます。

# インタラクティブエンドポイントの Docker イメージをカスタマイズする
<a name="docker-custom-images-managed-endpoint"></a>

カスタマイズされたベースカーネルイメージを実行できるように、インタラクティブエンドポイント用の Docker イメージをカスタマイズすることもできます。これは、EMR Studio からインタラクティブワークロードを実行するときに必要な依存関係を確実に確保するのに役立ちます。

1. 上記の[ステップ 1〜4](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/docker-custom-images-steps.html#docker-custom-images-retrieve) に従って、Docker イメージをカスタマイズします。Amazon EMR 6.9.0 リリース以降では、Amazon ECR Public Gallery からベースイメージ URI を取得できます。Amazon EMR 6.9.0 より前のリリースでは、それぞれの AWS リージョンの Amazon ECR レジストリアカウントでイメージを取得できますが、唯一の違いは Dockerfile 内のベースイメージ URI です。ベースイメージ URI は次の形式に従います。

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

   `spark` の代わりに、ベースイメージ URI で `notebook-spark` を使用する必要があります。ベースイメージには、Spark ランタイムと、Spark ランタイムで実行されるノートブックのカーネルが含まれています。リージョンとコンテナイメージタグの選択について詳しくは、[ベースイメージ URI の選択の詳細](docker-custom-images-tag.md) を参照してください。
**注記**  
現在、ベースイメージの上書きのみがサポートされており、ベースイメージ AWS が提供するもの以外のタイプのまったく新しいカーネルの導入はサポートされていません。

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

   まず、以下の内容で `custom-image-managed-endpoint.json` という JSON ファイルを作成します。

   ```
   {
       "name": "endpoint-name",
       "virtualClusterId": "virtual-cluster-id",
       "type": "JUPYTER_ENTERPRISE_GATEWAY",
       "releaseLabel": "emr-6.6.0-latest",
       "executionRoleArn": "execution-role-arn",
       "certificateArn": "certificate-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"
                           }
                       }
                   ] 
               }
           ]
       }
   }
   ```

   次に、次の例で示すように、JSON ファイルで指定された設定を使用してインタラクティブエンドポイントを作成します。

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

   詳細については、「[Create an interactive endpoint for your virtual cluster](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-create-eks-cluster.html#emr-studio-create-managed-endpoint)」を参照してください。

1. EMR Studio 経由でインタラクティブエンドポイントに接続します。詳細については、[Connecting from Studio](https://emr-on-eks.workshop.aws/advanced/emr-studio/connecting-from-studio.html) を参照してください。

# マルチアーキテクチャイメージを使用する
<a name="docker-custom-images-multi-architecture"></a>

Amazon EMR on EKS は、Amazon Elastic Container Registry (Amazon ECR) のマルチアーキテクチャコンテナイメージをサポートしています。詳細については、[Amazon ECR のマルチアーキテクチャコンテナイメージの紹介](https://aws.amazon.com/blogs/containers/introducing-multi-architecture-container-images-for-amazon-ecr/)を参照してください。

Amazon EMR on EKS カスタムイメージは、Graviton AWS ベースの EC2 インスタンスとnon-Graviton-based EC2 インスタンスの両方をサポートします。Graviton ベースのイメージは、非 Graviton ベースのイメージと同じ Amazon ECR のイメージリポジトリに格納されています。

例えば、Docker マニフェストリストに 6.6.0 イメージがあるかどうかを確認するには、次のコマンドを実行します。

```
docker manifest inspect 895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest 
```

出力は次のとおりです。`arm64` アーキテクチャは Graviton インスタンス用です。`amd64` は 非 Graviton インスタンス用です。

```
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 1805,
         "digest": "xxx123:6b971cb47d11011ab3d45fff925e9442914b4977ae0f9fbcdcf5cfa99a7593f0",
         "platform": {
            "architecture": "arm64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 1805,
         "digest": "xxx123:6f2375582c9c57fa9838c1d3a626f1b4fc281e287d2963a72dfe0bd81117e52f",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      }
   ]
}
```

マルチアーキテクチャイメージを作成するには、次のステップに従います。

1. 次の内容で `Dockerfile` を作成して、`arm64` イメージをプルできるようにします。

   ```
   FROM --platform=arm64 895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.6.0:latest
   USER root
    
   RUN pip3 install boto3 // install customizations here
   USER hadoop:hadoop
   ```

1. マルチアーキテクチャイメージを作成するには、[Amazon ECR のマルチアーキテクチャコンテナイメージの紹介](https://aws.amazon.com/blogs/containers/introducing-multi-architecture-container-images-for-amazon-ecr/)の手順に従います。
**注記**  
`arm64` イメージは `arm64` インスタンス上に作成する必要があります。同様に、`amd64` インスタンス上に `amd64` イメージを作成する必要があります。

   Docker `buildx` コマンドを使用すると、特定のインスタンスタイプごとに作成せずに、マルチアーキテクチャイメージを作成することもできます。詳細については、[Leverage multi-CPU architecture support](https://docs.docker.com/desktop/multi-arch/) を参照してください。

1. マルチアーキテクチャイメージを作成した後、同じ `spark.kubernetes.container.image` パラメータを使用してイメージを参照することにより、ジョブを送信できます。Graviton ベースの EC2 インスタンスとnon-Graviton-based EC2 AWS インスタンスの両方を持つ異種クラスターでは、インスタンスはイメージをプルするインスタンスアーキテクチャに基づいて正しいアーキテクチャイメージを決定します。

# ベースイメージ URI の選択の詳細
<a name="docker-custom-images-tag"></a>

**注記**  
Amazon EMR 6.9.0 以降のリリースでは、Amazon ECR Public Gallery からベースイメージを取得できるため、このページの指示に従ってベースイメージ URI を作成する必要はありません。ベースイメージのコンテナイメージタグを見つけるには、EKS での Amazon EMR の該当するリリースの[リリースノートページ](emr-eks-releases.md)を参照してください。

選択できるベース Docker イメージは、Amazon Elastic Container Registry (Amazon ECR) に保存されます。次の例で示すように、イメージ URI は `ECR-registry-account.dkr.ecr.Region.amazonaws.com/spark/container-image-tag` 形式に従います。

```
895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-7.12.0:latest
```

次の例で示すように、インタラクティブエンドポイントのイメージ URI は `ECR-registry-account.dkr.ecr.Region.amazonaws.com/notebook-spark/container-image-tag` 形式に従います。`spark` の代わりに、ベースイメージ URI で `notebook-spark` を使用する必要があります。

```
895885662937.dkr.ecr.us-west-2.amazonaws.com/notebook-spark/emr-7.12.0:latest
```

同様に、インタラクティブエンドポイント用の Spark `python3` イメージ以外の場合、イメージ URI は `ECR-registry-account.dkr.ecr.Region.amazonaws.com/notebook-python/container-image-tag` です。次の URI の例は、正しい形式です。

```
895885662937.dkr.ecr.us-west-2.amazonaws.com/notebook-python/emr-7.12.0:latest
```

ベースイメージのコンテナイメージタグを見つけるには、EKS での Amazon EMR の該当するリリースの[リリースノートページ](emr-eks-releases.md)を参照してください。

## リージョン別の Amazon ECR レジストリアカウント
<a name="docker-custom-images-ECR"></a>

高いネットワークレイテンシーを回避するには、最も近い場所からベースイメージをプルします AWS リージョン。次の表に基づいて、イメージのプル元のリージョンに対応する Amazon ECR レジストリアカウントを選択します。


| Regions | Amazon ECR レジストリアカウント | 
| --- | --- | 
| ap-east-1 | 736135916053 | 
| ap-northeast-1 | 059004520145 | 
| ap-northeast-2 | 996579266876 | 
| ap-northeast-3 | 705689932349 | 
| ap-southeast-3 | 946962994502 | 
| ap-south-1 | 235914868574 | 
| ap-south-2 | 691480105545 | 
| ap-southeast-1 | 671219180197 | 
| ap-southeast-2 | 038297999601 | 
| ca-central-1 | 351826393999 | 
| eu-central-1 | 107292555468 | 
| eu-central-2 | 314408114945 | 
| eu-north-1 | 830386416364 | 
| eu-west-1 | 483788554619 | 
| eu-west-2 | 118780647275 | 
| eu-west-3 | 307523725174 | 
| eu-south-1 | 238014973495 | 
| eu-south-2 | 350796622945 | 
|  il-central-1 | 395734710648 | 
| me-south-1 | 008085056818 | 
| me-central-1 | 818935616732 | 
| sa-east-1 | 052806832358 | 
| us-gov-west-1 | 299385240661 | 
| us-gov-east-1 | 299393998622 | 
| us-east-1 | 755674844232 | 
| us-east-2 | 711395599931 | 
| us-west-1 | 608033475327 | 
| us-west-2 | 895885662937 | 
| af-south-1 | 358491847878 | 
| cn-north-1 | 068337069695 | 
| cn-northwest-1 | 068420816659 | 

# イメージをカスタマイズするための考慮事項
<a name="docker-custom-images-considerations"></a>

Docker イメージをカスタマイズする場合、ジョブの正確なランタイムをきめ細かなレベルで選択できます。この機能を使用する場合は、次のベストプラクティスを考慮してください。これらには、イメージのセキュリティ、設定、マウントに関する考慮事項が含まれます。
+ セキュリティは、 AWS お客様とお客様の間の責任共有です。イメージに追加するバイナリのセキュリティパッチの適用は、お客様が行います。[Amazon EMR on EKS でのセキュリティのベストプラクティス](security-best-practices.md) (特に[カスタムイメージの最新のセキュリティ更新プログラムを入手する](security-best-practices.md#security-custom-image) および [最小特権の原則を適用する](security-best-practices.md#security-least-privilege)) に従います。
+ ベースイメージをカスタマイズするときは、Docker ユーザーを `hadoop:hadoop` に変更して、ルートユーザーを使用してジョブが実行されないようにする必要があります。
+ EKS での Amazon EMR は、実行時に、`spark-defaults.conf` などのイメージの設定の上にファイルをマウントします。これらの設定ファイルを上書きするには、カスタムイメージでファイルを直接変更するのではなく、ジョブの送信中に `applicationOverrides` パラメータを使用することをお勧めします。
+ EKS での Amazon EMR は、実行時に特定のフォルダをマウントします。これらのフォルダに加えられた変更は、コンテナでは使用できません。カスタムイメージにアプリケーションまたはその依存関係を追加する場合は、次の事前定義パスの一部ではないディレクトリを選択することをお勧めします。
  + `/var/log/fluentd`
  + `/var/log/spark/user`
  + `/var/log/spark/apps`
  + `/mnt`
  + `/tmp`
  + `/home/hadoop`
+ カスタマイズしたイメージは、Amazon ECR、Docker Hub、プライベートエンタープライズリポジトリなど、Docker と互換性があるリポジトリにアップロードできます。選択した Docker リポジトリを使用した Amazon EKS クラスター認証の設定について詳しくは、「[Pull an Image from a Private Registry](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)」を参照してください。