

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.

# Configuration des propriétés pour les tâches shell Python dans AWS Glue
<a name="add-job-python"></a>

 Vous pouvez utiliser une tâche shell Python pour exécuter des scripts Python en tant que shell dans AWS Glue. Avec une tâche shell Python, vous pouvez exécuter des scripts compatibles avec Python 3.6 ou Python 3.9. 

**Note**  
 La prise en charge de Pyshell 3.6 prendra fin le 1er mars 2026. Pour migrer vos charges de travail, voir [Migrer depuis des tâches shell AWS Glue Python](https://docs.aws.amazon.com/glue/latest/dg/pyshell-migration.html). Si vous souhaitez continuer avec Python shell 3.9, consultez [Migration du shell Python 3.6 vers le shell Python 3.9](#migrating-version-pyshell36-to-pyshell39). 

**Topics**
+ [Limitations](#python-shell-limitations)
+ [Environnement d’exécution](#python-shell-execution-environment)
+ [Définition des propriétés pour les tâches shell Python](#create-job-python-properties)
+ [Bibliothèques prises en charge pour les tâches shell Python](#python-shell-supported-library)
+ [Ajout de votre propre bibliothèque Python](#create-python-extra-library)
+ [À utiliser AWS CloudFormation avec les jobs shell Python dans AWS Glue](#python-shell-jobs-cloudformation)
+ [Migration du shell Python 3.6 vers le shell Python 3.9](#migrating-version-pyshell36-to-pyshell39)
+ [Migrer depuis les jobs shell AWS Glue Python](pyshell-migration.md)

## Limitations
<a name="python-shell-limitations"></a>

Notez les limitations suivantes des tâches shell Python :
+  Vous ne pouvez pas utiliser les signets de tâche avec les tâches shell Python. 
+ Vous ne pouvez pas conditionner les bibliothèques Python sous forme de fichiers `.egg` dans la version 3.9 de Python et les versions ultérieures. Utilisez à la place `.whl`.
+ L’option `--extra-files` ne peut pas être utilisée en raison de la limitation des copies temporaires des données S3.

## Environnement d’exécution
<a name="python-shell-execution-environment"></a>

Les tâches shell Python s'exécutent dans un environnement d'exécution géré qui fournit un accès au stockage local pour le traitement temporaire des données :

**Stockage temporaire local**  
Le `/tmp` répertoire est disponible pour un stockage temporaire pendant l'exécution de la tâche. Ce répertoire fournit environ 14 GiB d'espace libre que vous pouvez utiliser pour :  
+ Traitement de fichiers temporaires
+ Stockage de données intermédiaire
+ Mise en cache de petits ensembles de données
Le `/tmp` répertoire est éphémère et est nettoyé une fois le travail terminé. Ne l'utilisez pas pour le stockage permanent de données importantes.

## Définition des propriétés pour les tâches shell Python
<a name="create-job-python-properties"></a>

Ces sections décrivent la définition des propriétés des tâches dans AWS Glue Studio ou à l'aide de la AWS CLI.

### AWS Glue Studio
<a name="create-job-python-properties-studio"></a>

Lorsque vous définissez votre tâche Python shell dans AWS Glue Studio, vous indiquez les propriétés suivantes : 

**Rôle IAM**  
Spécifiez le rôle Gestion des identités et des accès AWS (IAM) utilisé pour autoriser les ressources utilisées pour exécuter le travail et accéder aux magasins de données. Pour plus d'informations sur les autorisations requises pour exécuter des tâches dans AWS Glue, consultez [Gestion des identités et des accès pour AWS Glue](security-iam.md).

**Type**  
Choisissez **Python shell (shell Python)** pour exécuter un script Python avec la commande de tâche nommée `pythonshell`.

**Version de Python**  
Choisissez la version Python. La valeur par défaut est Python 3.9. Les versions valides sont Python 3.6 et Python 3.9.

**Charger des bibliothèques d’analyse courantes (recommandé)**  
Choisissez cette option pour inclure les bibliothèques courantes pour Python 3.9 dans le Python shell.  
Si vos bibliothèques sont personnalisées ou si elles sont en conflit avec les bibliothèques préinstallées, vous pouvez choisir de ne pas installer de bibliothèques courantes. Cependant, vous pouvez installer des bibliothèques supplémentaires en plus des bibliothèques courantes.  
Lorsque vous sélectionnez cette option, l’option `library-set` est définie sur `analytics`. Lorsque vous désélectionnez cette option, l’option `library-set` est définie sur `none`. 

**Nom du fichier de script et chemin du script**  
Le code inclus dans le script permet de définir la logique procédurale de votre tâche. Vous fournissez le nom et l'emplacement du script dans Amazon Simple Storage Service (Amazon S3). Vérifiez qu'il n'existe pas de fichier portant le même nom que le répertoire de script dans le chemin d'accès. Pour en savoir plus sur les scripts, consultez [AWS Glue guide de programmation](edit-script.md).

**Script**  
Le code inclus dans le script permet de définir la logique procédurale de votre tâche. Vous pouvez coder ce script dans Python 3.6 ou Python 3.9. Vous pouvez modifier un script dans AWS Glue Studio.

**Unités de traitement de données**  
Nombre maximal d'unités de traitement de AWS Glue données (DPUs) pouvant être allouées lors de l'exécution de cette tâche. Un DPU est une mesure relative de la puissance de traitement composée de 4 V de capacité CPUs de calcul et de 16 Go de mémoire. Pour en savoir plus, consultez [PricingAWS Glue](https://aws.amazon.com/glue/pricing/) (Tarification).   
Vous pouvez affecter la valeur 0.0625 ou 1. La valeur par défaut est 0.0625. Dans les deux cas, le disque local de l’instance sera de 20 Go.

### INTERFACE DE LIGNE DE COMMANDE (CLI)
<a name="create-job-python-properties-cli"></a>

 Vous pouvez également créer une tâche **shell Python** à l'aide de AWS CLI, comme dans l'exemple suivant. 

```
 aws glue create-job --name python-job-cli --role Glue_DefaultRole 
     --command '{"Name" :  "pythonshell", "PythonVersion": "3.9", "ScriptLocation" : "s3://amzn-s3-demo-bucket/scriptname.py"}'  
     --max-capacity 0.0625
```

**Note**  
 Il n’est pas nécessaire de spécifier la version d’AWS Glue, puisque le paramètre `--glue-version` ne s’applique pas aux tâches shell AWS Glue. Toute version spécifiée sera ignorée. 

 Tâches que vous créez avec Python 3 AWS CLI par défaut. Les versions valides de Python sont 3 (correspondant à 3.6), et 3.9. Pour spécifier Python 3.6, ajoutez ce tuple au paramètre `--command` : `"PythonVersion":"3"` 

 Pour spécifier Python 3.9, ajoutez ce tuple au paramètre `--command` : `"PythonVersion":"3.9"` 

 Pour définir la capacité maximale utilisée par une tâche shell Python, définissez le paramètre `--max-capacity`. Pour les tâches shell Python, le paramètre `--allocated-capacity` ne peut pas être utilisé. 

## Bibliothèques prises en charge pour les tâches shell Python
<a name="python-shell-supported-library"></a>

 Dans le Python shell utilisant Python 3.9, vous pouvez choisir l’ensemble de bibliothèques qui utilisera les ensembles de bibliothèques préemballés selon vos besoins. Vous pouvez utiliser l’option `library-set` pour choisir l’ensemble de bibliothèques. Les valeurs valides sont `analytics`, et `none`. 

L’environnement pour exécuter une tâche shell Python prend en charge les bibliothèques suivantes : 


| Version de Python | Python 3.6 | Python 3.9 | 
| --- | --- | --- | 
| Ensemble de bibliothèques | S/O | analytique | Aucun(e) | 
| avro |  | 1.11.0 |  | 
| awscli | 116,242 | 1,23,5 | 1,23,5 | 
| awswrangler |  | 2.15.1 |  | 
| botocore | 1,12,232 | 1,24,21 | 1,23,5 | 
| boto3 | 1,9,203 | 1,21,21 |  | 
| elasticsearch |  | 8.2.0 |  | 
| numpy | 1.16,2 | 1.22.3 |  | 
| pandas | 0,24,2 | 1.4.2 |  | 
| psycopg2 |  | 2.9.3 |  | 
| pyathena |  | 2.5.3 |  | 
| PyGreSQL | 5.0.6 |  |  | 
| PyMySQL |  | 1.0.2 |  | 
| pyodbc |  | 4,0,32 |  | 
| pyorc |  | 0.6.0 |  | 
| redshift-connector |  | 2,0.907 |  | 
| demandes | 2.22.0 | 2.27.1 |  | 
| scikit-learn | 0,20,3 | 1.0.2 |  | 
| scipy | 1.2.1 | 1.8.0 |  | 
| SQLAlchemy |  | 1,4,36 |  | 
| s3fs |  | 2022.3.0 |  | 

Vous pouvez utiliser la bibliothèque `NumPy` dans une tâche shell Python à des fins de calcul scientifique. Pour de plus amples informations, veuillez consulter [NumPy](http://www.numpy.org). L'exemple suivant montre un NumPy script qui peut être utilisé dans une tâche shell Python. Le script inscrit « Hello world » et les résultats de plusieurs calculs mathématiques.

```
import numpy as np
print("Hello world")

a = np.array([20,30,40,50])
print(a)

b = np.arange( 4 )

print(b)

c = a-b

print(c)

d = b**2

print(d)
```

## Ajout de votre propre bibliothèque Python
<a name="create-python-extra-library"></a>

### Utilisation de PIP
<a name="create-python-extra-library-pip"></a>

Le Python shell utilisant Python 3.9 vous permet de fournir des modules Python supplémentaires ou des versions différentes au niveau de la tâche. Vous pouvez utiliser l’option `--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 ne pouvez pas fournir de modules Python personnalisés hébergés sur Amazon S3 avec ce paramètre lorsque vous utilisez des tâches shell Python.

Par exemple, pour mettre à jour ou ajouter un nouveau module `scikit-learn`, utilisez la clé et la valeur suivantes : `"--additional-python-modules", "scikit-learn==0.21.3"`.

AWS Glue utilise le programme d’installation de package Python (pip3) pour installer les modules supplémentaires. Vous pouvez transmettre des options pip3 supplémentaires à l’intérieur de la valeur `--additional-python-modules`. Par exemple, `"scikit-learn==0.21.3 -i https://pypi.python.org/simple/"`. Toutes les incompatibilités ou limitations de pip3 s’appliquent.

**Note**  
Pour éviter les incompatibilités à l’avenir, nous vous recommandons d’utiliser des bibliothèques créées pour Python 3.9.

### Utilisation d’un fichier Egg ou Whl
<a name="create-python-extra-library-egg-whl"></a>

Vous avez peut-être déjà une ou plusieurs bibliothèques Python empaquetées sous la forme d’un fichier `.egg` ou `.whl`. Le cas échéant, vous pouvez les spécifier pour votre tâche à l’aide du AWS Command Line Interface (AWS CLI) sous l’indicateur « `--extra-py-files` », comme dans l’exemple suivant.

```
aws glue create-job --name python-redshift-test-cli --role role --command '{"Name" :  "pythonshell", "ScriptLocation" : "s3://MyBucket/python/library/redshift_test.py"}' 
     --connections Connections=connection-name --default-arguments '{"--extra-py-files" : ["s3://amzn-s3-demo-bucket/EGG-FILE", "s3://amzn-s3-demo-bucket/WHEEL-FILE"]}'
```

Si vous n’êtes pas sûr de la façon de créer un fichier `.egg` ou `.whl` à partir d’une bibliothèque Python, procédez comme suit. Cet exemple est applicable sur macOS, Linux et WSL (sous-système Windows pour Linux).

**Pour créer un fichier Python .egg ou .whl**

1. Créez un cluster Amazon Redshift dans un Virtual Private Cloud (VPC) et ajoutez des données dans une table.

1. Créez une AWS Glue connexion pour la VPC-SecurityGroup-Subnet combinaison que vous avez utilisée pour créer le cluster. Testez le bon fonctionnement de cette connexion.

1. Créez un répertoire nommé `redshift_example` et un fichier nommé `setup.py`. Collez le code suivant dans .

   ```
   from setuptools import setup
   
   setup(
       name="redshift_module",
       version="0.1",
       packages=['redshift_module']
   )
   ```

1. Dans le répertoire `redshift_example`, créez un répertoire `redshift_module`. Dans le répertoire `redshift_module`, créez les fichiers `__init__.py` et `pygresql_redshift_common.py`.

1. Laissez le fichier `__init__.py` vide. Collez le code suivant dans `pygresql_redshift_common.py`. Remplacez *port**db\$1name*,*user*, et par *password\$1for\$1user* des informations spécifiques à votre cluster Amazon Redshift. Remplacez *table\$1name* par le nom de la table dans Amazon Redshift.

   ```
   import pg
   
   
   def get_connection(host):
       rs_conn_string = "host=%s port=%s dbname=%s user=%s password=%s" % (
           host, port, db_name, user, password_for_user)
   
       rs_conn = pg.connect(dbname=rs_conn_string)
       rs_conn.query("set statement_timeout = 1200000")
       return rs_conn
   
   
   def query(con):
       statement = "Select * from table_name;"
       res = con.query(statement)
       return res
   ```

1. Si vous n’êtes pas déjà dans le répertoire `redshift_example`, accédez-y.

1. Effectuez l’une des actions suivantes :
   + Pour créer un fichier `.egg`, exécutez la commande suivante :

     ```
     python setup.py bdist_egg
     ```
   + Pour créer un fichier `.whl`, exécutez la commande suivante.

     ```
     python setup.py bdist_wheel
     ```

1. Installez les dépendances qui sont nécessaires à la commande précédente.

1. La commande crée un fichier dans le répertoire `dist` :
   + Si vous avez créé un fichier egg, il est nommé `redshift_module-0.1-py2.7.egg`.
   + Si vous avez créé un fichier Wheel, il est nommé `redshift_module-0.1-py2.7-none-any.whl`.

   Téléchargez vos fichiers sur Amazon S3.

   Dans cet exemple, le chemin du fichier chargé est *s3://amzn-s3-demo-bucket/EGG-FILE* ou *s3://amzn-s3-demo-bucket/WHEEL-FILE*. 

1. Créez un fichier Python à utiliser comme script pour la tâche AWS Glue et ajoutez le code suivant au fichier.

   ```
   from redshift_module import pygresql_redshift_common as rs_common
   
   con1 = rs_common.get_connection(redshift_endpoint)
   res = rs_common.query(con1)
   
   print "Rows in the table cities are: "
   
   print res
   ```

1. Téléchargez le fichier précédent sur Amazon S3. Dans cet exemple, le chemin du fichier chargé est *s3://amzn-s3-demo-bucket/scriptname.py*. 

1. Créez une tâche shell Python à l’aide de ce script. Dans la console AWS Glue, dans la page **Propriétés de la tâche**, spécifiez le chemin d’accès au fichier `.egg/.whl` dans la zone **Chemin de la bibliothèque Python**. Si vous avez plusieurs fichiers `.egg/.whl` et fichiers Python, indiquez-les dans cette zone sous forme de liste de valeurs séparées par des virgules. 

   Lors de la modification ou du changement de nom de fichiers `.egg`, les noms de ces derniers doivent utiliser les noms par défaut générés par la commande « python setup.py bdist\$1egg » ou doivent respecter les conventions de dénomination du module Python. Pour plus d’informations, consultez [Style Guide for Python Code](https://www.python.org/dev/peps/pep-0008/) (Guide de style pour le code Python). 

   À l'aide de AWS CLI, créez une tâche avec une commande, comme dans l'exemple suivant.

   ```
   aws glue create-job --name python-redshift-test-cli --role Role --command '{"Name" :  "pythonshell", "ScriptLocation" : "s3://amzn-s3-demo-bucket/scriptname.py"}' 
        --connections Connections="connection-name" --default-arguments '{"--extra-py-files" : ["s3://amzn-s3-demo-bucket/EGG-FILE", "s3://amzn-s3-demo-bucket/WHEEL-FILE"]}'
   ```

   Lorsque le job s'exécute, le script imprime les lignes créées dans la *table\$1name* table du cluster Amazon Redshift.

## À utiliser AWS CloudFormation avec les jobs shell Python dans AWS Glue
<a name="python-shell-jobs-cloudformation"></a>

 Vous pouvez les utiliser AWS CloudFormation avec des jobs shell Python dansAWS Glue. Voici un exemple : 

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  Python39Job:
    Type: 'AWS::Glue::Job'
    Properties:
      Command:
        Name: pythonshell
        PythonVersion: '3.9'
        ScriptLocation: 's3://bucket/location'
      MaxRetries: 0
      Name: python-39-job
      Role: RoleName
```

 Le groupe Amazon CloudWatch Logs pour les résultats des tâches shell Python est`/aws-glue/python-jobs/output`. Pour les erreurs, consultez le groupe de journaux `/aws-glue/python-jobs/error`. 

## Migration du shell Python 3.6 vers le shell Python 3.9
<a name="migrating-version-pyshell36-to-pyshell39"></a>

 Pour migrer vos jobs shell Python vers la dernière AWS Glue version : 

1.  Dans la AWS Glue console ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)), choisissez votre job shell Python existant. 

1.  Dans l’onglet de **Informations de la tâche**, définissez la version de Python sur `Python 3.9` et choisissez **Enregistrer**. 

1.  Assurez-vous que votre script de tâche est compatible avec Python 3.9 et qu’il s’exécute correctement. 