

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.

# Développement et test de scripts AWS de tâches Glue localement
<a name="aws-glue-programming-etl-libraries"></a>

Lorsque vous développez et testez vos scripts de travail AWS Glue for Spark, plusieurs options sont disponibles :
+ AWS Console Glue Studio
  + Visual editor (Éditeur visuel)
  + Éditeur de script
  + AWS Carnet Glue Studio
+ Sessions interactives
  + Bloc-notes Jupyter
+ Image Docker
  + Développement local
  + Développement à distance

Vous pouvez choisir l'une des options ci-dessus en fonction de vos besoins.

Si vous préférez ne pas coder ou moins d'expérience en matière de code, l'éditeur visuel AWS Glue Studio est un bon choix.

Si vous préférez une expérience interactive, le bloc-notes AWS Glue Studio est un bon choix. Pour plus d'informations, consultez la section [Utilisation de Notebooks avec AWS Glue Studio et AWS Glue](https://docs.aws.amazon.com/glue/latest/ug/notebooks-chapter.html). Si vous souhaitez utiliser votre propre environnement local, les sessions interactives constituent un bon choix. Pour plus d'informations, consultez la section [Utilisation de sessions interactives avec AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/interactive-sessions-chapter.html).

Si vous préférez une expérience de local/remote développement, l'image Docker est un bon choix. Cela vous permet de développer et de tester des scripts de travail AWS Glue for Spark où vous le souhaitez, sans encourir de frais liés à AWS Glue.

Si vous préférez le développement local sans Docker, l'installation du répertoire de la bibliothèque AWS Glue ETL localement est un bon choix.

## Développement à l'aide AWS de Glue Studio
<a name="develop-using-studio"></a>

L'éditeur visuel AWS Glue Studio est une interface graphique qui facilite la création, l'exécution et le suivi de tâches d'extraction, de transformation et de chargement (ETL) dans AWS Glue. Vous pouvez composer visuellement des flux de travail de transformation des données et les exécuter de manière fluide sur le moteur AWS ETL sans serveur basé sur Apache Spark de Glue. Vous pouvez inspecter le schéma et les résultats des données à chaque étape de la tâche. Pour plus d’informations, veuillez consulter le [Guide de l’utilisateur AWS Glue Studio](https://docs.aws.amazon.com/glue/latest/ug/what-is-glue-studio.html).

## Développement à l'aide de sessions interactives
<a name="develop-using-interactive-sessions"></a>

Les sessions interactives vous permettent de créer et de tester des applications à partir de l'environnement de votre choix. Pour plus d'informations, consultez la section [Utilisation de sessions interactives avec AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/interactive-sessions-chapter.html).

# Développez et testez AWS Glue des jobs localement à l'aide d'une image Docker
<a name="develop-local-docker-image"></a>

 Pour une plateforme de données prête à être mise en production, le processus de développement et le CI/CD pipeline de AWS Glue jobs constituent un sujet clé. Vous pouvez développer et tester des AWS Glue tâches de manière flexible dans un conteneur Docker. AWS Glue héberge des images Docker sur Docker Hub pour configurer votre environnement de développement avec des utilitaires supplémentaires. Vous pouvez utiliser votre IDE, bloc-notes ou REPL préféré à l'aide de la bibliothèque AWS Glue ETL. Cette rubrique explique comment développer et tester des jobs de AWS Glue la version 5.0 dans un conteneur Docker à l'aide d'une image Docker.

## Images Docker disponibles
<a name="develop-local-available-docker-images-ecr"></a>

 Les images Docker suivantes sont disponibles pour AWS Glue [Amazon ECR](https://gallery.ecr.aws/glue/aws-glue-libs) :. 
+  Pour AWS Glue la version 5.0 : `public.ecr.aws/glue/aws-glue-libs:5` 
+ Pour AWS Glue la version 4.0 : `public.ecr.aws/glue/aws-glue-libs:glue_libs_4.0.0_image_01`
+ Pour AWS Glue la version 3.0 : `public.ecr.aws/glue/aws-glue-libs:glue_libs_3.0.0_image_01`
+ Pour AWS Glue la version 2.0 : `public.ecr.aws/glue/aws-glue-libs:glue_libs_2.0.0_image_01`

**Note**  
 AWS Glue Les images Docker sont compatibles avec x86\$164 et arm64. 

 Dans cet exemple, nous utilisons `public.ecr.aws/glue/aws-glue-libs:5` et nous exécutons le conteneur sur une machine locale (Mac, Windows ou Linux). Cette image de conteneur a été testée pour les tâches Spark de la AWS Glue version 5.0. L’image contient les éléments suivants : 
+  Amazon Linux 2023 
+  AWS Glue Bibliothèque ETL 
+  Apache Spark 3.5.4 
+  Bibliothèques de formats de table ouverte ; Apache Iceberg 1.7.1, Apache Hudi 0.15.0 et Delta Lake 3.3.0 
+  AWS Glue Client de catalogue de données 
+  Amazon Redshift connecteur pour Apache Spark 
+  Amazon DynamoDB connecteur pour Apache Hadoop 

 Pour configurer votre conteneur, extrayez l’image de la galerie publique ECR, puis exécutez le conteneur. Cette rubrique explique comment exécuter votre conteneur selon les méthodes suivantes, en fonction de vos besoins : 
+ `spark-submit`
+ Shell REPL `(pyspark)`
+ `pytest`
+ Code Visual Studio

## Conditions préalables
<a name="develop-local-docker-image-prereq"></a>

Avant de commencer, assurez-vous que Docker est installé et que le démon Docker est en cours d'exécution. Pour obtenir des instructions d'installation, consultez la documentation Docker pour [Mac](https://docs.docker.com/docker-for-mac/install/) ou [Linux](https://docs.docker.com/engine/install/). La machine qui exécute le Docker héberge le AWS Glue conteneur. Assurez-vous également que vous disposez d'au moins 7 Go d'espace disque pour l'image sur l'hôte exécutant Docker.

 Pour plus d'informations sur les restrictions applicables au développement de AWS Glue code en local, consultez la section [Restrictions de développement locales](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html#local-dev-restrictions). 

### Configuration AWS
<a name="develop-local-docker-image-config-aws-credentials"></a>

Pour activer les appels AWS d'API depuis le conteneur, configurez les AWS informations d'identification en suivant les étapes suivantes. Dans les sections suivantes, nous utiliserons ce profil AWS nommé.

1.  [Créez un profil AWS nommé](https://docs.aws.amazon.com//cli/latest/userguide/cli-configure-files.html). 

1.  Ouvrez `cmd` sous Windows ou sur un terminal Mac/Linux et exécutez la commande suivante dans un terminal : 

   ```
   PROFILE_NAME="<your_profile_name>"
   ```

Dans les sections suivantes, nous utilisons ce profil AWS nommé.

### 
<a name="develop-local-docker-pull-image-from-ecr-public"></a>

 Si vous exécutez Docker sur Windows, choisissez l’icône Docker (clic droit) et choisissez **Basculer vers les conteneurs Linux** avant d’extraire l’image. 

Exécutez la commande suivante pour extraire l’image d’ECR Public :

```
docker pull public.ecr.aws/glue/aws-glue-libs:5 
```

## Exécution du conteneur
<a name="develop-local-docker-image-setup-run"></a>

Vous pouvez maintenant exécuter un conteneur en utilisant cette image. Vous pouvez choisir l'une des options suivantes en fonction de vos besoins.

### spark-submit
<a name="develop-local-docker-image-setup-run-spark-submit"></a>

Vous pouvez exécuter un script de AWS Glue tâche en exécutant la `spark-submit` commande sur le conteneur. 

1.  Rédigez votre script, enregistrez-le en tant que `sample.py` dans l’exemple ci-dessous, puis enregistrez-le dans le répertoire `/local_path_to_workspace/src/` à l’aide des commandes suivantes : 

   ```
   $ WORKSPACE_LOCATION=/local_path_to_workspace
   $ SCRIPT_FILE_NAME=sample.py
   $ mkdir -p ${WORKSPACE_LOCATION}/src
   $ vim ${WORKSPACE_LOCATION}/src/${SCRIPT_FILE_NAME}
   ```

1.  Ces variables sont utilisées dans la commande docker run ci-dessous. L’exemple de code (sample.py) utilisé dans la commande spark-submit ci-dessous est inclus dans l’annexe à la fin de cette rubrique. 

    Exécutez la commande suivante pour exécuter la commande `spark-submit` sur le conteneur afin de soumettre une nouvelle application Spark : 

   ```
   $ docker run -it --rm \
       -v ~/.aws:/home
       /hadoop/.aws \
       -v $WORKSPACE_LOCATION:/home/hadoop/workspace/ \
       -e AWS_PROFILE=$PROFILE_NAME \
       --name glue5_spark_submit \
       public.ecr.aws/glue/aws-glue-libs:5 \
       spark-submit /home/hadoop/workspace/src/$SCRIPT_FILE_NAME
   ```

1. (Facultatif) Configurez `spark-submit` pour qu’il corresponde à votre environnement. Par exemple, vous pouvez transmettre vos dépendances à la configuration `--jars`. Pour plus d’informations, consultez [Dynamically Loading Spark Properties](https://spark.apache.org/docs/latest/configuration.html) dans la documentation Spark. 

### Shell REPL (Pyspark)
<a name="develop-local-docker-image-setup-run-repl-shell"></a>

 Vous pouvez exécuter le shell REPL (`read-eval-print loops`) pour un développement interactif. Exécutez la commande suivante pour exécuter la PySpark commande sur le conteneur afin de démarrer le shell REPL : 

```
$ docker run -it --rm \
    -v ~/.aws:/home/hadoop/.aws \
    -e AWS_PROFILE=$PROFILE_NAME \
    --name glue5_pyspark \
    public.ecr.aws/glue/aws-glue-libs:5 \
    pyspark
```

 Vous obtenez la sortie suivante : 

```
Python 3.11.6 (main, Jan  9 2025, 00:00:00) [GCC 11.4.1 20230605 (Red Hat 11.4.1-2)] on linux
Type "help", "copyright", "credits" or "license" for more information.
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /__ / .__/\_,_/_/ /_/\_\   version 3.5.4-amzn-0
      /_/

Using Python version 3.11.6 (main, Jan  9 2025 00:00:00)
Spark context Web UI available at None
Spark context available as 'sc' (master = local[*], app id = local-1740643079929).
SparkSession available as 'spark'.
>>>
```

 Avec ce shell REPL, vous pouvez coder et tester de manière interactive. 

### Pytest
<a name="develop-local-docker-image-setup-run-pytest"></a>

 Pour les tests unitaires, vous pouvez utiliser `pytest` des scripts de travail AWS Glue Spark. Exécutez les commandes suivantes pour la préparation. 

```
$ WORKSPACE_LOCATION=/local_path_to_workspace
$ SCRIPT_FILE_NAME=sample.py
$ UNIT_TEST_FILE_NAME=test_sample.py
$ mkdir -p ${WORKSPACE_LOCATION}/tests
$ vim ${WORKSPACE_LOCATION}/tests/${UNIT_TEST_FILE_NAME}
```

 Exécutez la commande suivante pour exécuter `pytest` à l’aide de `docker run` : 

```
$ docker run -i --rm \
    -v ~/.aws:/home/hadoop/.aws \
    -v $WORKSPACE_LOCATION:/home/hadoop/workspace/ \
    --workdir /home/hadoop/workspace \
    -e AWS_PROFILE=$PROFILE_NAME \
    --name glue5_pytest \
    public.ecr.aws/glue/aws-glue-libs:5 \
    -c "python3 -m pytest --disable-warnings"
```

 Une fois l’exécution des tests unitaires terminée par `pytest`, votre sortie ressemblera à ceci : 

```
============================= test session starts ==============================
platform linux -- Python 3.11.6, pytest-8.3.4, pluggy-1.5.0
rootdir: /home/hadoop/workspace
plugins: integration-mark-0.2.0
collected 1 item

tests/test_sample.py .                                                   [100%]

======================== 1 passed, 1 warning in 34.28s =========================
```

### Configuration du conteneur pour utiliser Visual Studio Code
<a name="develop-local-docker-image-setup-visual-studio"></a>

 Pour configurer le conteneur à l’aide de Visual Studio Code, procédez comme suit : 

1. Installez Visual Studio Code.

1. Installez [Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python).

1. Installez [Visual Studio Code Remote - Containers](https://code.visualstudio.com/docs/remote/containers)

1. Ouvrez le dossier de l'espace de travail dans Visual Studio Code.

1. Appuyez sur `Ctrl+Shift+P` (Windows/Linux) ou sur `Cmd+Shift+P` (Mac).

1. Tapez `Preferences: Open Workspace Settings (JSON)`.

1. Appuyez sur Entrée.

1. Collez le JSON suivant et enregistrez-le.

   ```
   {
       "python.defaultInterpreterPath": "/usr/bin/python3.11",
       "python.analysis.extraPaths": [
           "/usr/lib/spark/python/lib/py4j-0.10.9.7-src.zip:/usr/lib/spark/python/:/usr/lib/spark/python/lib/",
       ]
   }
   ```

 Pour configurer le conteneur : 

1. Exécutez le conteneur Docker.

   ```
   $ docker run -it --rm \
       -v ~/.aws:/home/hadoop/.aws \
       -v $WORKSPACE_LOCATION:/home/hadoop/workspace/ \
       -e AWS_PROFILE=$PROFILE_NAME \
       --name glue5_pyspark \
       public.ecr.aws/glue/aws-glue-libs:5 \
       pyspark
   ```

1. Démarrez Visual Studio Code.

1.  Choisissez **Remote Explorer** (Explorateur distant) dans le menu de gauche, puis `amazon/aws-glue-libs:glue_libs_4.0.0_image_01`. 

1.  Cliquez avec le bouton droit de la souris et choisissez **Joindre dans la fenêtre actuelle**.   
![\[Lorsque vous cliquez avec le bouton droit de la souris, une fenêtre avec l’option Joindre dans la fenêtre actuelle s’affiche.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/vs-code-other-containers.png)

1.  Si la boîte de dialogue suivante apparaît, choisissez **J’ai compris**.   
![\[Un avertissement dans la fenêtre avec le message « L’attachement à un conteneur peut exécuter du code arbitraire ».\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/vs-code-warning-got-it.png)

1. Ouvrir `/home/handoop/workspace/`.  
![\[Une fenêtre déroulante avec l’option « Espace de travail » est surlignée.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/vs-code-open-workspace.png)

1.  Créez un AWS Glue PySpark script et choisissez **Exécuter**. 

   Vous verrez l'exécution réussie du script.  
![\[L'exécution réussie du script.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/vs-code-run-successful-script.png)

## Changements entre l'image Docker AWS Glue 4.0 et AWS Glue 5.0
<a name="develop-local-docker-glue4-glue5-changes"></a>

 Les principaux changements entre l'image Docker AWS Glue 4.0 et AWS Glue 5.0 : 
+  Dans la AWS Glue version 5.0, il existe une seule image de conteneur pour les tâches par lots et les tâches de streaming. Cela diffère de Glue 4.0, où il y avait une image pour le lot et une autre pour le streaming. 
+  Dans la AWS Glue version 5.0, le nom d'utilisateur par défaut du conteneur est`hadoop`. Dans la AWS Glue version 4.0, le nom d'utilisateur par défaut était`glue_user`. 
+  Dans la AWS Glue version 5.0, plusieurs bibliothèques supplémentaires, dont Livy JupyterLab et Livy, ont été supprimées de l'image. Vous pouvez les installer manuellement. 
+  Dans la AWS Glue version 5.0, toutes les bibliothèques Iceberg, Hudi et Delta sont préchargées par défaut, et la variable d'environnement n'`DATALAKE_FORMATS`est plus nécessaire. Avant la AWS Glue version 4.0, la variable d'`DATALAKE_FORMATS`environnement variable d'environnement était utilisée pour spécifier les formats de table spécifiques à charger. 

 La liste ci-dessus est spécifique à l’image Docker. Pour en savoir plus sur les mises à jour AWS Glue 5.0, consultez [Présentation de la AWS Glue version 5.0 pour Apache Spark](https://aws.amazon.com/blogs/big-data/introducing-aws-glue-5-0-for-apache-spark/) et [Migration des AWS Glue tâches Spark vers AWS Glue la version 5.0](https://docs.aws.amazon.com/glue/latest/dg/migrating-version-50.html). 

## Considérations
<a name="develop-local-docker-considerations"></a>

 N'oubliez pas que les fonctionnalités suivantes ne sont pas prises en charge lorsque vous utilisez l'image du AWS Glue conteneur pour développer des scripts de travail localement. 
+  [Signets de tâche](https://docs.aws.amazon.com/glue/latest/dg/monitor-continuations.html) 
+  AWS Glue Rédacteur de parquet ([utilisation du format Parquet dans AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format-parquet-home.html)) 
+  [ FillMissingValues transformer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-pyspark-transforms-fillmissingvalues.html) 
+  [FindMatches transformer](https://docs.aws.amazon.com/glue/latest/dg/machine-learning.html#find-matches-transform) 
+  [Lecteur CSV SIMD vectorisé](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format-csv-home.html#aws-glue-programming-etl-format-simd-csv-reader) 
+  La propriété [ customJdbcDriverS3Path](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect.html#aws-glue-programming-etl-connect-jdbc) pour charger le pilote JDBC depuis le chemin Amazon S3 
+  [AWS Glue Qualité des données](https://docs.aws.amazon.com/glue/latest/dg/glue-data-quality.html) 
+  [Détection des données sensibles](https://docs.aws.amazon.com/glue/latest/dg/detect-PII.html) 
+  AWS Lake Formation vente d'informations d'identification basée sur des autorisations 

## Annexe : Ajout de pilotes JDBC et de bibliothèques Java
<a name="develop-local-docker-image-appendix"></a>

 Pour ajouter un pilote JDBC qui n’est pas actuellement disponible dans le conteneur, vous pouvez créer un répertoire sous votre espace de travail avec les fichiers JAR dont vous avez besoin et monter le répertoire sur `/opt/spark/jars/` dans la commande docker run. Les fichiers JAR situés sous `/opt/spark/jars/` au sein du conteneur sont automatiquement ajoutés à Spark Classpath et pourront être utilisés pendant l’exécution de la tâche. 

 Par exemple, utilisez la commande docker run suivante pour ajouter des fichiers JAR de pilotes JDBC au shell REPL. PySpark 

```
docker run -it --rm \
    -v ~/.aws:/home/hadoop/.aws \
    -v $WORKSPACE_LOCATION:/home/hadoop/workspace/ \
    -v $WORKSPACE_LOCATION/jars/:/opt/spark/jars/ \
    --workdir /home/hadoop/workspace \
    -e AWS_PROFILE=$PROFILE_NAME \
    --name glue5_jdbc \
    public.ecr.aws/glue/aws-glue-libs:5 \
    pyspark
```

 Comme indiqué dans **Considérations**, l'option de `customJdbcDriverS3Path` connexion ne peut pas être utilisée pour importer un pilote JDBC personnalisé depuis Amazon S3 dans des images de AWS Glue conteneur. 