

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

# Flink と FluentD の Docker イメージのカスタマイズ
<a name="jobruns-flink-docker-flink-fluentd"></a>

Amazon EMR on EKS の Docker イメージを Apache Flink または FluentD のイメージを使用してカスタマイズするには、次の手順に従います。これには、ベースイメージの取得、カスタマイズ、公開、ワークロードの送信に関する技術ガイダンスが含まれます。

**Topics**
+ [前提条件](#jobruns-flink-docker-flink-fluentd-prereqs)
+ [ステップ 1: Amazon Elastic Container Registry からベースイメージを取得する](#jobruns-flink-docker-flink-fluentd-retrieve-base)
+ [ステップ 2: ベースイメージをカスタマイズする](#jobruns-flink-docker-flink-fluentd-customize-image)
+ [ステップ 3: カスタムイメージを公開する](#jobruns-flink-docker-flink-fluentd-publish-image)
+ [ステップ 4: カスタムイメージを使用して Amazon EMR で Flink ワークロードを送信する](#jobruns-flink-docker-flink-fluentd-submit-workload)

## 前提条件
<a name="jobruns-flink-docker-flink-fluentd-prereqs"></a>

Docker イメージをカスタマイズする前に、以下の前提条件を満たしていることを確認してください。
+ [Amazon EMR on EKS での Flink Kubernetes オペレータのセットアップ](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/jobruns-flink-kubernetes-operator-setup.html)手順が完了している。
+ ご自分の環境に Docker をインストールしている。詳細については、[Get Docker](https://docs.docker.com/get-docker/) を参照してください。

## ステップ 1: Amazon Elastic Container Registry からベースイメージを取得する
<a name="jobruns-flink-docker-flink-fluentd-retrieve-base"></a>

ベースイメージには、Amazon EMR ランタイムと、他の AWS のサービスへのアクセスに必要なコネクタが含まれています。Flink バージョン 6.14.0 以降で Amazon EMR on EKS を使用している場合は、Amazon ECR Public Gallery からベースイメージを取得できます。ギャラリーを参照してイメージリンクを見つけ、そのイメージをローカルワークスペースに取り込みます。例えば、Amazon EMR 6.14.0 リリースの場合、次の `docker pull` コマンドは最新の標準ベースイメージを返します。`emr-6.14.0:latest` を必要なリリースバージョンに置き換えます。

```
docker pull public.ecr.aws/emr-on-eks/flink/emr-6.14.0-flink:latest
```

以下は、Flink ギャラリーイメージと Fluentd ギャラリーイメージへのリンクです。
+ [emr-on-eks/flink/emr-6.14.0-flink](https://gallery.ecr.aws/emr-on-eks/flink/emr-6.14.0-flink)
+ [emr-on-eks/fluentd/emr-6.14.0(](https://gallery.ecr.aws/emr-on-eks/fluentd/emr-6.14.0)

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

以下の手順では、Amazon ECR からプルしたベースイメージをカスタマイズする方法を説明します。

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

1. `Dockerfile` を編集し、以下の内容を追加します。この `Dockerfile` は、`public.ecr.aws/emr-on-eks/flink/emr-7.12.0-flink:latest` からプルしたコンテナイメージを使用します。

   ```
   FROM public.ecr.aws/emr-on-eks/flink/emr-7.12.0-flink:latest
   USER root
   ### Add customization commands here ####
   USER hadoop:hadoop
   ```

   `Fluentd` を使用している場合は、次の設定を使用します。

   ```
   FROM public.ecr.aws/emr-on-eks/fluentd/emr-7.12.0:latest
   USER root
   ### Add customization commands here ####
   USER hadoop:hadoop
   ```

1. `Dockerfile` にコマンドを追加して、ベースイメージをカスタマイズします。次のコマンドは、Python ライブラリをインストールする方法を示しています。

   ```
   FROM public.ecr.aws/emr-on-eks/flink/emr-7.12.0-flink:latest
   USER root
   RUN pip3 install --upgrade boto3 pandas numpy // For python 3
   USER hadoop:hadoop
   ```

1. `DockerFile` が作成されたディレクトリと同じディレクトリで、次のコマンドを実行して Docker イメージを作成します。`-t` フラグの後に入力するフィールドは、イメージのカスタム名です。

   ```
   docker build -t <YOUR_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com/<ECR_REPO>:<ECR_TAG>
   ```

## ステップ 3: カスタムイメージを公開する
<a name="jobruns-flink-docker-flink-fluentd-publish-image"></a>

新しい Docker イメージを Amazon ECR レジストリに公開できるようになりました。

1. 次のコマンドを実行して、Docker イメージを保存するための Amazon ECR リポジトリを作成します。リポジトリの名前 (例: `emr_custom_repo.`) を指定します。詳細については、「Amazon Elastic Container Registry ユーザーガイド」の「[リポジトリの作成](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html#cli-create-repository)」を参照してください。

   ```
   aws ecr create-repository \
          --repository-name emr_custom_repo \
          --image-scanning-configuration scanOnPush=true \
          --region <AWS_REGION>
   ```

1. 次のコマンドを実行して、デフォルトレジストリに対して認証します。詳細については、「Amazon Elastic Container Registry ユーザーガイド」の「[デフォルトレジストリの認証](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html#cli-authenticate-registry)」を参照してください。

   ```
   aws ecr get-login-password --region <AWS_REGION> | docker login --username AWS --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com
   ```

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

   ```
   docker push <YOUR_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com/<ECR_REPO>:<ECR_TAG>
   ```

## ステップ 4: カスタムイメージを使用して Amazon EMR で Flink ワークロードを送信する
<a name="jobruns-flink-docker-flink-fluentd-submit-workload"></a>

カスタムイメージを使用するには、`FlinkDeployment` 仕様に以下の変更を加えます。そのためには、デプロイ仕様の `spec.image` 行に独自のイメージを入力します。

```
apiVersion: flink.apache.org/v1beta1
   kind: FlinkDeployment
   metadata:
     name: basic-example
   spec:
     flinkVersion: v1_18
     image: <YOUR_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com/<ECR_REPO>:<ECR_TAG>
     imagePullPolicy: Always
     flinkConfiguration:
           taskmanager.numberOfTaskSlots: "1"
```

Fluentd ジョブにカスタムイメージを使用するには、デプロイ仕様の `monitoringConfiguration.image` 行に独自のイメージを入力します。

```
  monitoringConfiguration:
       image: <YOUR_ACCOUNT_ID>.dkr.ecr.<YOUR_ECR_REGION>.amazonaws.com/<ECR_REPO>:<ECR_TAG>
       cloudWatchMonitoringConfiguration:
         logGroupName: flink-log-group
         logStreamNamePrefix: custom-fluentd
```