Orchestrez un pipeline ETL avec validation, transformation et partitionnement à l'aide de 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 de AWS Step Functions

Sandip Gangapadhyay, Amazon Web Services

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 réessai 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 au 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 pipeline ETL avec AWS Step Functions référentiel.

Conditions préalables et limitations

Prérequis

  • Un actif Compte AWS.

  • AWS Command Line Interface (AWS CLI) installé et configuré avec votre Compte AWS, afin que vous puissiez créer des AWS ressources en déployant une AWS CloudFormation pile. Nous vous recommandons d'utiliser AWS CLI la version 2. Pour obtenir des instructions, consultez la section Installation ou mise à jour vers la dernière version AWS CLI de la AWS CLI documentation. Pour les instructions de configuration, consultez la section Paramètres des fichiers de configuration et d'identification dans la AWS CLI documentation.

  • 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 qui prend en charge le AWS Management Console. (Consultez la liste des navigateurs pris en charge.)

  • AWS Glue accès à la console.

  • AWS Step Functions accès à la console.

Limites

  • En AWS Step Functions, la limite maximale de conservation des journaux d'historique est de 90 jours. Pour plus d'informations, consultez la section Quotas de service Step Functions dans la AWS Step Functions documentation.

Versions du produit

  • Python 3.13 pour AWS Lambda

  • AWS Glue version 4.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 AWS Lambda fonction qui démarre la machine à AWS Step Functions états.

  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 AWS Glue robot d'exploration crée le schéma du fichier brut à partir du dossier stage dans Amazon S3.

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

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

  8. Le AWS Glue robot 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 AWS ressources 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 des AWS Lambda fonctions et d'autres fonctions Services AWS pour créer des applications critiques pour l'entreprise. La console AWS Step Functions graphique 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 hautement disponible, durable, sécurisé et entièrement pub/sub 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 votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de quelques requêtes par jour à des milliers par seconde.

Code

Le code de ce modèle est disponible sur GitHub, dans le pipeline ETL avec AWS Step Functions référentiel. Le référentiel de code contient les fichiers et dossiers suivants :

  • template.yml— AWS CloudFormation modèle 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 AWS Lambda couche 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 AWS Glue robot d'exploration 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 AWS Glue crawler.

    • start_step_function.py— Démarre AWS Step Functions.

    • start_codebuild.py— Démarre le AWS CodeBuild projet.

    • 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 Amazon 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 AWS Step Functions le référentiel.

  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 Amazon 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 Amazon S3 qui sera utilisé pour télécharger le fichier CSV source.

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

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

  • pErrorFolder─ Le dossier du compartiment Amazon 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 Amazon S3 qui sera utilisé pour archiver le fichier CSV source.

  • pEmailforNotification─ Une adresse e-mail valide pour recevoir success/error les notifications.

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

  • 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 Amazon S3.

Avant de déployer le AWS CloudFormation modèle qui automatise le pipeline ETL, vous devez empaqueter les fichiers source du modèle et les charger dans un compartiment Amazon S3. Pour ce faire, exécutez la AWS CLI commande 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 Amazon S3 existant dans l' Région AWS endroit 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 AWS CLI profil valide que vous avez préconfiguré lors de la configuration. AWS CLI

Developer
TâcheDescriptionCompétences requises

Déployez le CloudFormation modèle.

Pour déployer le AWS CloudFormation modèle, exécutez la AWS CLI commande 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 AWS CLI profil préconfiguré.

Developer

Vérifiez les progrès.

Sur la AWS CloudFormation console, vérifiez l'état d'avancement 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 AWS Glue base de données.

L'onglet Sorties de la pile affiche le nom de la AWS Glue base de données. Le nom de la 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 Amazon 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 AWS Glue données partitionnée.

  1. Sur la AWS Glue console, sélectionnez la AWS Glue base de données 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 AWS Glue Data Catalog.

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écuter des requêtes SQL dans Amazon Athena dans la AWS documentation.

analyste de base de données

Résolution des problèmes

ProblèmeSolution

AWS Identity and Access Management Autorisations (IAM) pour le AWS Glue job et le crawler

Si vous personnalisez davantage la AWS Glue tâche ou le robot d'exploration, veillez à accorder les autorisations IAM appropriées dans le rôle IAM utilisé par la AWS Glue tâche, ou à fournir des autorisations de données à. AWS Lake Formation Pour plus d’informations, consultez la documentation AWS.

Ressources connexes

Service AWS documentation

Informations supplémentaires

Le schéma suivant montre le AWS Step Functions flux de travail pour un pipeline ETL réussi, à partir du panneau AWS 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 AWS Step Functions flux de travail d'un pipeline ETL qui échoue en raison d'une erreur de validation des entrées, à partir du panneau Step Functions Inspector.

Step Functions : le flux de travail échoue, de sorte que le fichier est déplacé vers le dossier des erreurs.