翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
EMR Serverless イメージのカスタマイズ
Amazon EMR 6.9.0 以降では、カスタムイメージを使用して、Amazon EMR Serverless でアプリケーションの依存関係とランタイム環境を 1 つのコンテナにパッケージ化します。これにより、ワークロードの依存関係を管理する方法が簡単になり、パッケージの移植性が向上します。EMR Serverless イメージをカスタマイズすると、次の利点が得られます。
-
ワークロードに最適化されたパッケージをインストールして設定します。これらのパッケージは、Amazon EMR ランタイム環境のパブリックディストリビューションでは広く利用できません。
-
EMR Serverless をローカルでの開発やテストなど、組織内で現在確立されているビルド、テスト、デプロイの各プロセスと統合します。
-
組織内のコンプライアンスとガバナンスに関する要件を満たす、確立されたセキュリティプロセス (イメージスキャンなど) を適用します。
-
アプリケーションに独自のバージョンの JDK と Python を使用できます。
EMR Serverless は、独自のイメージを作成するときに をベースとして使用するイメージを提供します。ベースイメージは、イメージが EMR Serverless とやり取りするための必須のジャー、設定、ライブラリを備えています。ベースイメージは、Amazon ECR Public Gallery
| Type | イメージ |
|---|---|
|
Spark |
|
|
[Hive] |
|
前提条件
EMR Serverless カスタムイメージを作成する前に、以下の前提条件を満たすようにしてください。
-
EMR Serverless アプリケーションの起動 AWS リージョン に使用するのと同じ に Amazon ECR リポジトリを作成します。Amazon ECR プライベートリポジトリを作成するには、「プライベートリポジトリの作成」を参照してください。
-
Amazon ECR リポジトリへのアクセス権をユーザーに付与するには、このリポジトリのイメージを使用して EMR Serverless アプリケーションを作成または更新するユーザーとロールに次のポリシーを追加します。
Amazon ECR アイデンティティベースのポリシーのその他の例については、「Amazon Elastic Container Registry identity-based policy examples」を参照してください。
ステップ 1: EMR Serverless ベースイメージからカスタムイメージを作成する
まず、任意のベースイメージを使用する FROM 指示で始まる DockerfileFROM 指示の後、イメージに加える変更を含めます。ベースイメージは、USER を自動的に hadoop に設定します。この設定には、含めるすべての変更に対するアクセス許可はありません。回避策として、USER を root に設定し、イメージを変更してから、USER を hadoop:hadoop に戻します。一般的なユースケースのサンプルを参照するには、「」を参照してくださいEMR Serverless でのカスタムイメージの使用。
# Dockerfile FROM public.ecr.aws/emr-serverless/spark/emr-6.9.0:latest USER root # MODIFICATIONS GO HERE # EMRS runs the image as hadoop USER hadoop:hadoop
Dockerfile を取得したら、次のコマンドを使用してイメージを構築します。
# build the docker image docker build . -taws-account-id.dkr.ecr.region.amazonaws.com/my-repository[:tag]or[@digest]
ステップ 2: イメージをローカルで検証する
EMR Serverless は、カスタムイメージを静的にチェックして、基本的なファイル、環境変数、および正しいイメージ設定を検証できるオフラインツールを備えています。ツールをインストールして実行する方法については、Amazon EMR Serverless Image CLI GitHub
ツールをインストールしたら、次のコマンドを実行してイメージを検証します。
amazon-emr-serverless-image \ validate-image -r emr-6.9.0 -t spark \ -iaws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest
出力は次のようになります。
Amazon EMR Serverless - Image CLI Version: 0.0.1 ... Checking if docker cli is installed ... Checking Image Manifest [INFO] Image ID: 9e2f4359cf5beb466a8a2ed047ab61c9d37786c555655fc122272758f761b41a [INFO] Created On: 2022-12-02T07:46:42.586249984Z [INFO] Default User Set to hadoop:hadoop : PASS [INFO] Working Directory Set to : PASS [INFO] Entrypoint Set to /usr/bin/entrypoint.sh : PASS [INFO] HADOOP_HOME is set with value: /usr/lib/hadoop : PASS [INFO] HADOOP_LIBEXEC_DIR is set with value: /usr/lib/hadoop/libexec : PASS [INFO] HADOOP_USER_HOME is set with value: /home/hadoop : PASS [INFO] HADOOP_YARN_HOME is set with value: /usr/lib/hadoop-yarn : PASS [INFO] HIVE_HOME is set with value: /usr/lib/hive : PASS [INFO] JAVA_HOME is set with value: /etc/alternatives/jre : PASS [INFO] TEZ_HOME is set with value: /usr/lib/tez : PASS [INFO] YARN_HOME is set with value: /usr/lib/hadoop-yarn : 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 hadoop-yarn-jars in /usr/lib/hadoop-yarn: PASS [INFO] File Structure Test for hive-bin-files in /usr/bin: PASS [INFO] File Structure Test for hive-jars in /usr/lib/hive/lib: PASS [INFO] File Structure Test for java-bin in /etc/alternatives/jre/bin: PASS [INFO] File Structure Test for tez-jars in /usr/lib/tez: PASS ----------------------------------------------------------------- Overall Custom Image Validation Succeeded. -----------------------------------------------------------------
ステップ 3: イメージを Amazon ECR リポジトリにアップロードする
以下のコマンドを使用して、Amazon ECR リポジトリに ECR イメージをプッシュします。イメージをリポジトリにプッシュするための正しい IAM アクセス許可があることを確認します。詳細については、「Amazon ECR ユーザーガイド」の「イメージのプッシュ」を参照してください。
# login to ECR repo aws ecr get-login-password --region region | docker login --username AWS --password-stdinaws-account-id.dkr.ecr.region.amazonaws.com # push the docker image docker pushaws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest
ステップ 4: カスタムイメージを使用してアプリケーションを作成または更新する
アプリケーションを起動する方法に従って AWS CLI タブ AWS マネジメントコンソール を選択し、次の手順を実行します。
ステップ 5: EMR Serverless がカスタムイメージリポジトリにアクセスできるようにする
Amazon ECR リポジトリに次のリソースポリシーを追加して、EMR Serverless サービスプリンシパルがこのリポジトリの get、describe、download のリクエストを使用できるようにします。
セキュリティのベストプラクティスとして、リポジトリポリシーに aws:SourceArn 条件キーを追加します。IAM グローバル条件キー aws:SourceArn は、EMR Serverless がアプリケーション ARN にのみリポジトリを使用するようにします。Amazon ECR リポジトリポリシーの詳細については、「プライベートリポジトリの作成」を参照してください。
考慮事項と制限事項
カスタムイメージを使用して作業する場合は、次の点を考慮してください。
-
アプリケーションのタイプ (Spark または Hive) とリリースラベル (
emr-6.9.0など) に一致する正しいベースイメージを使用します。 -
EMR Serverless は、Docker ファイル内の
[CMD]または[ENTRYPOINT]の指示を無視します。[COPY]、[RUN]、[WORKDIR]など Docker ファイルで一般的な手順を使用します。 -
カスタムイメージを作成する
TEZ_HOMEときはJAVA_HOME、環境変数SPARK_HOME、HIVE_HOME、 を変更しないでください。 -
カスタムイメージのサイズは 10 GB を超えることはできません。
-
Amazon EMR ベースイメージのバイナリまたはジャーを変更すると、アプリケーションまたはジョブの起動が失敗する可能性があります。
-
Amazon ECR リポジトリは、EMR Serverless アプリケーションの起動に使用する AWS リージョン ものと同じ にある必要があります。