

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Personalização de uma imagem do EMR Sem Servidor
<a name="application-custom-image"></a>

A partir do Amazon EMR 6.9.0, use 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 não estão 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ê usa 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](https://gallery.ecr.aws/emr-serverless/). 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
<a name="worker-configs"></a>

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

1. Crie um repositório Amazon ECR no mesmo Região da AWS que você usa para iniciar aplicativos EMR Serverless. Para criar um repositório privado do Amazon ECR, consulte [Criar um repositório privado](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html).

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

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "ECRRepositoryListGetPolicy",
         "Effect": "Allow",
         "Action": [
           "ecr:GetDownloadUrlForLayer",
           "ecr:BatchGetImage",
           "ecr:DescribeImages"
         ],
         "Resource": [
           "arn:aws:ecr:*:123456789012:repository/my-repo"
         ]
       }
     ]
   }
   ```

------

   Para obter mais exemplos de políticas baseadas em identidade do Amazon ECR, consulte [Exemplos de políticas baseadas em identidade do Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html).

## Etapa 1: criar uma imagem personalizada usando imagens base do EMR Sem Servidor
<a name="create-image"></a>

Primeiro, crie um [Dockerfile](https://docs.docker.com/engine/reference/builder/) que comece com uma instrução `FROM` que usa sua imagem base preferencial. Após a instrução `FROM`, inclua qualquer modificação que desejar fazer na imagem. A imagem base define automaticamente o valor de `USER` para `hadoop`. Essa configuração não tem 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 consultar exemplos de casos de uso comuns, veja [Uso de imagens personalizadas com o EMR Sem Servidor](using-custom-images.md).

```
# Dockerfile
FROM public.ecr.aws/emr-serverless/spark/emr-6.9.0:latest

USER root
# MODIFICATIONS GO HERE

# EMRS runs 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
<a name="validate"></a>

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 a CLI de imagem [sem servidor do Amazon EMR. GitHub](https://github.com/awslabs/amazon-emr-serverless-image-cli)

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

A saída é semelhante à seguinte.

```
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
<a name="upload-image"></a>

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 [Enviar uma imagem](https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-push.html) 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
<a name="create-app"></a>

Escolha a Console de gerenciamento da AWS guia ou AWS CLI guia de acordo com a forma como você deseja iniciar seu aplicativo 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.](https://console.aws.amazon.com/emr) Navegue até a aplicação ou crie uma com as instruções em [Criação de aplicações](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/studio.html#studio-create-app).

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

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

1. 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 **imagens personalizadas diferentes e colar imagens** diferentes do Amazon ECR URIs 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
<a name="access-repo"></a>

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.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EmrServerlessCustomImageSupport",
      "Effect": "Allow",
      "Action": [
        "ecr:BatchGetImage",
        "ecr:DescribeImages",
        "ecr:GetDownloadUrlForLayer"
      ],
      "Resource": "arn:aws:ecr:*:123456789012:repository/my-repo",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:emr-serverless:*:123456789012:/applications/*"
        }
      }
    }
  ]
}
```

------

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 [Criando um repositório privado](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policies.html).

## Considerações e limitações
<a name="considerations"></a>

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]`.
+ Não modifique as variáveis de ambiente `JAVA_HOME`, `SPARK_HOME`, `HIVE_HOME` e `TEZ_HOME` ao criar uma imagem personalizada.
+ As imagens personalizadas não podem exceder 10 GB de tamanho.
+ 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 no mesmo Região da AWS que você usa para iniciar aplicativos EMR Serverless.