

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Flink 및 FluentD에 대한 Docker 이미지 사용자 지정
<a name="jobruns-flink-docker-flink-fluentd"></a>

다음 단계를 수행하여 Apache Flink 또는 FluentD 이미지를 사용해 Amazon EMR on EKS에 대한 Docker 이미지를 사용자 지정합니다. 여기에는 기본 이미지 가져오기, 사용자 지정, 게시 및 워크로드 제출에 대한 기술 지침이 포함됩니다.

**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>

기본 이미지에는 다른 AWS 서비스에 액세스하는 데 사용되는 Amazon EMR 런타임 및 커넥터가 포함되어 있습니다. Flink 버전 6.14.0 이상의 EKS에서 Amazon EMR on EKS를 사용하는 경우 Amazon ECR 퍼블릭 갤러리에서 기본 이미지를 가져올 수 있습니다. 갤러리를 탐색하여 이미지 링크를 찾은 다음, 이미지를 로컬 Workspace로 가져옵니다. 예를 들어 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. 로컬 Workspace에 새 `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>

이제 Amazon ECR 레지스트리에 새 Docker 이미지를 게시할 수 있습니다.

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
```