EMR Serverless 이미지 사용자 지정
Amazon EMR 6.9.0부터 사용자 지정 이미지를 사용하여 Amazon EMR Serverless를 사용하여 애플리케이션 종속 항목과 런타임 환경을 단일 컨테이너로 패키징할 수 있습니다. 이 경우 워크로드 종속 항목을 관리하는 방법이 간소화되고 패키지 이식성이 개선됩니다. EMR Serverless 이미지를 사용자 지정하면 다음과 같은 이점이 있습니다.
-
워크로드에 최적화된 패키지를 설치하고 구성합니다. 이 패키지는 Amazon EMR 런타임 환경의 퍼블릭 배포에 널리 사용되지 않을 수 있습니다.
-
로컬 개발 및 테스트를 포함하여 조직 내 현재 설정된 빌드, 테스트 및 배포 프로세스와 EMR Serverless를 통합합니다.
-
조직 내 규정 준수 및 거버넌스 요구 사항을 충족하는 확립된 보안 프로세스(예: 이미지 스캔)를 적용합니다.
-
애플리케이션에 대해 자체 JDK 및 Python 버전을 사용할 수 있습니다.
EMR Serverless는 자체 이미지를 생성하는 경우 기본으로 사용할 수 있는 이미지를 제공합니다. 기본 이미지는 이미지가 EMR Serverless와 상호 작용하기 위한 필수 jar, 구성 및 라이브러리를 제공합니다. Amazon ECR 퍼블릭 갤러리
유형 | 이미지 |
---|---|
Spark |
|
Hive |
|
사전 조건
EMR Serverless 사용자 지정 이미지를 생성하기 전에 다음 사전 조건을 완료합니다.
-
EMR Serverless 애플리케이션을 시작하는 데 사용하는 동일한 AWS 리전에서 Amazon ECR 리포지토리를 생성합니다. Amazon ECR 프라이빗 리포지토리를 생성하려면 프라이빗 리포지토리 생성을 참조하세요.
-
사용자에게 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
명령으로 시작하는 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 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 pushaws-account-id
.dkr.ecr.region
.amazonaws.com/my-repository
:tag/@digest
4단계: 사용자 지정 이미지를 사용하여 애플리케이션 생성 또는 업데이트
애플리케이션을 시작하는 방법에 따라 AWS Management Console 탭 또는 AWS CLI 탭을 선택한 후에 다음 단계를 완료합니다.
5단계: EMR Serverless가 사용자 지정 이미지 리포지토리에 액세스하도록 허용
Amazon ECR 리포지토리에 다음 리소스 정책을 추가하여 EMR Serverless 서비스 위탁자가 이 리포지토리에서 get
, describe
및 download
요청을 사용하도록 허용합니다.
{ "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 전역 조건 키 aws:SourceArn
을 사용하면 EMR Serverless가 애플리케이션 ARN에만 리포지토리를 사용하도록 보장합니다. Amazon ECR 리포지토리 정책에 대한 자세한 내용은 프라이빗 리포지토리 생성을 참조하세요.
고려 사항 및 제한
사용자 지정 이미지를 작업하는 경우 다음을 고려합니다.
-
애플리케이션에 대한 유형(Spark 또는 Hive) 및 릴리스 레이블(예:
emr-6.9.0
)과 일치하는 올바른 기본 이미지를 사용합니다. -
EMR Serverless는 Docker 파일의
[CMD]
또는[ENTRYPOINT]
명령을 무시합니다. Docker 파일에서 공통 명령(예:[COPY]
,[RUN]
,[WORKDIR]
)을 사용합니다. -
사용자 지정 이미지를 생성하는 경우 환경 변수
JAVA_HOME
,SPARK_HOME
,HIVE_HOME
,TEZ_HOME
을 수정해서는 안 됩니다. -
사용자 지정 이미지의 크기는 5GB를 초과할 수 없습니다.
-
Amazon EMR 기본 이미지에서 바이너리 또는 jar을 수정하는 경우 애플리케이션 또는 작업 시작에 실패할 수 있습니다.
-
Amazon ECR 리포지토리는 EMR Serverless 애플리케이션을 시작하는 데 사용하는 동일한 AWS 리전에 있어야 합니다.