Création et consommation de Webhooks pour les oiseaux

Email

1 min read

Création et consommation de Webhooks pour les oiseaux

Email

1 min read

Création et consommation de Webhooks pour les oiseaux

Le guide suivant est une simple aide pour permettre aux expéditeurs de se sentir à l'aise lors de la création d'un webhook d'événements Bird et de l'utilisation des données via l'infrastructure d'AWS.

Les webhooks d'événements en temps réel de Bird sont un outil incroyablement précieux pour que les expéditeurs puissent envoyer automatiquement des données à leurs systèmes. Cela peut alimenter l'automatisation en aval, telle que la mise à jour des listes de diffusion, le déclenchement de parcours d'email automatisés ou la population de tableaux de bord internes. Bien que les mêmes données d'événements puissent être accessibles via l'interface utilisateur de Bird en utilisant Event Search, ou programmatiquement en utilisant le Events API de Bird, des limites sur le nombre d'enregistrements renvoyés dans une seule requête ou des limitations de taux sur le point de terminaison API peuvent rendre ces deux méthodes restrictives pour les expéditeurs de grande envergure.  

Les webhooks d'événements en temps réel permettent à un expéditeur de configurer un point de terminaison où Bird transmet les données, et celles-ci peuvent être consommées sans avoir à planifier des tâches cron qui récupèrent les données. Il y a aussi des compromis logistiques lorsque vous récupérez les données par rapport à le fait de les recevoir, comme devoir identifier la période et les paramètres à utiliser pour chaque requête API. Si les périodes ne sont pas parfaitement alignées, vous risquez de manquer des données, et si les périodes se chevauchent, vous devez gérer les enregistrements de données en double. Avec les webhooks en temps réel, les données d'événements sont simplement poussées vers votre point de terminaison dès qu'elles sont disponibles dans Bird.

Bien que les avantages de recevoir des données d'événements en temps réel pour alimenter des processus d'automatisation en aval puissent être compris immédiatement par de nombreux expéditeurs, le processus réel pour implémenter et consommer les webhooks peut être intimidant. Cela peut être particulièrement vrai si vous n'êtes pas familier avec les composants techniques de création d'un point de terminaison et de gestion des données de manière programmatique. Il existe des services qui consomment les données de webhook de Bird et les intègrent automatiquement dans votre base de données – un exemple serait StitchData, dont nous avons parlé dans notre blog par le passé.  Cependant, si vous souhaitez avoir plus de contrôle sur le processus, vous pouvez facilement construire les composants vous-même. Voici un guide simple pour aider les expéditeurs à se sentir à l'aise lors de la création d'un webhook d'événements Bird et de la consommation des données en utilisant l'infrastructure dans AWS.

Configuration de l'Endpoint de Cible Webhook

Lorsqu’un événement Bird est créé, nous souhaitons que les données de l'événement soient diffusées en temps réel vers un point de terminaison dans AWS afin que nous puissions les consommer et les utiliser de manière programmatique. Les données seront envoyées de Bird à un point de terminaison cible, qui transmettra la charge utile à une fonction lambda qui traitera et stockera les données dans un compartiment S3. Un diagramme de haut niveau du flux de données décrit peut être vu ci-dessous :


Flowchart for a system with components, showing a process starting with 'MessageBird', continuing through an 'Application Load Balancer', leading to a 'Lambda Script (Consumer)', connecting to an 'S3' storage, and optionally processed by another 'Lambda Script (Process)'.


Pour mettre en œuvre ce workflow, construisons-les en réalité dans l'ordre inverse en commençant par créer un compartiment S3 où nous stockerons nos données d'événement, puis en travaillant à rebours – en ajoutant chaque composant qui s’intègre dans ce que nous avons construit.

Créer un compartiment S3 pour stocker les données de Webhook

Avant de créer notre équilibrage de charge pour accepter les données, ou notre fonction lambda pour stocker les données, nous devons d'abord créer notre compartiment S3 où les données seront stockées.  Pour ce faire, accédez au service S3 dans AWS et appuyez sur “Créer un compartiment.” Vous serez invité à attribuer un nom à votre compartiment et à définir la région – assurez-vous d'utiliser la même région que votre ALB et fonction lambda. Lorsque votre compartiment S3 est créé, il sera vide – si vous souhaitez organiser les données dans un dossier, vous pouvez soit créer le répertoire prévu maintenant, soit le répertoire sera créé lorsque votre fonction lambda stockera le fichier. Dans cet exemple, nous avons nommé notre compartiment S3 “bird-webhooks” et créé un dossier nommé “B Event Data” pour stocker nos données d'événement – vous verrez ces noms référencés dans notre fonction lambda ci-dessous.

Créer une fonction Lambda pour consommer les données

Le traitement et le stockage des données seront effectués par une fonction lambda qui est invoquée par notre application d'équilibrage de charge (ALB). 

La première étape consiste à créer votre fonction lambda en accédant au service Lambda dans AWS et en cliquant sur “Créer une fonction.” Vous serez invité à attribuer un nom à votre fonction lambda et à choisir dans quel langage de programmation écrire votre fonction. Pour cet exemple, nous utilisons Python comme langage d'exécution.

Nous devons maintenant développer notre fonction lambda. Supposons un instant que notre équilibrage de charge d'application a été configuré et transmet la charge utile du webhook à notre fonction lambda – le lambda recevra une charge utile incluant les en-têtes et le corps complets. La charge utile est transmise à notre fonction lambda en utilisant l'objet “event” en tant que dictionnaire. Vous pouvez référencer les en-têtes et le corps de la charge utile indépendamment en accédant aux objets “headers” et “body” dans la charge utile. Dans cet exemple, nous allons simplement lire l'en-tête “x-messagesystems-batch-id,” où l'ID de lot est une valeur unique créée par Bird pour le lot de webhook, et l'utiliser comme nom de fichier lorsqu'on enregistre le corps en tant que fichier plat dans S3; cependant, vous pouvez vouloir ajouter des fonctionnalités supplémentaires telles que des vérifications d'authentification ou la gestion des erreurs, si nécessaire.

Lorsque nous stockons la charge utile dans un fichier plat sur S3, nous devons définir le nom du compartiment S3, l'emplacement et le nom de fichier du fichier où les données de la charge utile seront stockées. Dans notre fonction lambda d'exemple, nous faisons cela dans la fonction “store_batch.” Dans cet exemple, nous allons stocker l'ensemble du lot en un seul fichier, ce qui aide à garantir que les données sont collectées et stockées avant que la connexion HTTP entre Bird et votre point de terminaison n'expire. Bien que vous puissiez ajuster les paramètres d'expiration de connexion sur votre équilibrage de charge, il n'y a aucune garantie que la connexion n'expirera pas du côté de la transmission (dans ce cas Bird) ou que la connexion ne sera pas terminée avant que votre fonction lambda n'ait fini de s'exécuter. Il est conseillé de rendre votre fonction de consommateur aussi efficace que possible et de réserver les activités de traitement des données pour les processus en aval lorsque cela est possible – comme convertir la charge utile au format JSON en fichier CSV, ou charger les données d'événement dans une base de données.

Il est important de noter que vous devrez peut-être mettre à jour les autorisations pour votre fonction lambda. Votre rôle d'exécution aura besoin des autorisations PutObject et GetObject pour S3. Il est conseillé d'appliquer le principe de moindre privilège, donc je recommande de définir ces autorisations uniquement pour le compartiment S3 où les charges utiles du webhook seront stockées.

Un exemple de notre fonction lambda de consommateur peut être trouvé ici.

En guise de note rapide sur l’ID de lot:  Bird va mettre en lot les événements en une seule charge utile, où chaque lot peut contenir de 1 à 350 enregistrements d'événements ou plus.  Le lot recevra un ID de lot unique, qui peut être utilisé pour visualiser l'état du lot en utilisant le Event Webhooks API ou dans votre compte Bird en cliquant sur un flux de webhook et en sélectionnant “Batch Status.” Dans le cas où une charge utile de webhook ne pourrait pas être livrée, comme lors d'un dépassement de délai de connexion, Bird réessaiera automatiquement le lot en utilisant le même ID de lot. Cela peut se produire lorsque votre fonction lambda tourne proche du temps maximum aller-retour de 10 secondes et c'est une raison pour optimiser la fonction de consommateur pour réduire le temps d'exécution.

Pour gérer toutes les activités de traitement des données, je recommande de créer une fonction lambda séparée qui s'exécute chaque fois qu'un nouveau fichier est créé sur le compartiment S3 – de cette manière, le traitement des données est effectué de manière asynchrone par rapport à la transmission des données, et il n'y a aucun risque de perte de données en raison d'une connexion terminée. Je discute la fonction lambda de traitement dans une section ultérieure.

Créer un équilibrage de charge d'application

Pour recevoir une charge utile de webhook, nous devons fournir un point de terminaison vers lequel envoyer les charges utiles. Nous faisons cela en créant un équilibrage de charge d'application dans AWS en accédant à EC2 > Load Balancers et en cliquant sur “Créer un Load Balancer.” Vous serez invité à choisir quel type de load balancer vous voulez créer – pour ceci, nous voulons créer un équilibrage de charge d'application. Nous devons utiliser un équilibrage de charge d'application (ALB) pour construire notre consommateur parce que les webhooks d'événement seront envoyés en tant que requête HTTP, et les ALBs sont utilisés pour router les requêtes HTTP au sein d'AWS. Nous pourrions implémenter une Passerelle HTTP en guise d’alternative; cependant, nous utilisons un ALB pour ce projet car c’est plus léger et plus économique qu’une Passerelle HTTP. Il est important de noter que si vous choisissez d'utiliser une Passerelle HTTP, le format d'événement peut être différent de celui d'un ALB, et par conséquent, votre fonction lambda devra gérer l'objet de requête en conséquence.

Une fois votre ALB créé, vous serez invité à attribuer un nom à votre ALB et à configurer le schéma et les paramètres d'accès/sécurité – puisque nous prévoyons de recevoir des données d'événement d'une source externe (Bird), nous voudrons que notre ALB soit orienté vers Internet.  Sous “Écouteurs et routage,” l'ALB doit écouter HTTPS sur le port 443, et nous voulons créer un groupe de cibles qui pointe vers notre fonction lambda afin que notre ALB transfère les requêtes entrantes à la fonction lambda de consommation que nous avons créée ci-dessus.  Vous devez également vous assurer que le groupe de sécurité a la permission d'accepter le trafic via le port 443.

Créer un enregistrement DNS pour l'équilibrage de charge

Pour nous faciliter l'utilisation de notre ALB en tant que point de terminaison, nous allons créer un enregistrement A dans le DNS qui pointe vers notre ALB. Pour cela, nous pouvons utiliser le service AWS Route 53 (ou votre fournisseur DNS actuel) et créer un enregistrement A pour le nom d'hôte que vous souhaitez utiliser pour votre point de terminaison (par exemple, spevents.<your_domain>). L'enregistrement A doit être configuré pour pointer vers l'ALB que nous avons créé. Si vous utilisez Route 53 pour gérer les enregistrements DNS, vous pouvez référencer l'instance ALB directement en activant “Alias” et en sélectionnant l'ALB; sinon, si vous utilisez un fournisseur DNS externe, vous devez pointer l'enregistrement A vers l'adresse IP publique de l'instance ALB.

Je recommande d'utiliser un outil tel que Postman pour tester que tout a été configuré correctement avant d'activer votre webhook Bird. Vous pouvez faire une requête POST à votre point de terminaison et confirmer qu'une réponse est reçue. Si votre requête POST ne renvoie pas de réponse, vous devrez peut-être vérifier que votre ALB écoute le bon port.

Créer un Webhook Bird

Nous sommes maintenant prêts à créer le webhook dans Bird et à utiliser le nom d'hôte défini par l'enregistrement A ci-dessus comme point de terminaison cible. Pour créer le webhook, accédez à la section Webhooks dans votre compte Bird et cliquez sur “Créer un Webhook.” Vous serez invité à attribuer un nom à votre webhook et à fournir une URL cible – la cible doit être le nom d'hôte de l'enregistrement A que vous avez créé précédemment. Notez que l'URL cible peut nécessiter que “HTTPS://” soit inclus dans l'URL.  

Une fois terminé, vérifiez que le bon sous-compte et les événements sont sélectionnés, et appuyez sur “Créer un Webhook” pour enregistrer votre configuration. Les données d'événement pour tous les types d'événements sélectionnés seront désormais diffusées vers notre URL cible et consommées par notre ALB pour un traitement en aval.

Traitement des données d'événement Webhook

En fonction de l'objectif prévu pour le stockage des données d'événement Bird, vos exigences peuvent être satisfaites en stockant simplement la charge utile JSON comme un fichier plat. Vous pouvez également disposer d'un processus ETL en aval déjà établi, capable de consommer et de charger des données au format JSON. Dans ces deux cas, vous pourrez peut-être utiliser le fichier plat créé par notre lambda de traitement que nous avons créé ci-dessus tel quel.

Alternativement, vous pourriez avoir besoin de transformer les données – par exemple, pour convertir de JSON à un format CSV – ou de charger les données directement dans une base de données. Dans cet exemple, nous allons créer une fonction lambda simple qui convertira les données du webhook du format JSON original en un fichier CSV qui pourra être chargé dans une base de données. 

Créer un Lambda pour traiter les données

Comme avec la fonction lambda pour consommer les données du webhook, nous devons créer une nouvelle fonction lambda en naviguant vers le service Lambda au sein d'AWS et en appuyant sur « Create Function ». Cette nouvelle fonction lambda sera déclenchée lorsqu'un nouveau fichier sera créé sur notre compartiment S3 – elle lira les données et les convertira en un nouveau fichier csv.  

La fonction lambda accepte les informations du fichier comme un événement. Dans la fonction lambda exemple, vous verrez que nous avons d'abord une série de contrôles de validation pour s'assurer que les données sont complètes et formatées comme prévu. Ensuite, nous convertissons la charge utile JSON en un fichier CSV en utilisant la bibliothèque « csv » et écrivons dans un fichier temporaire. Les fonctions Lambda ne peuvent écrire des fichiers locaux que dans le répertoire « /tmp », nous créons donc un fichier csv temporaire et le nommons avec la convention <batch_id>.csv. La raison pour laquelle nous utilisons le batch_id ici est simplement pour garantir que tous les processus parallèles qui fonctionnent suite à la réception de plusieurs charges utiles de webhook n'interféreront pas les uns avec les autres, car chaque lot de webhook aura un batch_id unique.  

Une fois les données entièrement converties en CSV, nous lisons les données CSV sous forme de flux d'octets, supprimons le fichier temporaire et enregistrons les données CSV comme un nouveau fichier sur S3. Il est important de noter qu'un compartiment S3 différent est nécessaire pour la sortie, sinon, nous risquons de créer une boucle récursive qui peut entraîner une utilisation accrue de lambda et des coûts accrus. Nous devrons identifier dans quel compartiment S3 et à quel emplacement nous souhaitons que notre fichier CSV soit stocké dans notre fonction lambda.  Suivez la même procédure que ci-dessus pour créer un nouveau compartiment S3 pour stocker notre fichier CSV.

Notez que le répertoire tmp est limité à 512 Mo d'espace, il est donc important que le fichier temporaire soit supprimé ensuite pour garantir un espace suffisant pour de futures exécutions. La raison pour laquelle nous utilisons un fichier temporaire, plutôt que d'écrire directement sur S3, est de simplifier la connexion à S3 en ayant une seule requête.

Tout comme avec la fonction lambda de consommation, vous pourriez avoir besoin de mettre à jour les autorisations pour votre fonction lambda de traitement. Cette fonction lambda nécessite que le rôle d'exécution ait des autorisations GetObject pour le compartiment S3 d'entrée, et à la fois PutObject et GetObject pour le compartiment S3 de sortie.

Un exemple de notre fonction lambda de traitement se trouve ici.

Configurer un Lambda pour s'exécuter lorsque de nouvelles données sont stockées sur S3

Maintenant que notre fonction lambda pour convertir le fichier du format JSON en format CSV a été créée, nous devons la configurer pour qu'elle se déclenche lorsqu'un nouveau fichier est créé sur notre compartiment S3. Pour ce faire, nous devons ajouter un déclencheur à notre fonction lambda en ouvrant notre fonction lambda et en cliquant sur « Add Trigger » en haut de la page.  Sélectionnez « S3 » et fournissez le nom du compartiment S3 où les charges utiles brutes du webhook sont stockées. Vous avez également la possibilité de spécifier un préfixe et/ou un suffixe de fichier pour effectuer un filtrage. Une fois que les paramètres ont été configurés, vous pouvez ajouter le déclencheur en cliquant sur « Add » en bas de la page. Maintenant, votre fonction lambda de traitement s'exécutera chaque fois qu'un nouveau fichier est ajouté à votre compartiment S3.

Chargement des données dans une base de données

Dans cet exemple, je ne couvrirai pas en détail le chargement des données dans une base de données, mais si vous avez suivi cet exemple, vous avez quelques options :

  1. Charger les données directement dans votre base de données au sein de votre fonction lambda de traitement

  2. Consommer votre fichier CSV en utilisant un processus ETL établi

Que vous utilisiez un service de base de données AWS, tel que RDS ou DynamoDB, ou que vous ayez votre propre base de données PostgreSQL (ou similaire), vous pouvez vous connecter directement à votre service de base de données depuis votre fonction lambda de traitement. Par exemple, de la même manière que nous avons appelé le service S3 en utilisant « boto3 » dans notre fonction lambda, vous pourriez également utiliser « boto3 » pour appeler RDS ou DynamoDB. Le service AWS Athena pourrait également être utilisé pour lire les fichiers de données directement à partir des fichiers plats, et accéder aux données en utilisant un langage de requête similaire à SQL. Je recommande de consulter la documentation respective pour le service que vous utilisez pour plus d'informations sur la meilleure façon d'accomplir cela dans votre environnement.

De même, il existe de nombreux services disponibles qui peuvent aider à consommer des fichiers CSV et à charger les données dans une base de données. Vous avez peut-être déjà un processus ETL établi sur lequel vous pouvez vous appuyer.

Nous espérons que vous avez trouvé ce guide utile – bons envois !

En fonction de l'objectif prévu pour le stockage des données d'événement Bird, vos exigences peuvent être satisfaites en stockant simplement la charge utile JSON comme un fichier plat. Vous pouvez également disposer d'un processus ETL en aval déjà établi, capable de consommer et de charger des données au format JSON. Dans ces deux cas, vous pourrez peut-être utiliser le fichier plat créé par notre lambda de traitement que nous avons créé ci-dessus tel quel.

Alternativement, vous pourriez avoir besoin de transformer les données – par exemple, pour convertir de JSON à un format CSV – ou de charger les données directement dans une base de données. Dans cet exemple, nous allons créer une fonction lambda simple qui convertira les données du webhook du format JSON original en un fichier CSV qui pourra être chargé dans une base de données. 

Créer un Lambda pour traiter les données

Comme avec la fonction lambda pour consommer les données du webhook, nous devons créer une nouvelle fonction lambda en naviguant vers le service Lambda au sein d'AWS et en appuyant sur « Create Function ». Cette nouvelle fonction lambda sera déclenchée lorsqu'un nouveau fichier sera créé sur notre compartiment S3 – elle lira les données et les convertira en un nouveau fichier csv.  

La fonction lambda accepte les informations du fichier comme un événement. Dans la fonction lambda exemple, vous verrez que nous avons d'abord une série de contrôles de validation pour s'assurer que les données sont complètes et formatées comme prévu. Ensuite, nous convertissons la charge utile JSON en un fichier CSV en utilisant la bibliothèque « csv » et écrivons dans un fichier temporaire. Les fonctions Lambda ne peuvent écrire des fichiers locaux que dans le répertoire « /tmp », nous créons donc un fichier csv temporaire et le nommons avec la convention <batch_id>.csv. La raison pour laquelle nous utilisons le batch_id ici est simplement pour garantir que tous les processus parallèles qui fonctionnent suite à la réception de plusieurs charges utiles de webhook n'interféreront pas les uns avec les autres, car chaque lot de webhook aura un batch_id unique.  

Une fois les données entièrement converties en CSV, nous lisons les données CSV sous forme de flux d'octets, supprimons le fichier temporaire et enregistrons les données CSV comme un nouveau fichier sur S3. Il est important de noter qu'un compartiment S3 différent est nécessaire pour la sortie, sinon, nous risquons de créer une boucle récursive qui peut entraîner une utilisation accrue de lambda et des coûts accrus. Nous devrons identifier dans quel compartiment S3 et à quel emplacement nous souhaitons que notre fichier CSV soit stocké dans notre fonction lambda.  Suivez la même procédure que ci-dessus pour créer un nouveau compartiment S3 pour stocker notre fichier CSV.

Notez que le répertoire tmp est limité à 512 Mo d'espace, il est donc important que le fichier temporaire soit supprimé ensuite pour garantir un espace suffisant pour de futures exécutions. La raison pour laquelle nous utilisons un fichier temporaire, plutôt que d'écrire directement sur S3, est de simplifier la connexion à S3 en ayant une seule requête.

Tout comme avec la fonction lambda de consommation, vous pourriez avoir besoin de mettre à jour les autorisations pour votre fonction lambda de traitement. Cette fonction lambda nécessite que le rôle d'exécution ait des autorisations GetObject pour le compartiment S3 d'entrée, et à la fois PutObject et GetObject pour le compartiment S3 de sortie.

Un exemple de notre fonction lambda de traitement se trouve ici.

Configurer un Lambda pour s'exécuter lorsque de nouvelles données sont stockées sur S3

Maintenant que notre fonction lambda pour convertir le fichier du format JSON en format CSV a été créée, nous devons la configurer pour qu'elle se déclenche lorsqu'un nouveau fichier est créé sur notre compartiment S3. Pour ce faire, nous devons ajouter un déclencheur à notre fonction lambda en ouvrant notre fonction lambda et en cliquant sur « Add Trigger » en haut de la page.  Sélectionnez « S3 » et fournissez le nom du compartiment S3 où les charges utiles brutes du webhook sont stockées. Vous avez également la possibilité de spécifier un préfixe et/ou un suffixe de fichier pour effectuer un filtrage. Une fois que les paramètres ont été configurés, vous pouvez ajouter le déclencheur en cliquant sur « Add » en bas de la page. Maintenant, votre fonction lambda de traitement s'exécutera chaque fois qu'un nouveau fichier est ajouté à votre compartiment S3.

Chargement des données dans une base de données

Dans cet exemple, je ne couvrirai pas en détail le chargement des données dans une base de données, mais si vous avez suivi cet exemple, vous avez quelques options :

  1. Charger les données directement dans votre base de données au sein de votre fonction lambda de traitement

  2. Consommer votre fichier CSV en utilisant un processus ETL établi

Que vous utilisiez un service de base de données AWS, tel que RDS ou DynamoDB, ou que vous ayez votre propre base de données PostgreSQL (ou similaire), vous pouvez vous connecter directement à votre service de base de données depuis votre fonction lambda de traitement. Par exemple, de la même manière que nous avons appelé le service S3 en utilisant « boto3 » dans notre fonction lambda, vous pourriez également utiliser « boto3 » pour appeler RDS ou DynamoDB. Le service AWS Athena pourrait également être utilisé pour lire les fichiers de données directement à partir des fichiers plats, et accéder aux données en utilisant un langage de requête similaire à SQL. Je recommande de consulter la documentation respective pour le service que vous utilisez pour plus d'informations sur la meilleure façon d'accomplir cela dans votre environnement.

De même, il existe de nombreux services disponibles qui peuvent aider à consommer des fichiers CSV et à charger les données dans une base de données. Vous avez peut-être déjà un processus ETL établi sur lequel vous pouvez vous appuyer.

Nous espérons que vous avez trouvé ce guide utile – bons envois !

En fonction de l'objectif prévu pour le stockage des données d'événement Bird, vos exigences peuvent être satisfaites en stockant simplement la charge utile JSON comme un fichier plat. Vous pouvez également disposer d'un processus ETL en aval déjà établi, capable de consommer et de charger des données au format JSON. Dans ces deux cas, vous pourrez peut-être utiliser le fichier plat créé par notre lambda de traitement que nous avons créé ci-dessus tel quel.

Alternativement, vous pourriez avoir besoin de transformer les données – par exemple, pour convertir de JSON à un format CSV – ou de charger les données directement dans une base de données. Dans cet exemple, nous allons créer une fonction lambda simple qui convertira les données du webhook du format JSON original en un fichier CSV qui pourra être chargé dans une base de données. 

Créer un Lambda pour traiter les données

Comme avec la fonction lambda pour consommer les données du webhook, nous devons créer une nouvelle fonction lambda en naviguant vers le service Lambda au sein d'AWS et en appuyant sur « Create Function ». Cette nouvelle fonction lambda sera déclenchée lorsqu'un nouveau fichier sera créé sur notre compartiment S3 – elle lira les données et les convertira en un nouveau fichier csv.  

La fonction lambda accepte les informations du fichier comme un événement. Dans la fonction lambda exemple, vous verrez que nous avons d'abord une série de contrôles de validation pour s'assurer que les données sont complètes et formatées comme prévu. Ensuite, nous convertissons la charge utile JSON en un fichier CSV en utilisant la bibliothèque « csv » et écrivons dans un fichier temporaire. Les fonctions Lambda ne peuvent écrire des fichiers locaux que dans le répertoire « /tmp », nous créons donc un fichier csv temporaire et le nommons avec la convention <batch_id>.csv. La raison pour laquelle nous utilisons le batch_id ici est simplement pour garantir que tous les processus parallèles qui fonctionnent suite à la réception de plusieurs charges utiles de webhook n'interféreront pas les uns avec les autres, car chaque lot de webhook aura un batch_id unique.  

Une fois les données entièrement converties en CSV, nous lisons les données CSV sous forme de flux d'octets, supprimons le fichier temporaire et enregistrons les données CSV comme un nouveau fichier sur S3. Il est important de noter qu'un compartiment S3 différent est nécessaire pour la sortie, sinon, nous risquons de créer une boucle récursive qui peut entraîner une utilisation accrue de lambda et des coûts accrus. Nous devrons identifier dans quel compartiment S3 et à quel emplacement nous souhaitons que notre fichier CSV soit stocké dans notre fonction lambda.  Suivez la même procédure que ci-dessus pour créer un nouveau compartiment S3 pour stocker notre fichier CSV.

Notez que le répertoire tmp est limité à 512 Mo d'espace, il est donc important que le fichier temporaire soit supprimé ensuite pour garantir un espace suffisant pour de futures exécutions. La raison pour laquelle nous utilisons un fichier temporaire, plutôt que d'écrire directement sur S3, est de simplifier la connexion à S3 en ayant une seule requête.

Tout comme avec la fonction lambda de consommation, vous pourriez avoir besoin de mettre à jour les autorisations pour votre fonction lambda de traitement. Cette fonction lambda nécessite que le rôle d'exécution ait des autorisations GetObject pour le compartiment S3 d'entrée, et à la fois PutObject et GetObject pour le compartiment S3 de sortie.

Un exemple de notre fonction lambda de traitement se trouve ici.

Configurer un Lambda pour s'exécuter lorsque de nouvelles données sont stockées sur S3

Maintenant que notre fonction lambda pour convertir le fichier du format JSON en format CSV a été créée, nous devons la configurer pour qu'elle se déclenche lorsqu'un nouveau fichier est créé sur notre compartiment S3. Pour ce faire, nous devons ajouter un déclencheur à notre fonction lambda en ouvrant notre fonction lambda et en cliquant sur « Add Trigger » en haut de la page.  Sélectionnez « S3 » et fournissez le nom du compartiment S3 où les charges utiles brutes du webhook sont stockées. Vous avez également la possibilité de spécifier un préfixe et/ou un suffixe de fichier pour effectuer un filtrage. Une fois que les paramètres ont été configurés, vous pouvez ajouter le déclencheur en cliquant sur « Add » en bas de la page. Maintenant, votre fonction lambda de traitement s'exécutera chaque fois qu'un nouveau fichier est ajouté à votre compartiment S3.

Chargement des données dans une base de données

Dans cet exemple, je ne couvrirai pas en détail le chargement des données dans une base de données, mais si vous avez suivi cet exemple, vous avez quelques options :

  1. Charger les données directement dans votre base de données au sein de votre fonction lambda de traitement

  2. Consommer votre fichier CSV en utilisant un processus ETL établi

Que vous utilisiez un service de base de données AWS, tel que RDS ou DynamoDB, ou que vous ayez votre propre base de données PostgreSQL (ou similaire), vous pouvez vous connecter directement à votre service de base de données depuis votre fonction lambda de traitement. Par exemple, de la même manière que nous avons appelé le service S3 en utilisant « boto3 » dans notre fonction lambda, vous pourriez également utiliser « boto3 » pour appeler RDS ou DynamoDB. Le service AWS Athena pourrait également être utilisé pour lire les fichiers de données directement à partir des fichiers plats, et accéder aux données en utilisant un langage de requête similaire à SQL. Je recommande de consulter la documentation respective pour le service que vous utilisez pour plus d'informations sur la meilleure façon d'accomplir cela dans votre environnement.

De même, il existe de nombreux services disponibles qui peuvent aider à consommer des fichiers CSV et à charger les données dans une base de données. Vous avez peut-être déjà un processus ETL établi sur lequel vous pouvez vous appuyer.

Nous espérons que vous avez trouvé ce guide utile – bons envois !

Connectons-vous avec un expert Bird.
Découvrez toute la puissance du Bird en 30 minutes.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.

Company

Newsletter

Restez à jour avec Bird grâce aux mises à jour hebdomadaires dans votre boîte de réception.

Connectons-vous avec un expert Bird.
Découvrez toute la puissance du Bird en 30 minutes.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.

Company

Newsletter

Restez à jour avec Bird grâce aux mises à jour hebdomadaires dans votre boîte de réception.

Connectons-vous avec un expert Bird.
Découvrez toute la puissance du Bird en 30 minutes.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.

R

Atteindre

G

Grow

M

Manage

A

Automate

Company

Newsletter

Restez à jour avec Bird grâce aux mises à jour hebdomadaires dans votre boîte de réception.