EMR Serverless 이미지 사용자 지정 - Amazon EMR

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

EMR Serverless 이미지 사용자 지정

Amazon EMR 6.9.0부터 사용자 지정 이미지를 사용하여 Amazon EMR Serverless를 사용하여 애플리케이션 종속성과 런타임 환경을 단일 컨테이너로 패키징할 수 있습니다. 이렇게 하면 워크로드 종속성을 관리하는 방법이 간소화되고 패키지가 더 휴대성이 향상됩니다. EMR Serverless 이미지를 사용자 지정하면 다음과 같은 이점이 있습니다.

  • 워크로드에 최적화된 패키지를 설치하고 구성합니다. 이러한 패키지는 Amazon EMR 런타임 환경의 퍼블릭 배포에서 널리 제공되지 않을 수 있습니다.

  • EMR Serverless를 로컬 개발 및 테스트를 포함하여 조직 내에서 현재 확립된 빌드, 테스트 및 배포 프로세스와 통합합니다.

  • 조직 내 규정 준수 및 거버넌스 요구 사항을 충족하는 이미지 스캔과 같은 확립된 보안 프로세스를 적용합니다.

  • 애플리케이션에 자체 버전의 JDK 및 Python을 사용할 수 있습니다.

EMR Serverless는 자체 이미지를 생성할 때 기본으로 사용할 수 있는 이미지를 제공합니다. 기본 이미지는 이미지가 EMR Serverless와 상호 작용하기 위한 필수 병, 구성 및 라이브러리를 제공합니다. Amazon ECR Public Gallery 에서 기본 이미지를 찾을 수 있습니다. 애플리케이션 유형(Spark 또는 Hive) 및 릴리스 버전과 일치하는 이미지를 사용합니다. 예를 들어 Amazon EMR 릴리스 6.9.0에서 애플리케이션을 생성하는 경우 다음 이미지를 사용합니다.

유형 이미지

Spark

public.ecr.aws/emr-serverless/spark/emr-6.9.0:latest

Hive

public.ecr.aws/emr-serverless/hive/emr-6.9.0:latest

사전 조건

EMR Serverless 사용자 지정 이미지를 생성하기 전에 다음 사전 조건을 완료합니다.

  1. EMR Serverless 애플리케이션을 시작하는 데 사용하는 AWS 리전 것과 동일한 에서 Amazon ECR리포지토리를 생성합니다. Amazon ECR 프라이빗 리포지토리를 생성하려면 프라이빗 리포지토리 생성을 참조하세요.

  2. 사용자에게 Amazon ECR리포지토리에 대한 액세스 권한을 부여하려면 이 리포지토리의 이미지로 EMR Serverless 애플리케이션을 생성하거나 업데이트하는 사용자 및 역할에 다음 정책을 추가합니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ECRRepositoryListGetPolicy", "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:DescribeImages" ], "Resource": "ecr-repository-arn" } ] }

    Amazon ECR 자격 증명 기반 정책의 자세한 예는 Amazon Elastic Container Registry 자격 증명 기반 정책 예제를 참조하세요.

1단계: EMR Serverless 기본 이미지에서 사용자 지정 이미지 생성

먼저 기본 이미지를 사용하는 FROM 명령으로 시작하는 Dockerfile을 생성합니다. FROM 지시 후 이미지에 적용하려는 수정 사항을 포함할 수 있습니다. 기본 이미지는 를 USER로 자동으로 설정합니다hadoop. 이 설정에 포함된 모든 수정 사항에 대한 권한이 없을 수 있습니다. 해결 방법으로 를 USER로 설정하고 이미지를 root수정한 다음 를 로 USER 다시 설정합니다hadoop:hadoop. 일반적인 사용 사례에 대한 샘플을 보려면 섹션을 참조하세요EMR서버리스에서 사용자 지정 이미지 사용.

# Dockerfile FROM public.ecr.aws/emr-serverless/spark/emr-6.9.0:latest USER root # MODIFICATIONS GO HERE # EMRS will run the image as hadoop USER hadoop:hadoop

Dockerfile을 만든 후 다음 명령을 사용하여 이미지를 빌드합니다.

# build the docker image docker build . -t aws-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 \ -i aws-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 이미지를 Amazon ECR리포지토리로 푸시합니다. 이미지를 리포지토리로 푸시할 수 있는 올바른 IAM 권한이 있는지 확인합니다. 자세한 내용은 Amazon ECR 사용 설명서이미지 푸시를 참조하세요.

# login to ECR repo aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws-account-id.dkr.ecr.region.amazonaws.com # push the docker image docker push aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest

4단계: 사용자 지정 이미지로 애플리케이션 생성 또는 업데이트

애플리케이션을 시작하는 방법에 따라 AWS Management Console 탭 또는 AWS CLI 탭을 선택한 다음 다음 단계를 완료합니다.

Console
  1. https://console.aws.amazon.com/emr 에서 EMR Studio 콘솔에 로그인합니다. 애플리케이션으로 이동하거나 애플리케이션 생성 의 지침을 사용하여 새 애플리케이션을 생성합니다.

  2. EMR Serverless 애플리케이션을 생성하거나 업데이트할 때 사용자 지정 이미지를 지정하려면 애플리케이션 설정 옵션에서 사용자 지정 설정을 선택합니다.

  3. 사용자 지정 이미지 설정 섹션에서 이 애플리케이션에 사용자 지정 이미지 사용 확인란을 선택합니다.

  4. Amazon ECR 이미지를 URI 이미지 URI 필드에 붙여 넣습니다. EMR Serverless는 애플리케이션의 모든 작업자 유형에 이 이미지를 사용합니다. 또는 다른 사용자 지정 이미지를 선택하고 각 작업자 유형에 URIs 대해 다른 Amazon ECR 이미지를 붙여넣을 수 있습니다.

CLI
  • image-configuration 파라미터를 사용하여 애플리케이션을 생성합니다. EMR Serverless는 이 설정을 모든 작업자 유형에 적용합니다.

    aws emr-serverless create-application \ --release-label emr-6.9.0 \ --type SPARK \ --image-configuration '{ "imageUri": "aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest" }'

    각 작업자 유형에 대해 이미지 설정이 다른 애플리케이션을 생성하려면 worker-type-specifications 파라미터를 사용합니다.

    aws emr-serverless create-application \ --release-label emr-6.9.0 \ --type SPARK \ --worker-type-specifications '{ "Driver": { "imageConfiguration": { "imageUri": "aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest" } }, "Executor" : { "imageConfiguration": { "imageUri": "aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest" } } }'

    애플리케이션을 업데이트하려면 image-configuration 파라미터를 사용합니다. EMR Serverless는 이 설정을 모든 작업자 유형에 적용합니다.

    aws emr-serverless update-application \ --application-id application-id \ --image-configuration '{ "imageUri": "aws-account-id.dkr.ecr.region.amazonaws.com/my-repository:tag/@digest" }'

5단계: EMR Serverless가 사용자 지정 이미지 리포지토리에 액세스하도록 허용

EMR Serverless 서비스 보안 주체가 이 ECR리포지토리의 get, describedownload 요청을 사용할 수 있도록 Amazon 리포지토리에 다음 리소스 정책을 추가합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Emr Serverless Custom Image Support", "Effect": "Allow", "Principal": { "Service": "emr-serverless.amazonaws.com" }, "Action": [ "ecr:BatchGetImage", "ecr:DescribeImages", "ecr:GetDownloadUrlForLayer" ], "Condition":{ "StringEquals":{ "aws:SourceArn": "arn:aws:emr-serverless:region:aws-account-id:/applications/application-id" } } } ] }

보안 모범 사례로 리포지토리 정책에 aws:SourceArn 조건 키를 추가합니다. IAM 전역 조건 키는 EMR Serverless가 애플리케이션 에만 리포지토리를 사용하도록 aws:SourceArn 합니다ARN. Amazon ECR리포지토리 정책에 대한 자세한 내용은 프라이빗 리포지토리 생성을 참조하세요.

고려 사항 및 제한

사용자 지정 이미지로 작업할 때는 다음 사항을 고려하세요.

  • 애플리케이션의 유형(Spark 또는 Hive) 및 릴리스 레이블(예: emr-6.9.0)과 일치하는 올바른 기본 이미지를 사용합니다.

  • EMR 서버리스는 Docker 파일의 [CMD] 또는 [ENTRYPOINT] 지침을 무시합니다. , 및 와 같은 Docker 파일의 일반적인 지침을 사용합니다[COPY][RUN][WORKDIR].

  • 사용자 지정 이미지를 생성할 TEZ_HOME 때 환경 변수 JAVA_HOME, HIVE_HOME, SPARK_HOME를 수정해서는 안 됩니다.

  • 사용자 지정 이미지의 크기는 5GB를 초과할 수 없습니다.

  • Amazon EMR 기본 이미지에서 바이너리 또는 병을 수정하면 애플리케이션 또는 작업 시작 실패가 발생할 수 있습니다.

  • Amazon ECR리포지토리는 EMR Serverless 애플리케이션을 시작하는 데 사용하는 AWS 리전 것과 동일해야 합니다.