

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.

# Utilisation des bibliothèques Python avec AWS Glue
<a name="aws-glue-programming-python-libraries"></a>

 Vous pouvez installer des modules et bibliothèques Python supplémentaires à utiliser avec AWS Glue ETL. Pour AWS Glue 2.0 et versions ultérieures, AWS Glue utilise le programme d'installation de packages Python (pip3) pour installer des modules supplémentaires utilisés par AWS Glue ETL. AWS Glue propose plusieurs options pour intégrer les modules Python supplémentaires à votre environnement de travail AWS Glue. Vous pouvez utiliser `--additional-python-modules` ce paramètre pour importer de nouveaux modules à l'aide de fichiers zip contenant des roues Python groupées (également appelées « zip of wheels », disponibles pour AWS Glue 5.0 et versions ultérieures), des fichiers de roues Python individuels, des fichiers d'exigences (requirements.txt, disponible pour AWS Glue 5.0 et versions ultérieures) ou une liste de modules Python séparés par des virgules. Il peut également être utilisé pour modifier la version des modules python fournis dans l'environnement AWS Glue (voir [Modules Python déjà fournis dans AWS Glue](#glue-modules-provided) pour plus de détails). 

**Topics**
+ [Installation de modules Python supplémentaires avec pip in AWS Glue 2.0 ou version ultérieure](#addl-python-modules-support)
+ [Inclusion de fichiers Python avec fonctionnalités PySpark natives](#extra-py-files-support)
+ [Scripts de programmation utilisant des transformations visuelles](#aws-glue-programming-with-cvt)
+ [Compression de bibliothèques pour intégration](#aws-glue-programming-python-libraries-zipping)
+ [Chargement de bibliothèques Python dans AWS Carnets Glue Studio](#aws-glue-programming-python-libraries-notebooks)
+ [Chargement de bibliothèques Python dans un terminal de développement dans AWS Colle 0. 9/10,0](#aws-glue-programming-python-libraries-dev-endpoint)
+ [Utiliser les bibliothèques Python dans le cadre d'une tâche ou JobRun](#aws-glue-programming-python-libraries-job)
+ [Analyse proactive des dépendances Python](#aws-glue-programming-analyzing-python-dependencies)
+ [Modules Python déjà fournis dans AWS Glue](#glue-modules-provided)
+ [Annexe A : Création d'un artefact Zip of Wheels](#glue-python-library-zip-of-wheels-appendix)
+ [Annexe B : AWS Détails de l'environnement Glue](#glue-python-libraries-environment-details)

## Installation de modules Python supplémentaires avec pip in AWS Glue 2.0 ou version ultérieure
<a name="addl-python-modules-support"></a>

AWS Glue utilise le programme d'installation de packages Python (pip3) pour installer des modules supplémentaires à utiliser par AWS Glue ETL. Vous pouvez utiliser le paramètre `--additional-python-modules` avec une liste de modules Python séparés par des virgules pour ajouter un nouveau module ou modifier la version d'un module existant. Vous pouvez installer des artefacts de roue intégrés soit par le biais d'un artefact de roue autonome, soit en chargeant le fichier sur Amazon S3, puis en incluant le chemin d'accès à l'objet Amazon S3 dans votre liste de modules. Pour plus d'informations sur la définition des paramètres des tâches, voir [ Utilisation des paramètres des tâches dans les tâches AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html).

 Vous pouvez transmettre des options supplémentaires à pip3 à l'aide du paramètre `--python-modules-installer-option`. Par exemple, vous pourriez forcer pip `--only-binary` à n'installer que des artefacts prédéfinis pour les packages spécifiés par. `--additional-python-modules` Pour plus d'exemples, consultez [ Création de modules Python à partir d'une roue pour les charges de travail Spark ETL à l'aide de AWS Glue 2.0](https://aws.amazon.com/blogs/big-data/building-python-modules-from-a-wheel-for-spark-etl-workloads-using-aws-glue-2-0/). 

### Meilleures pratiques pour la gestion des dépendances Python
<a name="glue-python-library-best-practices"></a>

Pour les charges de travail de production, AWS Glue recommande de regrouper toutes vos dépendances Python sous forme de fichiers Wheel dans un seul artefact zip. Cette approche permet de :
+ **Exécution déterministe ** : contrôle exact des versions de packages installées
+ **Fiabilité ** : aucune dépendance vis-à-vis des référentiels de packages externes lors de l'exécution des tâches
+ **Performances ** : opération de téléchargement unique au lieu de plusieurs appels réseau
+ **Installation hors ligne ** : fonctionne dans des environnements VPC privés sans accès à Internet

#### Importantes considérations
<a name="glue-python-library-important-considerations"></a>

Dans le cadre du modèle de responsabilité [AWS partagée](https://aws.amazon.com/compliance/shared-responsibility-model/), vous êtes responsable de la gestion des modules Python supplémentaires, des bibliothèques et de leurs dépendances. Cela inclut notamment les éléments suivants :
+ **Mises à jour de sécurité ** : mise à jour régulière des packages pour corriger les failles de sécurité
+ **Compatibilité des versions ** : s'assurer que les packages sont compatibles avec votre version de AWS Glue
+ **Tests ** : vérification du bon fonctionnement de vos dépendances packagées dans l'environnement Glue

Si vos dépendances sont minimes, vous pouvez envisager d'utiliser des fichiers Wheel individuels à la place.

### (Recommandé) Installation de bibliothèques Python supplémentaires dans AWS Glue 5.0 ou supérieur à l'aide de Zip of Wheels
<a name="glue-python-library-installing-zip-of-wheels"></a>

AWS Glue 5.0 et les versions ultérieures permettent de regrouper plusieurs fichiers de roues dans un seul artefact zip contenant des roues Python groupées pour une gestion des dépendances plus fiable et déterministe. Pour utiliser cette approche, créez un fichier zip contenant toutes les dépendances de votre roue et leurs dépendances transitives avec le `.gluewheels.zip` suffixe, téléchargez-le sur Amazon S3 et référencez-le à l'aide du `--additional-python-modules` paramètre. Veillez à ajouter `--no-index` au paramètre de la `--python-modules-installer-option` tâche. Avec cette configuration, le fichier zip of wheels agit essentiellement comme un index local permettant à pip de résoudre les dépendances au moment de l'exécution. Cela élimine les dépendances vis-à-vis de référentiels de packages externes tels que PyPI lors de l'exécution des tâches, offrant ainsi une stabilité et une cohérence accrues aux charges de travail de production. Par exemple : 

```
--additional-python-modules s3://amzn-s3-demo-bucket/path/to/zip-of-wheels-1.0.0.gluewheels.zip
--python-modules-installer-option --no-index
```

Pour obtenir des instructions sur la création d'un fichier zip de roues, consultez[Annexe A : Création d'un artefact Zip of Wheels](#glue-python-library-zip-of-wheels-appendix).

### Installation de bibliothèques Python supplémentaires à l’aide de Wheel
<a name="glue-python-library-installing-wheel"></a>

AWS Glue prend en charge l'installation de packages Python personnalisés à l'aide de fichiers wheel (.whl) stockés dans Amazon S3. Pour inclure des fichiers de roues dans vos tâches AWS Glue, fournissez une liste séparée par des virgules de vos fichiers de roues stockés dans s3 au paramètre de la `--additional-python-modules` tâche. Par exemple : 

```
--additional-python-modules s3://amzn-s3-demo-bucket/path/to/package-1.0.0-py3-none-any.whl,s3://your-bucket/path/to/another-package-2.1.0-cp311-cp311-linux_x86_64.whl
```

Cette approche est également utile lorsque vous avez besoin de distributions personnalisées ou de packages avec des dépendances natives précompilés pour le système d’exploitation approprié. Pour plus d'exemples, consultez [ Création de modules Python à partir d'une roue pour les charges de travail Spark ETL à l'aide de AWS Glue 2.0](https://aws.amazon.com/blogs/big-data/building-python-modules-from-a-wheel-for-spark-etl-workloads-using-aws-glue-2-0/). 

### Installation de bibliothèques Python supplémentaires dans AWS Glue 5.0 ou supérieur à l'aide de requirements.txt
<a name="addl-python-modules-requirements-txt"></a>

Dans AWS Glue 5.0\+, vous pouvez fournir la norme de facto `requirements.txt` pour gérer les dépendances des bibliothèques Python. Pour ce faire, indiquez les deux paramètres de tâche suivants :
+ Clé : `--python-modules-installer-option`

  Valeur : `-r`
+ Clé : `--additional-python-modules`

  Valeur : `s3://path_to_requirements.txt`

AWS Les nœuds Glue 5.0 chargent initialement les bibliothèques Python spécifiées dans`requirements.txt`.

Voici un exemple de requirements.txt :

```
awswrangler==3.9.1
elasticsearch==8.15.1
PyAthena==3.9.0
PyMySQL==1.1.1
PyYAML==6.0.2
pyodbc==5.2.0
pyorc==0.9.0
redshift-connector==2.1.3
scipy==1.14.1
scikit-learn==1.5.2
SQLAlchemy==2.0.36
```

**Important**  
Utilisez cette option avec prudence, en particulier pour les charges de travail de production. Extraire les dépendances de PyPI au moment de l'exécution est très risqué car vous ne pouvez pas être sûr de l'artefact auquel pip se résout. L'utilisation de versions de bibliothèques non épinglées est particulièrement risquée car elle extrait la dernière version des modules python, ce qui peut introduire des modifications importantes ou introduire un module python incompatible. Cela pourrait entraîner un échec de la tâche en raison de l'échec de l'installation de Python dans l'environnement de travail AWS Glue. Bien que l'épinglage de la version de la bibliothèque augmente la stabilité, la résolution pip n'est toujours pas totalement déterministe, de sorte que des problèmes similaires peuvent survenir. À titre de meilleure pratique, AWS Glue recommande d'utiliser des objets figés tels que des rouleaux zippés ou des limes à roulettes individuelles (voir [(Recommandé) Installation de bibliothèques Python supplémentaires dans AWS Glue 5.0 ou supérieur à l'aide de Zip of Wheels](#glue-python-library-installing-zip-of-wheels) pour plus de détails). 

**Important**  
Si vous n'épinglez pas les versions de vos dépendances transitives, une dépendance principale peut générer des versions de dépendances transitives incompatibles. Il est recommandé d'épingler toutes les versions de la bibliothèque pour une cohérence accrue dans les tâches AWS Glue. Mieux encore, AWS Glue recommande de regrouper vos dépendances dans un fichier zip of wheels afin de garantir une cohérence et une fiabilité maximales pour vos charges de travail de production. 

### Installation de bibliothèques Python supplémentaires, configurées directement sous forme de liste séparée par des virgules
<a name="glue-python-library-installing-comma-separated-list"></a>

Pour mettre à jour ou ajouter un nouveau module Python, AWS Glue permet de transmettre des `--additional-python-modules` paramètres avec une liste de modules Python séparés par des virgules comme valeurs. Par exemple, pour mettre à jour/ajouter le module scikit-learn, utilisez ce qui suit :. key/value `"--additional-python-modules", "scikit-learn==0.21.3"` Vous avez deux options pour configurer directement les modules Python.
+ **Module Python épinglé **

  `"--additional-python-modules", "scikit-learn==0.21.3,ephem==4.1.6"`
+ **Module Python non épinglé : (non recommandé pour les charges de travail de production)**

  `"--additional-python-modules", "scikit-learn>==0.20.0,ephem>=4.0.0"`

  OU

  `"--additional-python-modules", "scikit-learn,ephem"`

**Important**  
Utilisez cette option avec prudence, en particulier pour les charges de travail de production. Extraire les dépendances de PyPI au moment de l'exécution est très risqué car vous ne pouvez pas être sûr de l'artefact auquel pip se résout. L'utilisation de versions de bibliothèques non épinglées est particulièrement risquée car elle extrait la dernière version des modules python, ce qui peut introduire des modifications importantes ou introduire un module python incompatible. Cela pourrait entraîner un échec de la tâche en raison de l'échec de l'installation de Python dans l'environnement de travail AWS Glue. Bien que l'épinglage de la version de la bibliothèque augmente la stabilité, la résolution pip n'est toujours pas totalement déterministe, de sorte que des problèmes similaires peuvent survenir. À titre de meilleure pratique, AWS Glue recommande d'utiliser des objets figés tels que des rouleaux zippés ou des limes à roulettes individuelles (voir [(Recommandé) Installation de bibliothèques Python supplémentaires dans AWS Glue 5.0 ou supérieur à l'aide de Zip of Wheels](#glue-python-library-installing-zip-of-wheels) pour plus de détails).

**Important**  
Si vous n'épinglez pas les versions de vos dépendances transitives, une dépendance principale peut générer des versions de dépendances transitives incompatibles. Il est recommandé d'épingler toutes les versions de la bibliothèque pour une cohérence accrue dans les tâches AWS Glue. Mieux encore, AWS Glue recommande de regrouper vos dépendances dans un fichier zip of wheels afin de garantir une cohérence et une fiabilité maximales pour vos charges de travail de production. 

## Inclusion de fichiers Python avec fonctionnalités PySpark natives
<a name="extra-py-files-support"></a>

AWS Glue a PySpark l'habitude d'inclure des fichiers Python dans les tâches AWS Glue ETL. Vous aurez envie d'utiliser `--additional-python-modules` pour gérer vos dépendances lorsqu'elles sont disponibles. Vous pouvez utiliser le paramètre de tâche `--extra-py-files` pour inclure des fichiers Python. Les dépendances doivent être hébergées dans Amazon S3, et la valeur de l'argument doit être une liste de chemins non-espacés Amazon S3 délimités par des virgules. Cette fonctionnalité se comporte comme la gestion des dépendances Python que vous utiliseriez avec Spark. Pour plus d'informations sur la gestion des dépendances Python dans Spark, consultez la [ page ](https://spark.apache.org/docs/latest/api/python/tutorial/python_packaging.html#using-pyspark-native-features) Utilisation des fonctionnalités PySpark natives de la documentation d'Apache Spark. `--extra-py-files`est utile dans les cas où votre code supplémentaire n'est pas empaqueté, ou lorsque vous migrez un programme Spark avec une chaîne d'outils existante pour gérer les dépendances. Pour que vos outils de dépendance soient gérables, vous devez regrouper vos dépendances avant de les soumettre. 

## Scripts de programmation utilisant des transformations visuelles
<a name="aws-glue-programming-with-cvt"></a>

 Lorsque vous créez une tâche AWS Glue à l'aide de l'interface visuelle de AWS Glue Studio, vous pouvez transformer vos données à l'aide de nœuds de transformation de données gérés et de transformations visuelles personnalisées. Pour plus d’informations sur les nœuds de transformation de données gérés, consultez [Transformation de données avec des transformations gérées par AWS Glue](edit-jobs-transforms.md). Pour plus d’informations sur les transformations visuelles personnalisées, consultez [Transformation des données avec des transformations visuelles personnalisées](custom-visual-transform.md). Les scripts utilisant des transformations visuelles ne peuvent être générés que lorsque le **langage** de votre tâche est configuré pour utiliser Python.

 Lors de la génération d'une tâche AWS Glue à l'aide de transformations visuelles, AWS Glue Studio inclut ces transformations dans l'environnement d'exécution à l'aide du `--extra-py-files` paramètre de la configuration de la tâche. Pour de plus amples informations sur la définition des paramètres de la tâche, consultez [Utilisation des paramètres de tâche dans AWS Travaux de colle](aws-glue-programming-etl-glue-arguments.md). Lorsque vous apportez des modifications à un script généré ou à un environnement d’exécution, vous devez conserver cette configuration de tâche pour que votre script s’exécute correctement.

## Compression de bibliothèques pour intégration
<a name="aws-glue-programming-python-libraries-zipping"></a>

Sauf si elle est comprise dans un seul fichier `.py`, une bibliothèque doit être packagée dans une archive `.zip`. Le répertoire du package doit être à la racine de l'archive et contenir un fichier `__init__.py` pour le package. Python sera alors en mesure d'importer le package normalement.

Si votre bibliothèque se compose d'un seul module Python dans un fichier `.py`, vous n'avez pas besoin de la mettre dans un fichier `.zip`.

## Chargement de bibliothèques Python dans AWS Carnets Glue Studio
<a name="aws-glue-programming-python-libraries-notebooks"></a>

 Pour spécifier les bibliothèques Python dans les blocs-notes AWS Glue Studio, voir [ Installation de modules Python supplémentaires. ](https://docs.aws.amazon.com/glue/latest/dg/manage-notebook-sessions.html#specify-default-modules) 

## Chargement de bibliothèques Python dans un terminal de développement dans AWS Colle 0. 9/10,0
<a name="aws-glue-programming-python-libraries-dev-endpoint"></a>

Si vous utilisez différents ensembles de bibliothèques pour différents scripts ETL, vous pouvez configurer un point de terminaison de développement distinct pour chaque ensemble, ou écraser le(s) fichier(s) `.zip` de bibliothèque que votre point de terminaison de développement charge à chaque fois que vous basculez d'un script à un autre.

Vous pouvez utiliser la console pour spécifier un ou plusieurs fichiers .zip de bibliothèque pour un point de terminaison de développement lorsque vous créez celui-ci. Après avoir attribué un nom et un rôle IAM, sélectionnez **Script Libraries and job parameters (optional)** (Bibliothèques de scripts et paramètres de tâches [facultatif]) et saisissez le chemin d'accès Amazon S3 complet à votre fichier `.zip` de bibliothèque dans la zone **Python library path** (Chemin de bibliothèque Python). Par exemple :

```
s3://{{bucket}}/{{prefix/}}site-packages.zip
```

Si vous le souhaitez, vous pouvez spécifier plusieurs chemins complets pour les fichiers, en les séparant par des virgules, mais sans espace, comme l'exemple suivant :

```
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
```

Si vous mettez à jour ces fichiers `.zip` ultérieurement, vous pouvez utiliser la console pour les importer de nouveau dans votre point de terminaison de développement. Naviguez vers le point de terminaison de développement concerné, cochez la case située en regard, puis choisissez **Update ETL libraries** (Mettre à jour des bibliothèques ETL) dans le menu **Action**.

De la même manière, vous pouvez spécifier des fichiers de bibliothèque à l'aide des API AWS Glue. Lorsque vous créez un point de terminaison de développement en appelant [CreateDevEndpoint action (Python : create\_dev\_endpoint)](aws-glue-api-dev-endpoint.md#aws-glue-api-dev-endpoint-CreateDevEndpoint), vous pouvez spécifier un ou plusieurs chemins complets de bibliothèques dans le paramètre `ExtraPythonLibsS3Path`, dans un appel ressemblant à ceci :

```
dep = glue.create_dev_endpoint(
             EndpointName="{{testDevEndpoint}}",
             RoleArn="{{arn:aws:iam::123456789012}}",
             SecurityGroupIds="{{sg-7f5ad1ff}}",
             SubnetId="{{subnet-c12fdba4}}",
             PublicKey="{{ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtp04H/y...}}",
             NumberOfNodes={{3}},
             ExtraPythonLibsS3Path="{{s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip}}")
```

Lorsque vous mettez à jour un point de terminaison de développement, vous pouvez également mettre à jour les bibliothèques chargées par ce point de terminaison en utilisant un objet [DevEndpointCustomLibraries](aws-glue-api-dev-endpoint.md#aws-glue-api-dev-endpoint-DevEndpointCustomLibraries) et en définissant le paramètre `UpdateEtlLibraries ` sur `True` lors de l'appel de [UpdateDevEndpoint (update\_dev\_endpoint)](aws-glue-api-dev-endpoint.md#aws-glue-api-dev-endpoint-UpdateDevEndpoint).

## Utiliser les bibliothèques Python dans le cadre d'une tâche ou JobRun
<a name="aws-glue-programming-python-libraries-job"></a>

Lorsque vous créez un objet Job sur la console, vous pouvez spécifier un ou plusieurs fichiers .zip de bibliothèque en sélectionnant **Script Libraries and job parameters (optional)** (Bibliothèques de scripts et paramètres de tâches [facultatif]) et en entrant le ou les chemins d'accès Amazon S3 complets aux bibliothèques, comme vous le feriez lors de la création d'un point de terminaison de développement :

```
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
```

Si vous appelez [CreateJob (créer\_emploi)](aws-glue-api-jobs-job.md#aws-glue-api-jobs-job-CreateJob), vous pouvez spécifier un ou plusieurs chemins d'accès complets aux bibliothèques par défaut en utilisant les paramètres par défaut `--extra-py-files`, comme suit :

```
job = glue.create_job(Name='{{sampleJob}}',
                      Role='{{Glue_DefaultRole}}',
                      Command={'Name': 'glueetl',
                               'ScriptLocation': '{{s3://my_script_bucket/scripts/my_etl_script.py}}'},
                      DefaultArguments={'--extra-py-files': '{{s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip}}'})
```

Ensuite, lorsque vous démarrez un JobRun, vous pouvez remplacer le paramètre de bibliothèque par défaut par un autre :

```
runId = glue.start_job_run(JobName='{{sampleJob}}',
                           Arguments={'--extra-py-files': '{{s3://bucket/prefix/lib_B.zip}}'})
```

## Analyse proactive des dépendances Python
<a name="aws-glue-programming-analyzing-python-dependencies"></a>

 Pour identifier de manière proactive les problèmes de dépendance potentiels avant le déploiement sur AWS Glue, vous pouvez utiliser l'outil d'analyse des dépendances pour valider vos packages Python par rapport à votre environnement AWS Glue cible. 

 AWS fournit un outil d'analyse des dépendances Python open source spécialement conçu pour les environnements AWS Glue. Cet outil est disponible dans le référentiel d'exemples de AWS Glue et peut être utilisé localement pour valider vos dépendances avant le déploiement. 

 Cette analyse permet de garantir que vos dépendances respectent la pratique recommandée qui consiste à épingler toutes les versions de bibliothèque pour des déploiements de production cohérents. Pour plus de détails, veuillez consulter le [fichier README](https://github.com/aws-samples/aws-glue-samples/tree/master/utilities/glue_python_dependency_analyzer) de l’outil. 

### Utilisation de AWS Analyseur de dépendance à la colle
<a name="w2aac67c11c14c18c37c11b1"></a>

 L'analyseur de dépendances Python de AWS Glue permet d'identifier les dépendances non épinglées et les conflits de versions en simulant l'installation de pip avec des contraintes spécifiques à la plate-forme qui correspondent à votre environnement Glue cible. AWS 

```
# Analyze a single Glue job
python glue_dependency_analyzer.py -j my-glue-job

# Analyze multiple jobs with specific AWS configuration
python glue_dependency_analyzer.py -j job1 -j job2 --aws-profile production --aws-region us-west-2
```

 L’outil signalera les éléments suivants : 
+  Dépendances non épinglées susceptibles d’installer différentes versions au cours de l’exécution des tâches 
+  Conflits de version entre les packages 
+  Dépendances non disponibles pour votre environnement AWS Glue cible 

## Analyse et correction des échecs de tâches dus aux dépendances Python avec Amazon Q Developer
<a name="aws-glue-programming-analyze-job-failures-with-amazon-q"></a>

 Amazon Q Developer est un assistant conversationnel basé sur l'intelligence artificielle générative (IA) qui peut vous aider à comprendre, créer, étendre et exploiter AWS des applications. Vous pouvez le télécharger en suivant les instructions du Guide de démarrage d’Amazon Q. 

 Amazon Q Developer peut être utilisé pour analyser et corriger les échecs de tâches dus à la dépendance Python. Nous vous suggérons d'utiliser l'invite suivante en remplaçant l'espace réservé < Job-Name > par le nom de votre tâche de collage. 

```
I have an AWS Glue job named <Job-Name> that has failed due to Python module installation conflicts. Please assist in diagnosing and resolving this issue using the following systematic approach. Proceed once sufficient information is available.

Objective: Implement a fix that addresses the root cause module while minimizing disruption to the existing working environment.

Step 1: Root Cause Analysis
• Retrieve the most recent failed job run ID for the specified Glue job
• Extract error logs from CloudWatch Logs using the job run ID as a log stream prefix
• Analyze the logs to identify:
  • The recently added or modified Python module that triggered the dependency conflict
  • The specific dependency chain causing the installation failure
  • Version compatibility conflicts between required and existing modules

Step 2: Baseline Configuration Identification
• Locate the last successful job run ID prior to the dependency failure
• Document the Python module versions that were functioning correctly in that baseline run
• Establish the compatible version constraints for conflicting dependencies

Step 3: Targeted Resolution Implementation
• Apply pinning by updating the job's additional_python_modules parameter
• Pin only the root cause module and its directly conflicting dependencies to compatible versions, and do not remove python modules unless necessary
• Preserve flexibility for non-conflicting modules by avoiding unnecessary version constraints
• Deploy the configuration changes with minimal changes to the existing configuration and execute a validation test run. Do not change the Glue versions.

Implementation Example:
Scenario: Recently added pandas==2.0.0 to additional_python_modules
Error: numpy version conflict (pandas 2.0.0 requires numpy>=1.21, but existing job code requires numpy<1.20)
Resolution: Update additional_python_modules to "pandas==1.5.3,numpy==1.19.5"
Rationale: Use pandas 1.5.3 (compatible with numpy 1.19.5) and pin numpy to last known working version

Expected Outcome: Restore job functionality with minimal configuration changes while maintaining system stability.
```

 L’invite demande à Q d’effectuer les opérations suivantes : 

1. Récupérer l’ID d’exécution de la dernière tâche ayant échoué

1. Rechercher les journaux et les détails associés

1. Rechercher des exécutions de tâches réussies pour détecter tout package Python modifié

1. Apporter des corrections aux configurations et déclencher une autre exécution test

## Modules Python déjà fournis dans AWS Glue
<a name="glue-modules-provided"></a>

Pour modifier la version de ces modules fournis, fournissez de nouvelles versions avec le paramètre de tâche `--additional-python-modules`.

------
#### [ AWS Glue version 6.0 ]

AWS La version 6.0 de Glue inclut les modules Python suivants prêts à l'emploi :
+ aiobotocore ==3.4.0
+ les globes oculaires aiohappy == 2.6.1
+ aiohttp==3.13.5
+ outils aioiter = 0.13.0
+ signal aérien = 1.4.0
+ appdirs==1.4.4
+ attres==26.1.0
+ boto3 = 1,42,84
+ botocore = 1.42.84
+ certificat==2026.2.25
+ normaliseur de jeux de caractères ==3.4.7
+ chorégraphe==1.2.1
+ contour ==1.3.3
+ cycleur ==0.12.1
+ distlib==0.4.0
+ verrouillage de fichier = 3.25.2
+ outils de polices = 4.62.1
+ liste figée == 1.8.0
+ fsspec==2026.3.0
+ googleapis-common-protos==1.75.0
+ état grpcio ==1.81.0
+ grpcio==1,81.0
+ idna==3,11
+ iniconfig==2.3.0
+ jmespath=1.1.0
+ kaléido==1.2.0
+ Kiwisolver = 1.5.0
+ logistique==2.0.1
+ matplotlib==3.10.8
+ multidict==6.7.1
+ narvals ==2.19.0
+ numpy==2.4.4
+ orjson==3.11.8
+ emballage = 26,0
+ pandas==2.3.3
+ oreiller = 12.2.0
+ pip = 24,0
+ dossiers de plate-forme == 4.9.6
+ plotly==6.7.0
+ branché = 1.6.0
+ propcache==0.4.1
+ protobuf==7.35,0
+ pyarrow = 23.0.1
+ Pigments==2.20.0
+ pyparsing==3.3.2
+ pytest-timeout==2.4.0
+ pytest==9.0.3
+ python-dateutil==2.9.0.post0
+ découverte de python ==1.2.2
+ pytz==2026.1.post1
+ PyYAML=6.0.3
+ demandes == 2.33.1
+ s3fs = 2026,3.0
+ transfert S3 = 0,16.0
+ seaborn==0.13.2
+ outils de configuration == 79.0.1
+ simplejson ==3.20.2
+ six = 1,17,0
+ ténacité ==9.1.2
+ extensions\_de saisie ==4.15.0
+ données tz==2026.1
+ urllib3==2.6.3
+ uv = 0,11,6
+ virtualenv = 21.2.1
+ enveloppe ==2.1.2
+ année = 1,23,0
+ norme = 0,25.0

------
#### [ AWS Glue version 5.1 ]

AWS La version 5.1 de Glue inclut les modules Python suivants prêts à l'emploi :
+ aiobotocore ==2.25.1
+ les globes oculaires aiohappy == 2.6.1
+ aiohttp==3.13.2
+ outils aioiter = 0.12.0
+ signal aérien = 1.4.0
+ appdirs==1.4.4
+ attres==25.4.0
+ boto3 = 1,40,61
+ botocore = 1.40.61
+ certificat==2025.10.5
+ normaliseur de jeux de caractères ==3.4.4
+ chorégraphe==1.2.0
+ contour ==1.3.3
+ cycleur ==0.12.1
+ distlib==0.4.0
+ verrouillage de fichier = 3.20.0
+ outils de polices = 4.60.1
+ liste figée == 1.8.0
+ fsspec==2025.10.0
+ idna==3,11
+ iniconfig==2.3.0
+ jmespath=1.0.1
+ kaléido==1.2.0
+ argent kiwi = 1.4.9
+ logistique==2.0.1
+ matplotlib==3.10.7
+ multidict==6.7.0
+ narvals ==2.10.2
+ numpy==2.3.4
+ orjson==3.11.4
+ emballage = 25,0
+ pandas==2.3.3
+ oreiller = 12.0.0
+ pip = 24,0
+ répertoires de plate-forme == 4.5.0
+ plotly==6.4.0
+ branché = 1.6.0
+ propcache==0.4.1
+ pyarrow = 22.0.0
+ Pigments==2.19.2
+ pyparsing==3.2.5
+ pytest-timeout==2.4.0
+ pytest==8.4.2
+ python-dateutil==2.9.0.post0
+ pytz = 2025,2
+ requêtes==2.32.5
+ s3fs = 2025,10.0
+ transfert S3 = 0.14.0
+ seaborn==0.13.2
+ outils de configuration == 79.0.1
+ simplejson ==3.20.2
+ six = 1,17,0
+ ténacité ==9.1.2
+ extensions\_de saisie ==4.15.0
+ données tz==2025,2
+ urllib3==2.5.0
+ uv = 0,9,7
+ virtualenv = 20.35.4
+ enveloppe ==1.17.3
+ année = 1,22,0

------
#### [ AWS Glue version 5.0 ]

AWS La version 5.0 de Glue inclut les modules Python suivants prêts à l'emploi :
+ aiobotocore ==2.13.1
+ aiohappyeyeballs==2.3.5
+ aiohttp==3.10.1
+ aioitertools==0.11.0
+ aiosignal==1.3.1
+ appdirs==1.4.4
+ attres==24.2.0
+ boto3 = 1.34.131
+ botocore ==1.34.131
+ certificat==2024.7.4
+ normaliseur de jeux de caractères ==3.3.2
+ contourpy==1.2.1
+ cycleur ==0.12.1
+ fonttools==4.53.1
+ liste congelée == 1.4.1
+ fsspec==2024.6.1
+ idna==2.10
+ jmespath==0.10.0
+ kaleido==0.2.1
+ argent kiwi = 1.4.5
+ matplotlib==3.9.0
+ multidict==6.0.5
+ numpy==1,26,4
+ emballage==24.1
+ pandas==2.2.2
+ oreiller = 10.4.0
+ pip==23.0.1
+ plotly==5.23.0
+ pyarrow ==17.0.0
+ pyparsing==3.1.2
+ python-dateutil==2.9.0.post0
+ pytz = 2024,1
+ requêtes==2.32.2
+ s3fs = 2024,6.1
+ transfert S3 = 0.10.2
+ seaborn==0.13.2
+ outils de configuration == 59.6.0
+ six==1.16.0
+ tenacity==9.0.0
+ tzdata==2024.1
+ urllib3==1.25.10
+ virtualenv==20.4.0
+ enveloppe ==1.16.0
+ année ==1.9.4

------
#### [ AWS Glue version 4.0 ]

AWS La version 4.0 de Glue inclut les modules Python suivants prêts à l'emploi :
+ aiobotocore==2.4.1
+ aiohttp==3.8.3
+ aioitertools==0.11.0
+ aiosignal==1.3.1
+ async-timeout==4.0.2
+ asynctest==0.13.0
+ attrs==22.2.0
+ avro-python3==1.10.2
+ boto3==1.24.70
+ botocore==1.27.59
+ certifi==2021.5.30
+ chardet==3.0.4
+ charset-normalizer==2.1.1
+ click==8.1.3
+ cycler==0.10.0
+ Cython==0.29.32
+ fsspec==2021.8.1
+ idna==2.10
+ importlib-metadata==5.0.0
+ jmespath==0.10.0
+ joblib==1.0.1
+ kaleido==0.2.1
+ kiwisolver==1.4.4
+ matplotlib==3.4.3
+ mpmath==1.2.1
+ multidict==6.0.4
+ nltk==3.7
+ numpy==1.23.5
+ packaging==23.0
+ pandas==1.5.1
+ patsy==0.5.1
+ Pillow==9.4.0
+ pip==23.0.1
+ plotly==5.16.0
+ pmdarima==2.0.1
+ ptvsd==4.3.2
+ pyarrow==10.0.0
+ pydevd==2.5.0
+ pyhocon==0.3.58
+ PyMySQL = 1.0.2
+ pyparsing==2.4.7
+ python-dateutil==2.8.2
+ pytz==2021.1
+ PyYAML==6.0.1
+ regex==2022.10.31
+ requests==2.23.0
+ s3fs==2022.11.0
+ s3transfer==0.6.0
+ scikit-learn==1.1.3
+ scipy==1.9.3
+ setuptools==49.1.3
+ six==1.16.0
+ statsmodels==0.13.5
+ subprocess32==3.5.4
+ sympy==1.8
+ tbats==1.1.0
+ threadpoolctl==3.1.0
+ tqdm==4.64.1
+ typing\_extensions==4.4.0
+ urllib3==1.25.11
+ wheel==0.37.0
+ wrapt==1.14.1
+ yarl==1.8.2
+ zipp==3.10.0

------
#### [ AWS Glue version 3.0 ]

AWS La version 3.0 de Glue inclut les modules Python suivants prêts à l'emploi :,
+ aiobotocore==1.4.2
+ aiohttp==3.8.3
+ aioitertools==0.11.0
+ aiosignal==1.3.1
+ async-timeout==4.0.2
+ asynctest==0.13.0
+ attrs==22.2.0
+ avro-python3==1.10.2
+ boto3==1.18.50
+ botocore==1.21.50
+ certifi==2021.5.30
+ chardet==3.0.4
+ charset-normalizer==2.1.1
+ click==8.1.3
+ cycler==0.10.0
+ Cython==0.29.4
+ docutils==0.17.1
+ enum34==1.1.10
+ frozenlist==1.3.3
+ fsspec==2021.8.1
+ idna==2.10
+ importlib-metadata==6.0.0
+ jmespath==0.10.0
+ joblib==1.0.1
+ kiwisolver==1.3.2
+ matplotlib==3.4.3
+ mpmath==1.2.1
+ multidict==6.0.4
+ nltk==3.6.3
+ numpy==1.19.5
+ packaging==23.0
+ pandas==1.3.2
+ patsy==0.5.1
+ Pillow==9.4.0
+ pip==23.0
+ pmdarima==1.8.2
+ ptvsd==4.3.2
+ pyarrow==5.0.0
+ pydevd==2.5.0
+ pyhocon==0.3.58
+ PyMySQL = 1.0.2
+ pyparsing==2.4.7
+ python-dateutil==2.8.2
+ pytz==2021.1
+ PyYAML==5.4.1
+ regex==2022.10.31
+ requests==2.23.0
+ s3fs==2021.8.1
+ s3transfer==0.5.0
+ scikit-learn==0.24.2
+ scipy==1.7.1
+ six==1.16.0
+ Spark==1.0
+ statsmodels==0.12.2
+ subprocess32==3.5.4
+ sympy==1.8
+ tbats==1.1.0
+ threadpoolctl==3.1.0
+ tqdm==4.64.1
+ typing\_extensions==4.4.0
+ urllib3==1.25.11
+ wheel==0.37.0
+ wrapt==1.14.1
+ yarl==1.8.2
+ zipp==3.12.0

------
#### [ AWS Glue version 2.0 ]

AWS La version 2.0 de Glue inclut les modules Python suivants prêts à l'emploi :
+ avro-python3==1.10.0
+ awscli==1.27.60
+ boto3==1.12.4
+ botocore==1.15.4
+ certifi==2019.11.28
+ chardet==3.0.4
+ click==8.1.3
+ colorama==0.4.4
+ cycler==0.10.0
+ Cython==0.29.15
+ docutils==0.15.2
+ enum34==1.1.9
+ fsspec==0.6.2
+ idna==2.9
+ importlib-metadata==6.0.0
+ jmespath==0.9.4
+ joblib==0.14.1
+ kiwisolver==1.1.0
+ matplotlib==3.1.3
+ mpmath==1.1.0
+ nltk==3.5
+ numpy==1.18.1
+ pandas==1.0.1
+ patsy==0.5.1
+ pmdarima==1.5.3
+ ptvsd==4.3.2
+ pyarrow==0.16.0
+ pyasn1==0.4.8
+ pydevd==1.9.0
+ pyhocon==0.3.54
+ PyMySQL = 0.9.3
+ pyparsing==2.4.6
+ python-dateutil==2.8.1
+ pytz==2019.3
+ PyYAML==5.3.1
+ regex==2022.10.31
+ requests==2.23.0
+ rsa==4.7.2
+ s3fs==0.4.0
+ s3transfer==0.3.3
+ scikit-learn==0.22.1
+ scipy==1.4.1
+ setuptools==45.2.0
+ six==1.14.0
+ Spark==1.0
+ statsmodels==0.11.1
+ subprocess32==3.5.4
+ sympy==1.5.1
+ tbats==1.0.9
+ tqdm==4.64.1
+ typing-extensions==4.4.0
+ urllib3==1.25.8
+ wheel==0.35.1
+ zipp==3.12.0

------

## Annexe A : Création d'un artefact Zip of Wheels
<a name="glue-python-library-zip-of-wheels-appendix"></a>

Nous montrons par exemple comment créer un artefact en forme de zip de roues. L'exemple illustré télécharge les packages `cryptography` et les place `scipy` dans un artefact zip of wheels et copie le zip of wheels vers un emplacement Amazon S3.

1. Vous devez exécuter les commandes pour créer le zip of wheels dans un environnement Amazon Linux similaire à l'environnement de Glue. Consultez [Annexe B : AWS Détails de l'environnement Glue](#glue-python-libraries-environment-details). Glue 5.1 utilise AL2023 avec la version 3.11 de Python. Créez Dockerfile qui créera cet environnement :

   ```
   FROM --platform=linux/amd64 public.ecr.aws/amazonlinux/amazonlinux:2023-minimal
   
   # Install Python 3.11, pip, and zip utility
   RUN dnf install -y python3.11 pip zip && \
       dnf clean all
   
   WORKDIR /build
   ```

1. Créez un fichier requirements.txt

   ```
   cryptography
   scipy
   ```

1. Créez et faites tourner un conteneur Docker

   ```
   # Build docker image
   docker build --platform linux/amd64 -t glue-wheel-builder .
   
   # Spin up container
   docker run --platform linux/amd64 -v $(pwd)/requirements.txt:/input/requirements.txt:ro -v $(pwd):/output -it glue-wheel-builder bash
   ```

1. Exécutez les commandes suivantes dans l'image Docker

   ```
   # Create a directory for the wheels
   mkdir wheels
   
   # Copy requirements.txt into wheels directory
   cp /input/requirements.txt wheels/
   
   # Download the wheels with the correct platform and Python version
   pip3 download \
       -r wheels/requirements.txt \
       --dest wheels/ \
       --platform manylinux2014_x86_64 \
       --python-version 311 \
       --only-binary=:all:
   
   # Package the wheels into a zip archive with the .gluewheels.zip suffix
   zip -r mylibraries-1.0.0.gluewheels.zip wheels/
   
   # Copy zip to output
   cp mylibraries-1.0.0.gluewheels.zip /output/
   
   # Exit the container
   exit
   ```

1. Téléchargez le zip of wheels vers l'emplacement Amazon S3

   ```
   aws s3 cp mylibraries-1.0.0.gluewheels.zip s3://amzn-s3-demo-bucket/example-prefix/
   ```

1. Nettoyage optionnel

   ```
   rm mylibraries-1.0.0.gluewheels.zip
   rm Dockerfile
   rm requirements.txt
   ```

1. Exécutez la tâche Glue avec les arguments de tâche suivants :

   ```
   --additional-python-modules s3://amzn-s3-demo-bucket/example-prefix/mylibraries-1.0.0.gluewheels.zip
   --python-modules-installer-option --no-index
   ```

## Annexe B : AWS Détails de l'environnement Glue
<a name="glue-python-libraries-environment-details"></a>


**Compatibilité des versions de Glue et méthodes d’installation**  

| AWS Version à colle | Version de Python | Image de base | version glibc | Tags de plateforme compatibles | 
| --- | --- | --- | --- | --- | 
| 6.0 | 3.13 | [Amazon Linux 2023 (AL2023) ](https://aws.amazon.com/linux/amazon-linux-2023/) | 2,34 | manylinux\_2\_34\_x86\_64<br />manylinux\_2\_28\_x86\_64<br />manylinux2014\_x86\_64 | 
| 5.1 | 3,11 | [Amazon Linux 2023 (AL2023) ](https://aws.amazon.com/linux/amazon-linux-2023/) | 2,34 | manylinux\_2\_34\_x86\_64<br />manylinux\_2\_28\_x86\_64<br />manylinux2014\_x86\_64 | 
| 5.0 | 3,11 | [Amazon Linux 2023 (AL2023) ](https://aws.amazon.com/linux/amazon-linux-2023/) | 2,34 | manylinux\_2\_34\_x86\_64<br />manylinux\_2\_28\_x86\_64<br />manylinux2014\_x86\_64 | 
| 4.0 | 3,10 | [Amazon Linux 2 (AL2) ](https://aws.amazon.com/amazon-linux-2/) | 2,26 | manylinux2014\_x86\_64 | 
| 3.0 | 3.7 | [Amazon Linux 2 (AL2) ](https://aws.amazon.com/amazon-linux-2/) | 2,26 | manylinux2014\_x86\_64 | 
| 2.0 | 3.7 | [AMI Amazon Linux (AL1)](https://aws.amazon.com/amazon-linux-ami/) | 2,17 | manylinux2014\_x86\_64 | 

 Dans le cadre du modèle de responsabilité [AWS partagée](https://aws.amazon.com/compliance/shared-responsibility-model/), vous êtes responsable de la gestion des modules Python supplémentaires, des bibliothèques et de leurs dépendances que vous utilisez avec vos tâches AWS Glue ETL. Cela inclut l’application de mises à jour et de correctifs de sécurité. 

 AWS Glue ne prend pas en charge la compilation de code natif dans l'environnement de travail. Cependant, les tâches AWS Glue s'exécutent dans un environnement Amazon-managed Linux. Vous pouvez peut-être fournir vos dépendances natives sous une forme compilée via un fichier Wheel Python. Veuillez consulter le tableau ci-dessus pour plus de détails sur la compatibilité des versions de AWS Glue. 

**Important**  
 L’utilisation de dépendances incompatibles peut entraîner des problèmes d’exécution, en particulier pour les bibliothèques dont les extensions natives doivent correspondre à l’architecture et aux bibliothèques système de l’environnement cible. Chaque version de AWS Glue s'exécute sur une version spécifique de Python avec des bibliothèques et des configurations système préinstallées. 