

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Personnalisation d'une image EMR sans serveur
<a name="application-custom-image"></a>

À partir d'Amazon EMR 6.9.0, utilisez des images personnalisées pour regrouper les dépendances des applications et les environnements d'exécution dans un conteneur unique avec Amazon EMR Serverless. Cela simplifie la gestion des dépendances de charge de travail et rend vos packages plus portables. Lorsque vous personnalisez votre image EMR Serverless, elle offre les avantages suivants :
+ Installe et configure des packages optimisés pour vos charges de travail. Ces packages ne sont pas largement disponibles dans la distribution publique des environnements d'exécution Amazon EMR.
+ Intègre EMR Serverless aux processus de création, de test et de déploiement existants au sein de votre organisation, y compris le développement et les tests locaux.
+ Applique des processus de sécurité établis, tels que la numérisation d'images, qui répondent aux exigences de conformité et de gouvernance au sein de votre organisation.
+ Vous permet d'utiliser vos propres versions de JDK et Python pour vos applications.

EMR Serverless fournit des images qui vous serviront de base lorsque vous créez vos propres images. L'image de base fournit les fichiers JAR, la configuration et les bibliothèques essentiels pour que l'image interagisse avec EMR Serverless. Vous pouvez trouver l'image de base dans la [galerie publique Amazon ECR](https://gallery.ecr.aws/emr-serverless/). Utilisez l'image correspondant au type d'application (Spark ou Hive) et à la version de votre version. Par exemple, si vous créez une application sur Amazon EMR version 6.9.0, utilisez les images suivantes.


| Type | Image | 
| --- | --- | 
|  Spark  |  `public.ecr.aws/emr-serverless/spark/emr-6.9.0:latest`  | 
|  Hive  |  `public.ecr.aws/emr-serverless/hive/emr-6.9.0:latest`  | 

## Conditions préalables
<a name="worker-configs"></a>

Avant de créer une image personnalisée EMR Serverless, remplissez ces conditions préalables.

1. Créez un référentiel Amazon ECR dans le même référentiel Région AWS que celui que vous utilisez pour lancer des applications EMR Serverless. Pour créer un référentiel privé Amazon ECR, reportez-vous à la section [Création d'un référentiel privé](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html).

1. Pour autoriser les utilisateurs à accéder à votre référentiel Amazon ECR, ajoutez les politiques suivantes aux utilisateurs et aux rôles qui créent ou mettent à jour des applications EMR sans serveur avec des images provenant de ce référentiel. 

------
#### [ 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"
         ]
       }
     ]
   }
   ```

------

   Pour plus d'exemples de politiques basées sur l'identité Amazon ECR, consultez les exemples de politiques basées sur l'[identité Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html).

## Étape 1 : Création d'une image personnalisée à partir d'images de base EMR Serverless
<a name="create-image"></a>

Créez d'abord un [Dockerfile](https://docs.docker.com/engine/reference/builder/) qui commence par une `FROM` instruction utilisant votre image de base préférée. Après les `FROM` instructions, incluez les modifications que vous souhaitez apporter à l'image. L'image de base définit automatiquement le `USER` à`hadoop`. Ce paramètre ne dispose pas d'autorisations pour toutes les modifications que vous incluez. Pour contourner le problème, réglez le `USER` paramètre sur`root`, modifiez votre image, puis `USER` redéfinissez le paramètre sur. `hadoop:hadoop` Pour consulter des exemples de cas d'utilisation courants, reportez-vous à[Utilisation d'images personnalisées avec EMR Serverless](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
```

Une fois que vous avez le Dockerfile, créez l'image à l'aide de la commande suivante.

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

## Étape 2 : Valider l'image localement
<a name="validate"></a>

EMR Serverless fournit un outil hors ligne qui permet de vérifier statiquement votre image personnalisée afin de valider les fichiers de base, les variables d'environnement et les configurations d'image correctes. Pour plus d'informations sur l'installation et l'exécution de l'outil, reportez-vous à [la CLI Amazon EMR Serverless Image](https://github.com/awslabs/amazon-emr-serverless-image-cli). GitHub

Après avoir installé l'outil, exécutez la commande suivante pour valider une image :

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

Le résultat est similaire à ce qui suit.

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

## Étape 3 : Chargez l'image dans votre référentiel Amazon ECR
<a name="upload-image"></a>

Transférez votre image Amazon ECR vers votre référentiel Amazon ECR à l'aide des commandes suivantes. Assurez-vous de disposer des autorisations IAM appropriées pour transférer l'image vers votre référentiel. Pour plus d'informations, consultez la section [Envoyer une image](https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-push.html) dans le *guide de l'utilisateur 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
```

## Étape 4 : créer ou mettre à jour une application avec des images personnalisées
<a name="create-app"></a>

Choisissez l' AWS Management Console onglet ou AWS CLI l'onglet en fonction de la façon dont vous souhaitez lancer votre application, puis effectuez les étapes suivantes.

------
#### [ Console ]

1. [Connectez-vous à la console EMR Studio à l'adresse /emr. https://console.aws.amazon.com](https://console.aws.amazon.com/emr) Accédez à votre application ou créez-en une nouvelle en suivant les instructions de la section [Créer une application](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/studio.html#studio-create-app).

1. Pour spécifier des images personnalisées lorsque vous créez ou mettez à jour une application EMR Serverless, sélectionnez **Paramètres personnalisés dans les** options de configuration de l'application.

1. Dans la section **Paramètres d'image personnalisés**, cochez **la case Utiliser l'image personnalisée avec cette application**.

1. Collez l'URI de l'image Amazon ECR dans le champ **Image URI**. EMR Serverless utilise cette image pour tous les types de travailleurs de l'application. Vous pouvez également choisir **Différentes images personnalisées** et coller une image Amazon ECR différente URIs pour chaque type de travailleur.

------
#### [ CLI ]
+ Créez une application avec le `image-configuration` paramètre. EMR Serverless applique ce paramètre à tous les types de travailleurs.

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

  Pour créer une application avec des paramètres d'image différents pour chaque type de travailleur, utilisez le `worker-type-specifications` paramètre.

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

  Pour mettre à jour une application, utilisez le `image-configuration` paramètre. EMR Serverless applique ce paramètre à tous les types de travailleurs.

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

------

## Étape 5 : Autoriser EMR Serverless à accéder au référentiel d'images personnalisé
<a name="access-repo"></a>

Ajoutez la politique de ressources suivante au référentiel Amazon ECR pour permettre au principal du service EMR Serverless d'utiliser `get` les demandes`describe`, `download` et provenant de ce référentiel.

------
#### [ 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/*"
        }
      }
    }
  ]
}
```

------

La meilleure pratique en matière de sécurité consiste à ajouter une clé de `aws:SourceArn` condition à la politique du référentiel. La clé de condition globale IAM `aws:SourceArn` garantit qu'EMR Serverless utilise le référentiel uniquement pour un ARN d'application. Pour plus d'informations sur les politiques relatives aux référentiels Amazon ECR, consultez la section [Création d'un référentiel privé](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policies.html).

## Considérations et restrictions
<a name="considerations"></a>

Lorsque vous travaillez avec des images personnalisées, tenez compte des points suivants :
+ Utilisez l'image de base correcte qui correspond au type (Spark ou Hive) et à l'étiquette de version (par exemple`emr-6.9.0`) de votre application.
+ EMR Serverless ignore les `[ENTRYPOINT]` instructions contenues dans le `[CMD]` fichier Docker. Utilisez les instructions courantes du fichier Docker, telles que `[COPY]``[RUN]`, et`[WORKDIR]`.
+ Ne modifiez pas les variables `JAVA_HOME` `SPARK_HOME` d'`HIVE_HOME`environnement `TEZ_HOME` lorsque vous créez une image personnalisée.
+ La taille des images personnalisées ne peut pas dépasser 10 Go.
+ Si vous modifiez des fichiers binaires ou des fichiers JAR dans les images de base d'Amazon EMR, cela peut entraîner l'échec du lancement d'applications ou de tâches.
+ Le référentiel Amazon ECR doit se trouver dans le même emplacement Région AWS que celui que vous utilisez pour lancer les applications EMR Serverless.