Orchestrez un pipeline ETL avec validation, transformation et partitionnement à l'aide d'AWS Step Functions - Recommandations AWS

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

Limites

  • Dans AWS Step Functions, la durée maximale de conservation des journaux d'historique est de 90 jours. Pour plus d'informations, consultez la section Quotas et quotas pour les flux de travail standard dans la documentation AWS Step Functions.

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.

Le flux de travail illustré dans le diagramme comprend les étapes de haut niveau suivantes :

  1. L'utilisateur télécharge un fichier CSV dans le dossier source d'Amazon S3.

  2. Un événement de notification Amazon S3 lance une fonction AWS Lambda qui démarre la machine d'état Step Functions.

  3. La fonction Lambda valide le schéma et le type de données du fichier CSV brut.

  4. En fonction des résultats de validation :

    1. Si la validation du fichier source aboutit, le fichier est transféré dans le dossier de stage pour un traitement ultérieur.

    2. 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).

  5. Un robot d'exploration AWS Glue crée le schéma du fichier brut à partir du dossier stage dans Amazon S3.

  6. Une tâche AWS Glue transforme, compresse et partitionne le fichier brut au format Parquet.

  7. La tâche AWS Glue déplace également le fichier vers le dossier de transformation d'Amazon S3.

  8. 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.

  9. 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.

  10. 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. Le référentiel de code contient les fichiers et dossiers suivants :

  • 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/pythondossier — Contient les packages Python nécessaires pour créer la couche AWS Lambda requise pour ce projet.

  • lambdadossier — 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âcheDescriptionCompétences requises

Clonez le référentiel d'exemples de code.

  1. Ouvrez le pipeline ETL avec le référentiel AWS Step Functions.

  2. Choisissez Code sur la page principale du référentiel, au-dessus de la liste des fichiers, et copiez l'URL répertoriée sous Cloner avec HTTPS.

  3. Remplacez votre répertoire de travail par l'emplacement où vous souhaitez stocker les fichiers d'exemple.

  4. Sur un terminal ou une invite de commande, tapez la commande suivante :

    git clone <repoURL>

    <repoURL> fait référence à l'URL que vous avez copiée à l'étape 2.

Developer

Mettez à jour les valeurs des paramètres.

Dans votre copie locale du référentiel, modifiez le parameter.json fichier et mettez à jour les valeurs des paramètres par défaut comme suit :

  • pS3BucketName─ Le nom du compartiment S3 pour stocker les ensembles de données. Le modèle créera ce compartiment pour vous. Le nom du compartiment doit être globalement unique.

  • pSourceFolder─ Le nom du dossier dans le compartiment S3 qui sera utilisé pour télécharger le fichier CSV source.

  • pStageFolder─ Le nom du dossier dans le compartiment S3 qui sera utilisé comme zone intermédiaire pendant le processus.

  • pTransformFolder─ Le nom du dossier dans le compartiment S3 qui sera utilisé pour stocker les ensembles de données transformés et partitionnés.

  • pErrorFolder─ Le dossier du compartiment S3 dans lequel le fichier CSV source sera déplacé s'il ne peut pas être validé.

  • pArchiveFolder ─ Le nom du dossier dans le compartiment S3 qui sera utilisé pour archiver le fichier CSV source.

  • pEmailforNotification─ Une adresse e-mail valide pour recevoir les notifications de succès/d'erreur.

  • pPrefix─ Chaîne de préfixe qui sera utilisée dans le nom du crawler AWS Glue.

  • pDatasetSchema─ Le schéma de jeu de données par rapport auquel le fichier source sera validé. Le package Python Cerberus est utilisé pour la validation du jeu de données source. Pour plus d'informations, consultez le site Web de Cerberus.

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é :

aws cloudformation package --template-file template.yml --s3-bucket <bucket_name> --output-template-file packaged.template --profile <profile_name>

où :

  • <bucket_name>est le nom d'un compartiment S3 existant dans la région AWS où vous souhaitez déployer la pile. Ce compartiment est utilisé pour stocker le package de code source du CloudFormation modèle.

  • <profile_name>est un profil d'interface de ligne de commande AWS valide que vous avez préconfiguré lors de la configuration de l'interface de ligne de commande AWS.

Developer
TâcheDescriptionCompétences requises

Déployez le CloudFormation modèle.

Pour déployer le CloudFormation modèle, exécutez la commande AWS CLI suivante :

aws cloudformation deploy --stack-name <stack_name> --template-file packaged.template --parameter-overrides file://parameter.json --capabilities CAPABILITY_IAM --profile <profile_name>

où :

  • <stack_name>est un identifiant unique pour la CloudFormation pile.

  • <profile-name>est votre profil de CLI AWS préconfiguré.

Developer

Vérifiez les progrès.

Sur la CloudFormation console AWS, vérifiez la progression du développement de la pile. Lorsque le statut est définiCREATE_COMPLETE, la pile a été déployée avec succès.

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é estGlueDBOutput.

Developer
TâcheDescriptionCompétences requises

Démarrez le pipeline ETL.

  1. Accédez au dossier source (sourceou au nom du dossier que vous avez défini dans le parameter.json fichier) dans le compartiment S3.

  2. Téléchargez un exemple de fichier CSV dans ce dossier. (Le référentiel de code fournit un exemple de fichier appelé Sample_Bank_Transaction_Raw_Dataset.csv que vous pouvez utiliser.) Le téléchargement du fichier lancera le pipeline ETL via Step Functions.

  3. Sur la console Step Functions, vérifiez l'état du 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 (transformou dans le nom du dossier que vous avez défini dans le parameter.json fichier).

Developer

Vérifiez la base de données AWS Glue partitionnée.

  1. Sur la console AWS Glue, sélectionnez la base de données AWS Glue créée par la pile (il s'agit de la base de données que vous avez mentionnée dans l'épopée précédente).

  2. Vérifiez que la table partitionnée est disponible dans le catalogue de données AWS Glue.

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èmeSolution

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.

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.