Personalização de uma imagem do EMR Sem Servidor - Amazon EMR

Personalização de uma imagem do EMR Sem Servidor

A partir do Amazon EMR 6.9.0, é possível usar imagens personalizadas para empacotar dependências de aplicações e ambientes de runtime em um único contêiner com o Amazon EMR Sem Servidor. Isso simplifica a forma como você gerencia as dependências da workload e torna seus pacotes mais portáteis. Quando você personaliza a imagem do EMR Sem Servidor, ela oferece os seguintes benefícios:

  • Instala e configura pacotes otimizados para as workloads. Esses pacotes podem não estar amplamente disponíveis na distribuição pública dos ambientes de runtime do Amazon EMR.

  • Integra o EMR Sem Servidor aos processos atuais de criação, teste e implantação estabelecidos em sua organização, incluindo desenvolvimento e testes locais.

  • Aplica os processos de segurança estabelecidos, como a verificação de imagens, que atendem aos requisitos de conformidade e governança da sua organização.

  • Permite que você use suas próprias versões do JDK e do Python em aplicações.

O EMR Sem Servidor fornece imagens que você pode usar como base ao criar suas próprias imagens. A imagem base fornece os jars, a configuração e as bibliotecas essenciais para que a imagem interaja com o EMR Sem Servidor. É possível encontrar a imagem base na Galeria pública do Amazon ECR. Use a imagem que corresponda ao seu tipo de aplicação (Spark ou Hive) e à versão de lançamento. Por exemplo, se você criar uma aplicação no Amazon EMR 6.9.0, use as imagens a seguir.

Tipo Imagem

Spark

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

Hive

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

Pré-requisitos

Antes de criar uma imagem personalizada do EMR Sem Servidor, preencha estes pré-requisitos.

  1. Crie um repositório do Amazon ECR na mesma Região da AWS que você usa para iniciar aplicações do EMR Sem Servidor. Para criar um repositório privado do Amazon ECR, consulte Criar um repositório privado.

  2. Para conceder aos usuários acesso ao repositório do Amazon ECR, adicione as políticas a seguir aos usuários e perfis que criam ou atualizam aplicações do EMR Sem Servidor com imagens desse repositório.

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

    Para obter mais exemplos de políticas baseadas em identidade do Amazon ECR, consulte Amazon Elastic Container Registry identity-based policy examples.

Etapa 1: criar uma imagem personalizada usando imagens base do EMR Sem Servidor

Primeiro, crie um Dockerfile que comece com uma instrução FROM que usa sua imagem base preferencial. Após a instrução FROM, você pode incluir qualquer modificação que desejar fazer na imagem. A imagem base define automaticamente o valor de USER para hadoop. Essa configuração pode não ter permissões para todas as modificações que você inclui. Como solução, defina o USER para root, modifique sua imagem e, em seguida, defina o USER de volta para hadoop:hadoop. Para ver exemplos de casos de uso comuns, consulte Uso de imagens personalizadas com o EMR Sem Servidor.

# 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

Depois que você tiver o Dockerfile, compile a imagem com o comando a seguir.

# build the docker image docker build . -t aws-account-id.dkr.ecr.region.amazonaws.com/my-repository[:tag]or[@digest]

Etapa 2: validar a imagem localmente

O EMR Sem Servidor fornece uma ferramenta off-line que pode verificar estaticamente sua imagem personalizada para validar arquivos base, variáveis de ambiente e configurações corretas de imagem. Para obter informações sobre como instalar e executar a ferramenta, consulte o GitHub sobre a CLI da imagem do Amazon EMR Sem Servidor.

Depois de instalar a ferramenta, execute o comando a seguir para validar uma imagem:

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

Você deve ver uma saída semelhante a mostrada a seguir.

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

Etapa 3: upload da imagem em um repositório do Amazon ECR

Envie a imagem do Amazon ECR para o repositório do Amazon ECR com os comandos a seguir. Verifique se você tem as permissões corretas do IAM para enviar a imagem ao repositório. Para obter mais informações, consulte Pushing an image no Guia do usuário do 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

Etapa 4: criar ou atualizar uma aplicação com imagens personalizadas

Escolha a guia AWS Management Console ou a AWS CLI de acordo com a forma como deseja iniciar a aplicação e, em seguida, conclua as etapas a seguir.

Console
  1. Faça login no console do EMR Studio em https://console.aws.amazon.com/emr. Navegue até a aplicação ou crie uma com as instruções em Criação de aplicações.

  2. Para especificar imagens personalizadas ao criar ou atualizar uma aplicação do EMR Sem Servidor, selecione Configurações personalizadas nas opções de configuração da aplicação.

  3. Na seção Configurações de imagem personalizada, marque a caixa de seleção Usar a imagem personalizada com esta aplicação.

  4. Cole o URI da imagem do Amazon ECR no campo URI da imagem. O EMR Sem Servidor usa essa imagem para todos os tipos de trabalhadores da aplicação. Como alternativa, você pode escolher Diferentes imagens personalizadas e colar diferentes URIs de imagem do Amazon ECR para cada tipo de trabalhador.

CLI
  • Crie uma aplicação com o parâmetro image-configuration. O EMR Sem Servidor aplica essa configuração a todos os tipos de trabalhadores.

    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" }'

    Para criar uma aplicação com configurações de imagem diferentes para cada tipo de trabalhador, use o parâmetro 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" } } }'

    Para atualizar uma aplicação, use o parâmetro image-configuration. O EMR Sem Servidor aplica essa configuração a todos os tipos de trabalhadores.

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

Etapa 5: permitir que o EMR Sem Servidor acesse o repositório de imagens personalizadas

Adicione a política de recursos a seguir ao repositório do Amazon ECR para permitir que a entidade principal do serviço do EMR Sem Servidor use as solicitações get, describe e download desse repositório.

{ "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" } } } ] }

Como uma prática recomendada de segurança, adicione uma chave de condição aws:SourceArn à política do repositório. A chave de condição global do IAM aws:SourceArn garante que o EMR Sem Servidor use o repositório somente para o ARN de uma aplicação. Para obter mais informações sobre as políticas de repositório do Amazon ECR, consulte Creating a private repository.

Considerações e limitações

Considere o seguinte ao trabalhar com imagens personalizadas:

  • Use a imagem base correta que corresponda ao tipo (Spark ou Hive) e ao rótulo de lançamento (por exemplo, emr-6.9.0) da aplicação.

  • O EMR Sem Servidor ignora as instruções [CMD] ou [ENTRYPOINT] no arquivo Docker. Use instruções comuns no arquivo Docker, como [COPY], [RUN] e [WORKDIR].

  • Você não deve modificar as variáveis de ambiente JAVA_HOME, SPARK_HOME, HIVE_HOME e TEZ_HOME ao criar uma imagem personalizada.

  • As imagens personalizadas não devem exceder 5 GB.

  • Se você modificar binários ou jars nas imagens base do Amazon EMR, isso poderá causar falhas no lançamento de aplicações ou trabalhos.

  • O repositório do Amazon ECR deve estar na mesma Região da AWS que você usa para iniciar aplicações do EMR Sem Servidor.