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.
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
Support pour Pyshell v3.6 prendra fin le 1er mars 2026. Pour migrer vos charges de travail, voir Migrer depuis des tâches shell AWS Glue Python. Si vous souhaitez continuer avec Python shell v3.9, voirMigration du shell Python 3.6 vers le shell Python 3.9.
Limites
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 empaqueter des bibliothèques Python sous forme de
.egg
fichiers dans Python 3.9+. 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.
Définition des propriétés pour les tâches shell Python
Ces sections décrivent la définition des propriétés des tâches dans AWS Glue Studio, ou en utilisant la AWS CLI.
AWS Glue Studio
Lorsque vous définissez votre tâche shell Python dans AWS Glue Studio, vous fournissez certaines des propriétés suivantes :
- Rôle IAM
-
Spécifiez le rôle AWS Identity and Access Management (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 relatives à l'exécution de tâches dans AWS Glue, voir Gestion des identités et des accès pour AWS Glue.
- Type
-
Choisissez Python shell (shell Python) pour exécuter un script Python avec la commande de tâche nommée
pythonshell
. - Version 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 suranalytics
. Lorsque vous désélectionnez cette option, l'optionlibrary-set
est définie surnone
. - 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.
- 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
-
Le nombre maximum de AWS Glue unités de traitement de données (DPUs) qui peuvent ê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 plus d'informations, consultez .AWS Glue 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)
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://DOC-EXAMPLE-BUCKET/scriptname.py"}'
--max-capacity 0.0625
Note
Il n'est pas nécessaire de spécifier la version de AWS Glue puisque le paramètre --glue-version
ne s'applique pas à AWS Glue emplois fictifs. 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
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 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
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
Utilisation de PIP
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 Python Package Installer (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
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://DOC-EXAMPLE-BUCKET/EGG-FILE", "s3://DOC-EXAMPLE-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
-
Créez un cluster Amazon Redshift dans un Virtual Private Cloud (VPC) et ajoutez des données dans une table.
-
Créez un 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.
-
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'] )
-
Dans le répertoire
redshift_example
, créez un répertoireredshift_module
. Dans le répertoireredshift_module
, créez les fichiers__init__.py
etpygresql_redshift_common.py
. -
Laissez le fichier
__init__.py
vide. Collez le code suivant danspygresql_redshift_common.py
. Remplacezport
db_name
,user
, et parpassword_for_user
des informations spécifiques à votre cluster Amazon Redshift. Remplaceztable_name
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 * fromtable_name
;" res = con.query(statement) return res -
Si vous n'êtes pas déjà dans le répertoire
redshift_example
, accédez-y. -
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
-
Installez les dépendances qui sont nécessaires à la commande précédente.
-
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://DOC-EXAMPLE-BUCKET/EGG-FILE
ous3://DOC-EXAMPLE-BUCKET/WHEEL-FILE
. -
-
Créez un fichier Python à utiliser comme script pour le AWS Glue job, 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 -
Téléchargez le fichier précédent sur Amazon S3. Dans cet exemple, le chemin du fichier chargé est
s3://DOC-EXAMPLE-BUCKET/scriptname.py
. -
Créez une tâche shell Python à l'aide de ce script. Sur le AWS Glue console, sur la page des propriétés du Job, spécifiez le chemin du
.egg/.whl
fichier dans le champ 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_egg » ou doivent respecter les conventions de dénomination du module Python. Pour plus d'informations, consultez Style Guide for Python Code(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://DOC-EXAMPLE-BUCKET/scriptname.py"}' --connections Connections="connection-name" --default-arguments '{"--extra-py-files" : ["s3://DOC-EXAMPLE-BUCKET/EGG-FILE", "s3://DOC-EXAMPLE-BUCKET/WHEEL-FILE"]}'
Lorsque le job s'exécute, le script imprime les lignes créées dans la
table_name
table du cluster Amazon Redshift.
À utiliser AWS CloudFormation avec les jobs shell Python dans AWS Glue
Vous pouvez utiliser AWS CloudFormation avec Python des jobs shell dans AWS 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
Pour migrer vos jobs shell Python vers la dernière AWS Glue version :
-
Dans la AWS Glue console (https://console.aws.amazon.com/glue/
), choisissez votre job shell Python existant. -
Dans l'onglet Détails du Job, définissez la version de Python sur
Python 3.9
et choisissez Enregistrer. -
Assurez-vous que votre script de tâche est compatible avec Python 3.9 et qu'il s'exécute correctement.