Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

Creazione e consumo di webhook per uccelli

Email

1 min read

Creazione e consumo di webhook per uccelli

Email

1 min read

Creazione e consumo di webhook per uccelli

Di seguito è riportata una semplice guida per aiutare i mittenti a sentirsi a proprio agio quando creano un webhook per eventi Bird e consumano i dati utilizzando l'infrastruttura di AWS.

I webhook degli eventi in tempo reale di Bird sono uno strumento incredibilmente prezioso per i mittenti per avere i dati automaticamente inviati ai loro sistemi. Questo può guidare l'automazione a valle, come l'aggiornamento delle liste di mailing, l'attivazione di percorsi di email automatici o il popolamento di dashboard interni. Mentre gli stessi dati degli eventi possono essere accessibili tramite l'interfaccia Bird utilizzando Event Search, o programmaticamente sfruttando l'Events API di Bird, le limitazioni imposte sul numero di record restituiti in una singola richiesta o i limiti di velocità imposti sull'endpoint API possono rendere entrambi questi metodi restrittivi per mittenti di grandi dimensioni e sofisticati.  




I webhook degli eventi in tempo reale consentono a un mittente di configurare un endpoint al quale Bird trasmette i dati, e i dati possono essere consumati senza dover pianificare i cron job che estraggono i dati. Ci sono anche compromessi logistici quando si estraggono i dati rispetto ad avere i dati inviati a te, come dover identificare quale periodo di tempo e parametri utilizzare per ogni richiesta API. Se i periodi di tempo non sono allineati perfettamente, si rischia di perdere dati e, se i periodi di tempo si sovrappongono, è necessario gestire i record di dati duplicati. Con i webhook in tempo reale, i dati degli eventi vengono semplicemente inviati al tuo endpoint non appena diventano disponibili all'interno di Bird.




Mentre i benefici di ricevere dati di eventi in tempo reale per guidare i processi di automazione a valle possono essere compresi immediatamente da molti mittenti, il processo effettivo per implementare e consumare i webhook può risultare intimidatorio. Questo può essere particolarmente vero se non si è familiari con i componenti tecnici della creazione di un endpoint e della gestione dei dati a livello programmatico. Sono disponibili servizi che consumano i dati webhook di Bird e li inseriscono automaticamente nel database tramite ETL - un esempio sarebbe StitchData, di cui abbiamo parlato in passato sul blog.  Tuttavia, se desideri avere più controllo sul processo, puoi facilmente creare i componenti da solo. Di seguito è riportata una semplice guida per aiutare i mittenti a sentirsi a proprio agio quando creano un webhook degli eventi di Bird e consumano i dati usando l'infrastruttura all'interno di AWS.

Configurazione dell'Endpoint di Destinazione Webhook

Quando viene creato un evento Bird, vogliamo che i dati dell'evento siano trasmessi in tempo reale a un endpoint in AWS in modo da poterli consumare e utilizzare programmando. I dati saranno inviati da Bird a un endpoint di destinazione, che inoltrerà il payload a una funzione lambda che elaborerà e memorizzerà i dati in un bucket S3. Un diagramma ad alto livello del flusso di dati descritto può essere visto di seguito:










Per implementare questo flusso di lavoro, costruiamo effettivamente in ordine inverso iniziando con la creazione di un bucket S3 dove memorizzeremo i nostri dati evento e poi lavoriamo all'indietro, aggiungendo ogni componente che alimenta in quello che abbiamo costruito.




Crea un Bucket S3 per Memorizzare i Dati del Webhook




Prima di creare il nostro load balancer per accettare i dati, o la nostra funzione lambda per memorizzare i dati, dobbiamo prima creare il nostro bucket S3 dove i dati saranno memorizzati. Per fare ciò, naviga al servizio S3 all'interno di AWS e premi “Create Bucket.” Ti verrà chiesto di assegnare un nome al tuo bucket e di impostare la regione – assicurati di usare la stessa regione del tuo ALB e della funzione lambda. Quando il tuo bucket S3 è creato, sarà vuoto - se desideri organizzare i dati all'interno di una cartella, puoi creare ora la directory desiderata, oppure la directory sarà creata quando la tua funzione lambda memorizza il file. In questo esempio, abbiamo chiamato il nostro bucket S3 “bird-webhooks” e abbiamo creato una cartella chiamata “B Event Data” per memorizzare i nostri dati evento - vedrai questi nomi menzionati nella nostra funzione lambda di seguito.




Crea una Funzione Lambda per Consumare i Dati




L'elaborazione e la memorizzazione effettiva dei dati sarà eseguita da una funzione lambda che viene invocata dal nostro Application Load Balancer (ALB).




Il primo passo è creare la tua funzione lambda navigando al servizio Lambda all'interno di AWS e cliccando su “Create Function.” Ti verrà chiesto di assegnare un nome alla tua funzione lambda e di selezionare il linguaggio di programmazione in cui scrivere la tua funzione. Per questo esempio, utilizziamo Python come linguaggio di runtime.




Ora dobbiamo sviluppare la nostra funzione lambda. Per un momento, supponiamo che il nostro Application Load Balancer sia stato configurato e stia inoltrando il payload del webhook alla nostra funzione lambda – la lambda riceverà un payload che include tutte le intestazioni e il corpo. Il payload viene passato alla nostra funzione lambda usando l'oggetto “event” come dizionario. Puoi riferirti alle intestazioni e al corpo del payload indipendentemente accedendo agli oggetti “headers” e “body” all'interno del payload. In questo esempio, leggeremo semplicemente l'intestazione “x-messagesystems-batch-id,” dove l'ID batch è un valore unico creato da Bird per il batch del webhook, e lo usiamo come nome file quando memorizziamo il corpo come file piatto in S3; tuttavia, potresti voler aggiungere funzionalità aggiuntive come controlli di autenticazione o gestione degli errori, se necessario.




Quando memorizziamo il payload in un file piatto su S3, dovremo definire il nome del bucket S3, la posizione e il nome del file dove i dati del payload saranno memorizzati. Nella nostra funzione lambda di esempio, lo facciamo all'interno della funzione “store_batch.” In questo esempio, andremo a memorizzare l'intero batch come un unico file, il che aiuta ad assicurare che i dati siano raccolti e memorizzati prima che la connessione HTTP tra Bird e il tuo endpoint scada. Anche se potresti regolare le impostazioni di timeout della connessione sul tuo load balancer, non ci sono garanzie che la connessione non scada sul lato della trasmissione (in questo caso Bird) o che la connessione non venga terminata prima che la tua funzione lambda finisca di eseguire. È una buona pratica mantenere la tua funzione di consumatore il più efficiente possibile e riservare le attività di elaborazione dei dati per processi downstream dove possibile - come convertire il payload formattato in JSON in un file CSV, o caricare i dati evento in un database.




È importante notare che potresti dover aggiornare i permessi per la tua funzione lambda. Il tuo ruolo di esecuzione avrà bisogno dei permessi PutObject e GetObject per S3. È una buona pratica far rispettare il principio del minimo privilegio, quindi consiglio di impostare questi permessi solo per il bucket S3 dove i payload del webhook saranno memorizzati.




Un esempio della nostra funzione lambda consumer può essere trovato qui.




Una breve nota sull'ID batch:  Bird batch events in un unico payload, dove ogni batch può contenere da 1 a 350 o più record di eventi.  Al batch verrà assegnato un ID batch unico, che può essere utilizzato per visualizzare lo stato del batch sfruttando il Event Webhooks API o all'interno del tuo account Bird cliccando su un webhook stream e selezionando “Batch Status.” Nel caso in cui un payload del webhook non potesse essere consegnato, come durante un timeout della connessione, Bird automaticamente ritenta il batch utilizzando lo stesso ID batch. Questo può accadere quando la tua funzione lambda sta funzionando vicino al tempo di andata e ritorno massimo di 10 secondi ed è una ragione per ottimizzare la funzione di consumatore per ridurre il tempo di esecuzione.




Per gestire tutte le attività di elaborazione dei dati, consiglio di creare una funzione lambda separata che si esegua ogni volta che un nuovo file viene creato sul bucket S3 – in questo modo, l'elaborazione dei dati viene eseguita asincronamente rispetto alla trasmissione dei dati, e non c'è rischio di perdita di dati a causa di una connessione terminata. Discuto della funzione lambda di elaborazione in una sezione successiva.




Crea un Application Load Balancer




Per ricevere un payload del webhook, dobbiamo fornire un endpoint a cui inviare i payload. Facciamo questo creando un application load balancer all'interno di AWS navigando a EC2 > Load Balancers e cliccando su “Create Load Balancer.” Ti verrà chiesto di scegliere quale tipo di load balancer vuoi creare – per questo, vogliamo creare un application load balancer. Abbiamo bisogno di un application load balancer (ALB) per costruire il nostro consumatore perché gli event webhooks saranno inviati come una richiesta HTTP, e gli ALB sono utilizzati per instradare richieste HTTP all'interno di AWS. Potremmo implementare un HTTP Gateway come alternativa; tuttavia, utilizziamo un ALB per questo progetto perché è più leggero e conveniente rispetto all'HTTP Gateway. È importante notare che se scegli di utilizzare un HTTP Gateway, il formato dell'evento potrebbe essere diverso rispetto a un ALB, e quindi la tua funzione lambda dovrà gestire di conseguenza l'oggetto della richiesta.




Una volta che il tuo ALB è stato creato, ti verrà chiesto di assegnare un nome al tuo ALB e configurare le impostazioni di schema e accesso/sicurezza – poiché pianifichiamo di ricevere dati evento da una fonte esterna (Bird), vorremo che il nostro ALB sia accessibile dal web. Sotto “Ascoltatori e instradamento,” l'ALB dovrebbe ascoltare sui porti HTTPS su 443, e vogliamo creare un gruppo Target che punti alla nostra funzione lambda in modo che il nostro ALB inoltrerà le richieste in entrata alla funzione lambda consumer che abbiamo creato sopra.  Devi anche assicurarti che il gruppo di sicurezza abbia il permesso di accettare traffico tramite la porta 443.




Crea un Record DNS per il Load Balancer




Per rendere più facile per noi utilizzare il nostro ALB come endpoint, creeremo un record A nel DNS che punti al nostro ALB. Per fare questo, possiamo utilizzare il servizio AWS Route 53 (o il tuo attuale provider DNS) e creare un record A per il nome host che vuoi usare per il tuo endpoint (es. spevents.<tuo_dominio>). Il record A dovrebbe essere configurato per puntare all'ALB che abbiamo creato. Se stai utilizzando Route 53 per gestire i record DNS, puoi fare riferimento direttamente all'istanza ALB abilitando “Alias” e selezionando l'ALB; altrimenti, se stai utilizzando un provider DNS esterno, dovresti puntare il record A all'indirizzo IP pubblico dell'istanza ALB.




Consiglio di utilizzare uno strumento come Postman per testare che tutto sia stato configurato correttamente prima di abilitare il tuo webhook Bird. Puoi effettuare una richiesta POST al tuo endpoint e confermare che viene ricevuta una risposta. Se la tua richiesta POST non ritorna una risposta, potresti dover ricontrollare che il tuo ALB stia ascoltando sulla porta corretta.




Crea un Bird Webhook




Ora siamo pronti a creare il webhook in Bird e utilizzare il nome host definito dal record A sopra come nostro endpoint di destinazione. Per creare il webhook, naviga alla sezione Webhooks all'interno del tuo account Bird e clicca su “Create Webhook.” Ti verrà chiesto di assegnare un nome al tuo webhook e fornire un URL di destinazione – il target dovrebbe essere il nome host del record A che hai creato in precedenza. Nota che l'URL di destinazione potrebbe richiedere che “HTTPS://” sia incluso nell'URL.  




Una volta completato, verifica che il sottoconto corretto e gli eventi siano selezionati, e premi “Create Webhook” per salvare la tua configurazione. I dati evento per tutti i tipi di eventi selezionati ora verranno trasmessi al nostro URL di destinazione e consumati dal nostro ALB per l'elaborazione downstream.

Elaborazione dei dati dell'evento Webhook

A seconda dello scopo per cui si memorizzano i dati dell'evento Bird, i tuoi requisiti potrebbero essere soddisfatti semplicemente memorizzando il payload JSON come file piatto. Potresti anche avere un processo ETL a valle già stabilito che è in grado di consumare e caricare dati in formato JSON. In entrambi questi casi, potresti essere in grado di utilizzare il file piatto creato dal nostro lambda di elaborazione che abbiamo creato sopra così com'è.




In alternativa, potresti aver bisogno di trasformare i dati, ad esempio passando da un formato JSON a un CSV, o caricare i dati direttamente in un database. In questo esempio, creeremo una semplice funzione lambda che convertirà i dati del webhook dal formato JSON originale in un file CSV che potrebbe essere caricato in un database. 




Crea un Lambda per Elaborare i Dati




Come con la funzione lambda per consumare i dati del webhook, dobbiamo creare una nuova funzione lambda navigando nel servizio Lambda all'interno di AWS e premendo "Crea Funzione". Questa nuova funzione lambda verrà attivata quando un nuovo file viene creato sul nostro bucket S3 – leggerà i dati e li convertirà in un nuovo file csv.  




La funzione lambda accetta le informazioni sul file come un evento. Nella funzione lambda di esempio, vedrai che abbiamo innanzitutto una serie di controlli di validazione per garantire che i dati siano completi e formattati come previsto. Successivamente, convertiamo il payload JSON in un file CSV utilizzando la libreria "csv" e scrivendo su un file temporaneo. Le funzioni Lambda possono solo scrivere file locali nella directory "tmp", quindi creiamo un file csv temporaneo e lo chiamiamo con la convenzione <batch_id>.csv. Il motivo per cui utilizziamo il batch_id qui è semplicemente per garantire che eventuali processi paralleli che vengono eseguiti a seguito di più payload webhook non interferiscano tra loro, poiché ogni batch webhook avrà un batch_id univoco.  




Una volta che i dati sono stati completamente convertiti in CSV, leggiamo i dati CSV come flusso di byte, eliminiamo il file temporaneo e salviamo i dati CSV come un nuovo file su S3. È importante notare che è necessario un bucket S3 diverso per l'output, altrimenti si rischia di creare un loop ricorsivo che può portare ad un aumento dell'uso del lambda e dei costi. Dovremo identificare in quale bucket S3 e posizione vogliamo che il nostro file CSV venga memorizzato all'interno della nostra funzione lambda.  Segui la stessa procedura sopra per creare un nuovo bucket S3 per memorizzare il nostro file CSV.




Nota che la directory tmp è limitata a 512 MB di spazio, quindi è importante che il file temporaneo venga eliminato successivamente per garantire sufficiente spazio per esecuzioni future. Il motivo per cui utilizziamo un file temporaneo, invece di scrivere direttamente su S3, è semplificare la connessione a S3 con una singola richiesta.




Proprio come con la funzione consume lambda, potresti aver bisogno di aggiornare i permessi per la tua funzione process lambda. Questa funzione lambda richiede che il ruolo di esecuzione abbia i permessi GetObject per il bucket S3 di input, e sia PutObject che GetObject per il bucket S3 di output.




Un esempio della nostra funzione processing lambda può essere trovato qui.




Configura un Lambda per Eseguire Quando Nuovi Dati Sono Memorizzati su S3




Ora che la nostra funzione lambda per convertire il file da formato JSON a CSV è stata creata, dobbiamo configurarla affinché venga attivata quando un nuovo file viene creato sul nostro bucket S3. Per fare ciò, dobbiamo aggiungere un trigger alla nostra funzione lambda aprendo la nostra funzione lambda e cliccando su "Aggiungi Trigger" nella parte superiore della pagina.  Seleziona “S3” e fornisci il nome del bucket S3 dove sono memorizzati i raw webhook payloads. Hai anche l'opzione di specificare prefissi e/o suffissi del file per filtrare. Una volta che le impostazioni sono state configurate, puoi aggiungere il trigger cliccando su “Aggiungi” nella parte inferiore della pagina. Ora la tua funzione processing lambda verrà eseguita ogni volta che un nuovo file verrà aggiunto al tuo bucket S3.




Caricare i Dati in un Database




In questo esempio, non tratterò in dettaglio il caricamento dei dati in un database, ma se hai seguito questo esempio hai un paio di opzioni:




  1. Carica i dati direttamente nel tuo database all'interno della tua funzione processing lambda

  2. Consuma il tuo file CSV utilizzando un processo ETL consolidato




Che tu stia utilizzando un servizio di database AWS, come RDS o DynamoDB, o che tu abbia il tuo database PostgreSQL (o simile), puoi collegarti al tuo servizio di database direttamente dalla tua funzione process lambda. Ad esempio, nello stesso modo in cui abbiamo chiamato il servizio S3 utilizzando "boto3" nella nostra funzione lambda, potresti anche usare "boto3" per chiamare RDS o DynamoDB. Il servizio AWS Athena potrebbe anche essere utilizzato per leggere i file di dati direttamente dai flat-files e accedere ai dati usando un linguaggio di query simile a SQL. Consiglio di fare riferimento alla documentazione relativa al servizio che stai utilizzando per maggiori informazioni su come meglio realizzare questo nel tuo ambiente.




Analogamente, ci sono molti servizi disponibili che possono aiutare a consumare file CSV e caricare i dati in un database. Puoi già avere un processo ETL consolidato che puoi sfruttare.




Speriamo che tu abbia trovato utile questa guida – invio felice!

A seconda dello scopo per cui si memorizzano i dati dell'evento Bird, i tuoi requisiti potrebbero essere soddisfatti semplicemente memorizzando il payload JSON come file piatto. Potresti anche avere un processo ETL a valle già stabilito che è in grado di consumare e caricare dati in formato JSON. In entrambi questi casi, potresti essere in grado di utilizzare il file piatto creato dal nostro lambda di elaborazione che abbiamo creato sopra così com'è.




In alternativa, potresti aver bisogno di trasformare i dati, ad esempio passando da un formato JSON a un CSV, o caricare i dati direttamente in un database. In questo esempio, creeremo una semplice funzione lambda che convertirà i dati del webhook dal formato JSON originale in un file CSV che potrebbe essere caricato in un database. 




Crea un Lambda per Elaborare i Dati




Come con la funzione lambda per consumare i dati del webhook, dobbiamo creare una nuova funzione lambda navigando nel servizio Lambda all'interno di AWS e premendo "Crea Funzione". Questa nuova funzione lambda verrà attivata quando un nuovo file viene creato sul nostro bucket S3 – leggerà i dati e li convertirà in un nuovo file csv.  




La funzione lambda accetta le informazioni sul file come un evento. Nella funzione lambda di esempio, vedrai che abbiamo innanzitutto una serie di controlli di validazione per garantire che i dati siano completi e formattati come previsto. Successivamente, convertiamo il payload JSON in un file CSV utilizzando la libreria "csv" e scrivendo su un file temporaneo. Le funzioni Lambda possono solo scrivere file locali nella directory "tmp", quindi creiamo un file csv temporaneo e lo chiamiamo con la convenzione <batch_id>.csv. Il motivo per cui utilizziamo il batch_id qui è semplicemente per garantire che eventuali processi paralleli che vengono eseguiti a seguito di più payload webhook non interferiscano tra loro, poiché ogni batch webhook avrà un batch_id univoco.  




Una volta che i dati sono stati completamente convertiti in CSV, leggiamo i dati CSV come flusso di byte, eliminiamo il file temporaneo e salviamo i dati CSV come un nuovo file su S3. È importante notare che è necessario un bucket S3 diverso per l'output, altrimenti si rischia di creare un loop ricorsivo che può portare ad un aumento dell'uso del lambda e dei costi. Dovremo identificare in quale bucket S3 e posizione vogliamo che il nostro file CSV venga memorizzato all'interno della nostra funzione lambda.  Segui la stessa procedura sopra per creare un nuovo bucket S3 per memorizzare il nostro file CSV.




Nota che la directory tmp è limitata a 512 MB di spazio, quindi è importante che il file temporaneo venga eliminato successivamente per garantire sufficiente spazio per esecuzioni future. Il motivo per cui utilizziamo un file temporaneo, invece di scrivere direttamente su S3, è semplificare la connessione a S3 con una singola richiesta.




Proprio come con la funzione consume lambda, potresti aver bisogno di aggiornare i permessi per la tua funzione process lambda. Questa funzione lambda richiede che il ruolo di esecuzione abbia i permessi GetObject per il bucket S3 di input, e sia PutObject che GetObject per il bucket S3 di output.




Un esempio della nostra funzione processing lambda può essere trovato qui.




Configura un Lambda per Eseguire Quando Nuovi Dati Sono Memorizzati su S3




Ora che la nostra funzione lambda per convertire il file da formato JSON a CSV è stata creata, dobbiamo configurarla affinché venga attivata quando un nuovo file viene creato sul nostro bucket S3. Per fare ciò, dobbiamo aggiungere un trigger alla nostra funzione lambda aprendo la nostra funzione lambda e cliccando su "Aggiungi Trigger" nella parte superiore della pagina.  Seleziona “S3” e fornisci il nome del bucket S3 dove sono memorizzati i raw webhook payloads. Hai anche l'opzione di specificare prefissi e/o suffissi del file per filtrare. Una volta che le impostazioni sono state configurate, puoi aggiungere il trigger cliccando su “Aggiungi” nella parte inferiore della pagina. Ora la tua funzione processing lambda verrà eseguita ogni volta che un nuovo file verrà aggiunto al tuo bucket S3.




Caricare i Dati in un Database




In questo esempio, non tratterò in dettaglio il caricamento dei dati in un database, ma se hai seguito questo esempio hai un paio di opzioni:




  1. Carica i dati direttamente nel tuo database all'interno della tua funzione processing lambda

  2. Consuma il tuo file CSV utilizzando un processo ETL consolidato




Che tu stia utilizzando un servizio di database AWS, come RDS o DynamoDB, o che tu abbia il tuo database PostgreSQL (o simile), puoi collegarti al tuo servizio di database direttamente dalla tua funzione process lambda. Ad esempio, nello stesso modo in cui abbiamo chiamato il servizio S3 utilizzando "boto3" nella nostra funzione lambda, potresti anche usare "boto3" per chiamare RDS o DynamoDB. Il servizio AWS Athena potrebbe anche essere utilizzato per leggere i file di dati direttamente dai flat-files e accedere ai dati usando un linguaggio di query simile a SQL. Consiglio di fare riferimento alla documentazione relativa al servizio che stai utilizzando per maggiori informazioni su come meglio realizzare questo nel tuo ambiente.




Analogamente, ci sono molti servizi disponibili che possono aiutare a consumare file CSV e caricare i dati in un database. Puoi già avere un processo ETL consolidato che puoi sfruttare.




Speriamo che tu abbia trovato utile questa guida – invio felice!

A seconda dello scopo per cui si memorizzano i dati dell'evento Bird, i tuoi requisiti potrebbero essere soddisfatti semplicemente memorizzando il payload JSON come file piatto. Potresti anche avere un processo ETL a valle già stabilito che è in grado di consumare e caricare dati in formato JSON. In entrambi questi casi, potresti essere in grado di utilizzare il file piatto creato dal nostro lambda di elaborazione che abbiamo creato sopra così com'è.




In alternativa, potresti aver bisogno di trasformare i dati, ad esempio passando da un formato JSON a un CSV, o caricare i dati direttamente in un database. In questo esempio, creeremo una semplice funzione lambda che convertirà i dati del webhook dal formato JSON originale in un file CSV che potrebbe essere caricato in un database. 




Crea un Lambda per Elaborare i Dati




Come con la funzione lambda per consumare i dati del webhook, dobbiamo creare una nuova funzione lambda navigando nel servizio Lambda all'interno di AWS e premendo "Crea Funzione". Questa nuova funzione lambda verrà attivata quando un nuovo file viene creato sul nostro bucket S3 – leggerà i dati e li convertirà in un nuovo file csv.  




La funzione lambda accetta le informazioni sul file come un evento. Nella funzione lambda di esempio, vedrai che abbiamo innanzitutto una serie di controlli di validazione per garantire che i dati siano completi e formattati come previsto. Successivamente, convertiamo il payload JSON in un file CSV utilizzando la libreria "csv" e scrivendo su un file temporaneo. Le funzioni Lambda possono solo scrivere file locali nella directory "tmp", quindi creiamo un file csv temporaneo e lo chiamiamo con la convenzione <batch_id>.csv. Il motivo per cui utilizziamo il batch_id qui è semplicemente per garantire che eventuali processi paralleli che vengono eseguiti a seguito di più payload webhook non interferiscano tra loro, poiché ogni batch webhook avrà un batch_id univoco.  




Una volta che i dati sono stati completamente convertiti in CSV, leggiamo i dati CSV come flusso di byte, eliminiamo il file temporaneo e salviamo i dati CSV come un nuovo file su S3. È importante notare che è necessario un bucket S3 diverso per l'output, altrimenti si rischia di creare un loop ricorsivo che può portare ad un aumento dell'uso del lambda e dei costi. Dovremo identificare in quale bucket S3 e posizione vogliamo che il nostro file CSV venga memorizzato all'interno della nostra funzione lambda.  Segui la stessa procedura sopra per creare un nuovo bucket S3 per memorizzare il nostro file CSV.




Nota che la directory tmp è limitata a 512 MB di spazio, quindi è importante che il file temporaneo venga eliminato successivamente per garantire sufficiente spazio per esecuzioni future. Il motivo per cui utilizziamo un file temporaneo, invece di scrivere direttamente su S3, è semplificare la connessione a S3 con una singola richiesta.




Proprio come con la funzione consume lambda, potresti aver bisogno di aggiornare i permessi per la tua funzione process lambda. Questa funzione lambda richiede che il ruolo di esecuzione abbia i permessi GetObject per il bucket S3 di input, e sia PutObject che GetObject per il bucket S3 di output.




Un esempio della nostra funzione processing lambda può essere trovato qui.




Configura un Lambda per Eseguire Quando Nuovi Dati Sono Memorizzati su S3




Ora che la nostra funzione lambda per convertire il file da formato JSON a CSV è stata creata, dobbiamo configurarla affinché venga attivata quando un nuovo file viene creato sul nostro bucket S3. Per fare ciò, dobbiamo aggiungere un trigger alla nostra funzione lambda aprendo la nostra funzione lambda e cliccando su "Aggiungi Trigger" nella parte superiore della pagina.  Seleziona “S3” e fornisci il nome del bucket S3 dove sono memorizzati i raw webhook payloads. Hai anche l'opzione di specificare prefissi e/o suffissi del file per filtrare. Una volta che le impostazioni sono state configurate, puoi aggiungere il trigger cliccando su “Aggiungi” nella parte inferiore della pagina. Ora la tua funzione processing lambda verrà eseguita ogni volta che un nuovo file verrà aggiunto al tuo bucket S3.




Caricare i Dati in un Database




In questo esempio, non tratterò in dettaglio il caricamento dei dati in un database, ma se hai seguito questo esempio hai un paio di opzioni:




  1. Carica i dati direttamente nel tuo database all'interno della tua funzione processing lambda

  2. Consuma il tuo file CSV utilizzando un processo ETL consolidato




Che tu stia utilizzando un servizio di database AWS, come RDS o DynamoDB, o che tu abbia il tuo database PostgreSQL (o simile), puoi collegarti al tuo servizio di database direttamente dalla tua funzione process lambda. Ad esempio, nello stesso modo in cui abbiamo chiamato il servizio S3 utilizzando "boto3" nella nostra funzione lambda, potresti anche usare "boto3" per chiamare RDS o DynamoDB. Il servizio AWS Athena potrebbe anche essere utilizzato per leggere i file di dati direttamente dai flat-files e accedere ai dati usando un linguaggio di query simile a SQL. Consiglio di fare riferimento alla documentazione relativa al servizio che stai utilizzando per maggiori informazioni su come meglio realizzare questo nel tuo ambiente.




Analogamente, ci sono molti servizi disponibili che possono aiutare a consumare file CSV e caricare i dati in un database. Puoi già avere un processo ETL consolidato che puoi sfruttare.




Speriamo che tu abbia trovato utile questa guida – invio felice!

Connettiamoci con un esperto di Bird.
Scopri tutta la potenza del Bird in 30 minuti.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

Azienda

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

Connettiamoci con un esperto di Bird.
Scopri tutta la potenza del Bird in 30 minuti.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

Azienda

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

Connettiamoci con un esperto di Bird.
Scopri tutta la potenza del Bird in 30 minuti.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

R

Raggiungi

G

Grow

M

Manage

A

Automate

Azienda

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.