Flink 및 FluentD에 대한 Docker 이미지 사용자 지정 - Amazon EMR

Flink 및 FluentD에 대한 Docker 이미지 사용자 지정

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

Docker 이미지를 사용자 지정하기 전에 다음 사전 조건을 완료했는지 확인합니다.

기본 이미지에는 다른 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 갤러리 이미지에 대한 링크입니다.

다음 단계에서는 Amazon ECR에서 가져온 기본 이미지를 사용자 지정하는 방법을 설명합니다.

  1. 로컬 Workspace에 새 Dockerfile을 생성합니다.

  2. Dockerfile을 수정하고 다음 콘텐츠를 추가합니다. 이 Dockerfile에서는 public.ecr.aws/emr-on-eks/flink/emr-7.3.0-flink:latest에서 가져온 컨테이너 이미지를 사용합니다.

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

    Fluentd를 사용하는 경우 다음 구성을 사용합니다.

    FROM public.ecr.aws/emr-on-eks/fluentd/emr-7.3.0:latest USER root ### Add customization commands here #### USER hadoop:hadoop
  3. Dockerfile에 명령을 추가하여 기본 이미지를 사용자 지정합니다. 다음 명령은 Python 라이브러리를 설치하는 명령을 시연합니다.

    FROM public.ecr.aws/emr-on-eks/flink/emr-7.3.0-flink:latest USER root RUN pip3 install --upgrade boto3 pandas numpy // For python 3 USER hadoop:hadoop
  4. DockerFile을 생성한 같은 디렉터리에서 다음 명령을 실행하여 Docker 이미지를 빌드합니다. -t 플래그 다음에 제공하는 필드는 이미지의 사용자 지정 이름입니다.

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

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

  1. 다음 명령을 실행하여 Docker 이미지를 저장할 Amazon ECR 리포지토리를 생성합니다. 리포지토리의 이름을 입력합니다(예: emr_custom_repo.). 자세한 내용은 Amazon Elastic Container Registry 사용 설명서의 리포지토리 생성을 참조하세요.

    aws ecr create-repository \ --repository-name emr_custom_repo \ --image-scanning-configuration scanOnPush=true \ --region <AWS_REGION>
  2. 다음 명령을 실행하여 기본 레지스트리에 인증합니다. 자세한 내용은 Amazon Elastic Container 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
  3. 이미지를 푸시합니다. 자세한 내용은 Amazon Elastic Container Registry 사용 설명서의 Amazon ECR에 이미지 푸시를 참조하세요.

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

사용자 지정 이미지를 사용하려면 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