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.
Orchestrez un pipeline ETL avec validation, transformation et partitionnement à l'aide d'AWS Step Functions
Créée par Sandip Gangapadhyay (AWS)
Dépôt de code : aws-step-functions-etl-pipeline-pattern | Environnement : Production | Technologies : analyse ; mégadonnées ; lacs de données DevOps ; technologie sans serveur |
Services AWS : Amazon Athena ; AWS Glue ; AWS Lambda ; AWS Step Functions |
Récapitulatif
Ce modèle décrit comment créer un pipeline d'extraction, de transformation et de chargement (ETL) sans serveur pour valider, transformer, compresser et partitionner un ensemble de données CSV volumineux afin d'optimiser les performances et les coûts. Le pipeline est orchestré par AWS Step Functions et inclut des fonctionnalités de gestion des erreurs, de relance automatique et de notification aux utilisateurs.
Lorsqu'un fichier CSV est chargé dans un dossier source du bucket Amazon Simple Storage Service (Amazon S3), le pipeline ETL commence à s'exécuter. Le pipeline valide le contenu et le schéma du fichier CSV source, transforme le fichier CSV en un format Apache Parquet compressé, partitionne le jeu de données par année, mois et jour, et le stocke dans un dossier distinct pour que les outils d'analyse puissent le traiter.
Le code qui automatise ce modèle est disponible sur GitHub, dans le référentiel ETL Pipeline with AWS Step Functions
Conditions préalables et limitations
Prérequis
Un compte AWS actif.
L'interface de ligne de commande AWS (AWS CLI) est installée et configurée avec votre compte AWS, afin que vous puissiez créer des ressources AWS en déployant une pile CloudFormation AWS. La version 2 de l'interface de ligne de commande AWS est recommandée. Pour les instructions d'installation, consultez la section Installation, mise à jour et désinstallation de la version 2 de l'interface de ligne de commande AWS dans la documentation de l'interface de ligne de commande AWS. Pour les instructions de configuration de l'AWS CLI, consultez la section Configuration et paramètres des fichiers d'identification dans la documentation de l'AWS CLI.
Un compartiment Amazon S3.
Un jeu de données CSV avec le schéma correct. (Le référentiel de code
inclus dans ce modèle fournit un exemple de fichier CSV contenant le schéma et le type de données appropriés que vous pouvez utiliser.) Un navigateur Web compatible avec l'AWS Management Console. (Consultez la liste des navigateurs pris en charge
.) Accès à la console AWS Glue.
Accès à la console AWS Step Functions.
Limites
Versions du produit
Python 3.11 pour AWS Lambda
AWS Glue version 2.0
Architecture
![Processus ETL depuis le compartiment source S3 via Step Functions, AWS Glue et Amazon SNS en 10 étapes.](images/pattern-img/8eb792b0-d35b-4a63-ba2d-71eb8d2c1203/images/054c8e9d-76a2-4334-b21a-cbe76af45923.png)
Le flux de travail illustré dans le diagramme comprend les étapes de haut niveau suivantes :
L'utilisateur télécharge un fichier CSV dans le dossier source d'Amazon S3.
Un événement de notification Amazon S3 lance une fonction AWS Lambda qui démarre la machine d'état Step Functions.
La fonction Lambda valide le schéma et le type de données du fichier CSV brut.
En fonction des résultats de validation :
Si la validation du fichier source aboutit, le fichier est transféré dans le dossier de stage pour un traitement ultérieur.
Si la validation échoue, le fichier est transféré dans le dossier des erreurs et une notification d'erreur est envoyée via Amazon Simple Notification Service (Amazon SNS).
Un robot d'exploration AWS Glue crée le schéma du fichier brut à partir du dossier stage dans Amazon S3.
Une tâche AWS Glue transforme, compresse et partitionne le fichier brut au format Parquet.
La tâche AWS Glue déplace également le fichier vers le dossier de transformation d'Amazon S3.
Le robot d'exploration AWS Glue crée le schéma à partir du fichier transformé. Le schéma obtenu peut être utilisé par n'importe quelle tâche d'analyse. Vous pouvez également utiliser Amazon Athena pour exécuter des requêtes ad hoc.
Si le pipeline se termine sans erreur, le fichier de schéma est déplacé vers le dossier d'archive. En cas d'erreur, le fichier est plutôt déplacé vers le dossier des erreurs.
Amazon SNS envoie une notification indiquant le succès ou l'échec en fonction de l'état d'achèvement du pipeline.
Toutes les ressources AWS utilisées dans ce modèle sont sans serveur. Il n'y a aucun serveur à gérer.
Outils
Services AWS
AWS Glue
— AWS Glue est un service ETL entièrement géré qui permet aux clients de préparer et de charger facilement leurs données à des fins d'analyse. AWS Step Functions
— AWS Step Functions est un service d'orchestration sans serveur qui vous permet de combiner les fonctions AWS Lambda et d'autres services AWS pour créer des applications critiques pour l'entreprise. La console graphique AWS Step Functions vous permet de voir le flux de travail de votre application comme une série d'étapes pilotées par des événements. Amazon S3
— Amazon Simple Storage Service (Amazon S3) est un service de stockage d'objets qui offre une évolutivité, une disponibilité des données, une sécurité et des performances de pointe. Amazon SNS —
Amazon Simple Notification Service (Amazon SNS) est un service de messagerie Pub/Sub hautement disponible, durable, sécurisé et entièrement géré qui vous permet de dissocier les microservices, les systèmes distribués et les applications sans serveur. AWS Lambda
— AWS Lambda est un service de calcul qui vous permet d'exécuter du code sans provisionner ni gérer de serveurs. AWS Lambda exécute le code uniquement lorsque cela est nécessaire et se met à l'échelle automatiquement, qu'il s'agisse de quelques requêtes par jour ou de milliers de requêtes par seconde.
Code
Le code de ce modèle est disponible sur GitHub, dans le référentiel ETL Pipeline with AWS Step Functions
template.yml
— CloudFormation Modèle AWS pour créer le pipeline ETL avec AWS Step Functions.parameter.json
— Contient tous les paramètres et leurs valeurs. Vous mettez à jour ce fichier pour modifier les valeurs des paramètres, comme décrit dans la section Epics.myLayer/python
dossier — Contient les packages Python nécessaires pour créer la couche AWS Lambda requise pour ce projet.lambda
dossier — Contient les fonctions Lambda suivantes :move_file.py
— Déplace le jeu de données source vers le dossier d'archive, de transformation ou d'erreur.check_crawler.py
— Vérifie l'état du robot d'exploration AWS Glue autant de fois que configuré par la variable d'RETRYLIMIT
environnement avant qu'il n'envoie un message d'échec.start_crawler.py
— Démarre le robot d'exploration AWS Glue.start_step_function.py
— Démarre AWS Step Functions.start_codebuild.py
— Démarre le CodeBuild projet AWS.validation.py
— Valide le jeu de données brut en entrée.s3object.py
— Crée la structure de répertoire requise dans le compartiment S3.notification.py
— Envoie des notifications de réussite ou d'erreur à la fin du pipeline.
Pour utiliser l'exemple de code, suivez les instructions de la section Epics.
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Clonez le référentiel d'exemples de code. |
| Developer |
Mettez à jour les valeurs des paramètres. | Dans votre copie locale du référentiel, modifiez le
| Developer |
Téléchargez le code source dans le compartiment S3. | Avant de déployer le CloudFormation modèle qui automatise le pipeline ETL, vous devez empaqueter les fichiers source du CloudFormation modèle et les télécharger dans un compartiment S3. Pour ce faire, exécutez la commande AWS CLI suivante avec votre profil préconfiguré :
où :
| Developer |
Tâche | Description | Compétences requises |
---|---|---|
Déployez le CloudFormation modèle. | Pour déployer le CloudFormation modèle, exécutez la commande AWS CLI suivante :
où :
| Developer |
Vérifiez les progrès. | Sur la CloudFormation console AWS | Developer |
Notez le nom de la base de données AWS Glue. | L'onglet Outputs de la pile affiche le nom de la base de données AWS Glue. Le nom clé est | Developer |
Tâche | Description | Compétences requises |
---|---|---|
Démarrez le pipeline ETL. |
| Developer |
Vérifiez la présence du jeu de données partitionné. | Lorsque le pipeline ETL est terminé, vérifiez que l'ensemble de données partitionné est disponible dans le dossier de transformation Amazon S3 ( | Developer |
Vérifiez la base de données AWS Glue partitionnée. |
| Developer |
Exécutez des requêtes. | (Facultatif) Utilisez Amazon Athena pour exécuter des requêtes ad hoc sur la base de données partitionnée et transformée. Pour obtenir des instructions, consultez la section Exécution de requêtes SQL à l'aide d'Amazon Athena dans la documentation AWS. | analyste de base de données |
Résolution des problèmes
Problème | Solution |
---|---|
Autorisations AWS Identity and Access Management (IAM) pour le job et le crawler AWS Glue | Si vous personnalisez davantage la tâche AWS Glue ou le robot d'exploration, veillez à accorder les autorisations IAM appropriées dans le rôle IAM utilisé par la tâche AWS Glue, ou à fournir des autorisations de données à AWS Lake Formation. Pour plus d'informations, consultez la documentation AWS. |
Ressources connexes
Documentation des services AWS
Informations supplémentaires
Le schéma suivant montre le flux de travail AWS Step Functions pour un pipeline ETL réussi, à partir du panneau Step Functions Inspector.
![Workflow Step Functions pour valider le fichier .csv d'entrée, analyser les données et exécuter la tâche AWS Glue.](images/pattern-img/8eb792b0-d35b-4a63-ba2d-71eb8d2c1203/images/bd77de7b-4d04-44bb-95d2-3ec4599b3770.png)
Le schéma suivant montre le flux de travail AWS Step Functions pour un pipeline ETL qui échoue en raison d'une erreur de validation des entrées, depuis le panneau Step Functions Inspector.
![Step Functions : le flux de travail échoue, de sorte que le fichier est déplacé vers le dossier des erreurs.](images/pattern-img/8eb792b0-d35b-4a63-ba2d-71eb8d2c1203/images/5fd7dd79-ba4c-4c20-b1f0-ad4b5f22bdfc.png)