Zasięg

Grow

Manage

Automate

Zasięg

Grow

Manage

Automate

Tworzenie i używanie webhooków dla ptaków

Email

1 min read

Tworzenie i używanie webhooków dla ptaków

Email

1 min read

Tworzenie i używanie webhooków dla ptaków

Poniżej znajduje się prosty przewodnik, który pomoże nadawcom poczuć się swobodnie podczas tworzenia webhooka wydarzeń Bird i korzystania z danych za pomocą infrastruktury w AWS.

W czasie rzeczywistym webhooki zdarzeń Bird są niezwykle cennym narzędziem umożliwiającym nadawcom automatyczne przesyłanie danych do ich systemów. Może to napędzać automatyzację procesu poprzez aktualizację list mailingowych, inicjowanie zautomatyzowanych ścieżek e-mailowych lub wypełnianie wewnętrznych pulpitów nawigacyjnych. Choć te same dane zdarzeń można uzyskać za pośrednictwem interfejsu użytkownika Bird za pomocą Event Search lub programowo, korzystając z Events API Bird, ograniczenia dotyczące liczby rekordów zwracanych w jednym żądaniu lub limity szybkości nałożone na punkt końcowy API mogą sprawić, że obie te metody będą restrykcyjne dla dużych i zaawansowanych nadawców.  

Webhooki zdarzeń w czasie rzeczywistym umożliwiają nadawcy skonfigurowanie punktu końcowego, do którego Bird przesyła dane, a dane te mogą być konsumowane bez potrzeby planowania zadań cron, które pobierają dane. Istnieją również kompromisy logistyczne przy pobieraniu danych w porównaniu do tego, gdy dane są przesyłane do Ciebie, na przykład konieczność określenia, jaki przedział czasowy i parametry należy zastosować dla każdego żądania API. Jeśli okresy czasowe nie są idealnie zsynchronizowane, ryzykujesz utratę danych, a jeśli okresy te nakładają się, musisz poradzić sobie z powielonymi danymi. Dzięki webhookom w czasie rzeczywistym dane zdarzeń są po prostu przesyłane do Twojego punktu końcowego, gdy tylko stają się dostępne w Bird.

Mimo że korzyści wynikające z otrzymywania danych zdarzeń w czasie rzeczywistym w celu napędzania procesów automatyzacji mogą być od razu zrozumiałe dla wielu nadawców, rzeczywisty proces wdrażania i konsumowania webhooków może być onieśmielający. Może to być szczególnie prawdziwe, jeśli nie jesteś zaznajomiony z technicznymi aspektami tworzenia punktu końcowego i programowego zarządzania danymi. Dostępne są usługi, które będą konsumować dane webhooks z Bird i automatycznie ETL do Twojej bazy danych – przykładem może być StitchData, o którym pisaliśmy na naszym blogu w przeszłości.  Jeśli jednak chcesz mieć większą kontrolę nad procesem, możesz łatwo zbudować komponenty samodzielnie. Poniżej znajduje się prosty przewodnik, który ma pomóc nadawcom poczuć się komfortowo przy tworzeniu webhooka zdarzeń Bird i konsumowaniu danych przy użyciu infrastruktury w AWS.

Konfigurowanie Webhook Target Endpoint

Kiedy tworzone jest zdarzenie Bird, chcemy, aby dane tego zdarzenia były strumieniowane w czasie rzeczywistym do punktu końcowego w AWS, abyśmy mogli je konsumować i wykorzystywać programowo. Dane zostaną wysłane z Bird do docelowego punktu końcowego, który przekaże ładunek do funkcji lambda, która przetworzy i zapisze dane w wiadrze S3. Wysokopoziomowy diagram opisanego przepływu danych można zobaczyć poniżej:


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


Aby wdrożyć ten przepływ pracy, zbudujmy go w odwrotnej kolejności, zaczynając od utworzenia wiadra S3, w którym będziemy przechowywać nasze dane zdarzeń, a następnie cofniemy się - dodając każdy komponent, który zasila to, co zbudowaliśmy.

Utwórz Wiadro S3, aby Przechowywać Dane Webhooku

Zanim utworzymy nasz load balancer do akceptacji danych lub naszą funkcję lambda do przechowywania danych, musimy najpierw utworzyć nasz wiadro S3, gdzie dane będą przechowywane. Aby to zrobić, przejdź do usługi S3 w AWS i naciśnij „Create Bucket”. Zostaniesz poproszony o przypisanie nazwy do swojego wiadra i ustawienie regionu - upewnij się, że używasz tego samego regionu co swój ALB i funkcja lambda. Po utworzeniu wiadra S3, będzie ono puste – jeśli chcesz zorganizować dane wewnątrz folderu, możesz teraz utworzyć zamierzony katalog lub katalog zostanie utworzony, gdy twoja funkcja lambda zapisze plik. W tym przykładzie nazwaliśmy nasze wiadro S3 „bird-webhooks” i utworzyliśmy folder nazwany „B Event Data”, aby przechowywać nasze dane zdarzeń – zobaczysz te nazwy odniesione w naszej funkcji lambda poniżej.

Utwórz Funkcję Lambda do Konsumcji Danych

Faktyczne przetwarzanie i przechowywanie danych będzie wykonywane przez funkcję lambda wywołaną przez nasz load balancer aplikacji (ALB). 

Pierwszym krokiem jest utworzenie twojej funkcji lambda poprzez nawigację do usługi Lambda w AWS i kliknięcie „Create Function”. Zostaniesz poproszony o przypisanie nazwy do swojej funkcji lambda i wybór, w którym języku programowania napisać swoją funkcję. W tym przykładzie używamy Pythona jako języka wykonawczego.

Teraz musimy opracować naszą funkcję lambda. Na chwilę załóżmy, że nasz load balancer aplikacji został skonfigurowany i przekazuje ładunek webhooku do naszej funkcji lambda – lambda otrzyma ładunek zawierający pełne nagłówki i ciało. Ładunek jest przekazywany do naszej funkcji lambda przy użyciu obiektu „event” jako słownika. Możesz odnieść się niezależnie do nagłówków i ciała ładunku, uzyskując dostęp do obiektów „headers” i „body” w ładunku. W tym przykładzie po prostu przeczytamy nagłówek „x-messagesystems-batch-id”, gdzie batch ID jest unikalną wartością stworzoną przez Bird dla partii webhooku, i użyjemy go jako nazwy pliku przy zapisaniu ciała jako pliku płaskiego w S3; jednakże możesz chcieć dodać dodatkową funkcjonalność, taką jak sprawdzanie uwierzytelnienia czy obsługę błędów, w miarę potrzeb.

Podczas przechowywania ładunku do pliku płaskiego w S3, musimy zdefiniować nazwę wiadra S3, lokalizację i nazwę pliku, w którym zostaną przechowane dane ładunku. W naszej przykładowej funkcji lambda robimy to w ramach funkcji „store_batch”. W tym przykładzie zamierzamy przechowywać całą partię jako jeden plik, co pomaga zapewnić, że dane są zebrane i przechowywane zanim połączenie HTTP między Bird a twoim punktem końcowym wygaśnie. Mimo że możesz dostosować ustawienia czasu oczekiwania połączenia na twoim load balancerze, nie ma gwarancji, że połączenie nie wygaśnie po stronie transmisji (w tym przypadku Bird) lub że połączenie nie zostanie zakończone przed zakończeniem wykonywania twojej funkcji lambda. Jest to najlepsza praktyka, aby zachować funkcję konsumującą możliwie jak najwydajniejszą i rezerwować działania przetwarzania danych dla procesów dółstrumieniowych, jeśli to możliwe – takich jak konwersja batched JSON-formatted payload na plik CSV czy ładowanie danych zdarzeń do bazy danych.

Ważne jest, aby zauważyć, że możesz potrzebować zaktualizować uprawnienia dla swojej funkcji lambda. Twoja rola wykonawcza będzie potrzebować uprawnień PutObject i GetObject dla S3. Jest to najlepsza praktyka, aby egzekwować zasadę najmniejszych przywilejów, więc polecam ustawienie tych uprawnień wyłącznie dla wiadra S3, w którym ładunki webhooku będą przechowywane.

Przykład naszej funkcji konsumenta lambda można znaleźć tutaj.

Krótka uwaga o batch ID:  Bird grupuje zdarzenia w jeden ładunek, gdzie każda partia może zawierać od 1 do 350 lub więcej rekordów zdarzeń.  Partia otrzyma unikalny batch ID, który można wykorzystać do przeglądania statusu partii, korzystając z Event Webhooks API lub w ramach swojego konta Bird, klikając strumień webhooku i wybierając „Batch Status.” W przypadku, gdy ładunek webhooku nie mógł zostać dostarczony, na przykład podczas wygaśnięcia połączenia, Bird automatycznie spróbuje ponownie przesłać partię przy użyciu tego samego batch ID. Może się to zdarzyć, gdy twoja funkcja lambda działa blisko maksymalnego czasu rundowego 10 sekund i jest to powód, aby optymalizować funkcję konsumenta w celu skrócenia czasu wykonania.

Aby obsłużyć wszystkie działania przetwarzania danych, zalecam utworzenie osobnej funkcji lambda, która wykonuje się za każdym razem, gdy zostanie utworzony nowy plik w wiadrze S3 – w ten sposób przetwarzanie danych odbywa się asynchronicznie w stosunku do transmisji danych i nie ma ryzyka utraty danych na skutek zakończonego połączenia. Omawiam funkcję przetwarzającą lambda w późniejszej części.

Utwórz Load Balancer Aplikacji

Aby otrzymać ładunek webhooku, musimy zapewnić punkt końcowy do przesyłania ładunków. Robimy to, tworząc load balancer aplikacji w AWS przez nawigację do EC2 > Load Balancers i kliknięcie „Create Load Balancer”. Zostaniesz poproszony o wybór, jaki rodzaj load balancera chcesz utworzyć – w tym przypadku chcemy utworzyć load balancer aplikacji. Musimy używać load balancer aplikacji (ALB) do zbudowania naszego konsumenta, ponieważ zdarzeniowe webhoksy będą wysyłane jako żądanie HTTP, a ALB są używane do routingu żądań HTTP w ramach AWS. Moglibyśmy wdrożyć Bramę HTTP jako alternatywę; jednakże używamy ALB w tym projekcie, ponieważ jest on lżejszy i bardziej opłacalny niż Brama HTTP. Ważne jest, aby zauważyć, że jeśli zdecydujesz się używać Bramę HTTP, format zdarzeń może być inny niż w przypadku ALB, i dlatego twoja funkcja lambda będzie musiała obsługiwać obiekt żądania odpowiednio.

Po utworzeniu ALB będziesz poproszony o przypisanie nazwy do swojego ALB i skonfigurowanie schematu i ustawień dostępności/bezpieczeństwa – ponieważ planujemy otrzymywać dane zdarzeń z zewnętrznego źródła (Bird), chcemy, aby nasz ALB był internet-faced. Pod „Listeners and routing,” ALB powinno nasłuchiwać do HTTPS na porcie 443, i chcemy utworzyć Grupę Docelową, która wskazuje naszą funkcję lambda tak, aby nasz ALB przekazywał przychodzące żądania do funkcji konsumpcyjnej lambda, którą utworzyliśmy powyżej.  Musisz również upewnić się, że grupa bezpieczeństwa ma pozwolenie na akceptację ruchu przez port 443.

Utwórz Rekord DNS dla Load Balanceru

Aby ułatwić nam korzystanie z naszego ALB jako punktu końcowego, utworzymy rekord A w DNS, który wskazuje nasz ALB. Do tego możemy użyć usługi AWS Route 53 (lub obecnego dostawcy DNS) i utworzyć rekord A dla nazwy hosta, którą chcesz używać dla swojego punktu końcowego (np. spevents.<your_domain>). Rekord A powinien być skonfigurowany, aby wskazywał na nasz utworzony ALB. Jeśli używasz Route 53 do zarządzania rekordami DNS, możesz bezpośrednio odnosić się do instancji ALB, włączając „Alias” i wybierając ALB; w przeciwnym razie, jeśli używasz zewnętrznego dostawcy DNS, powinieneś wskazać rekord A na publiczny adres IP instancji ALB.

Zalecam użycie narzędzia takiego jak Postman, aby przetestować, czy wszystko zostało skonfigurowane poprawnie przed włączeniem webhooku Bird. Możesz złożyć żądanie POST do swojego punktu końcowego i potwierdzić, że otrzymano odpowiedź. Jeśli twoje żądanie POST nie zwraca odpowiedzi, może być konieczne, aby ponownie sprawdzić, czy twój ALB słucha na poprawnym porcie.

Utwórz Webhook w Bird

Teraz jesteśmy gotowi do utworzenia webhooku w Bird i użycia nazwy hosta zdefiniowanej przez rekord A jako naszego docelowego punktu końcowego. Aby utworzyć webhook, przejdź do Sekcja Webhooków w swoim koncie Bird i kliknij „Create Webhook”. Zostaniesz poproszony o przypisanie nazwy do swojego webhooku i podanie docelowego URL – cel powinien być nazwą hosta rekordu A, który utworzyłeś wcześniej. Zwróć uwagę, że docelowy URL może wymagać włączenia „HTTPS://” do URL.  

Po zakończeniu, zweryfikuj, że wybrano odpowiednie subkonto i zdarzenia, a następnie naciśnij „Create Webhook”, aby zapisać swoją konfigurację. Dane zdarzeń dla wszystkich wybranych typów zdarzeń będą teraz strumieniowane do naszego docelowego URL i będą konsumowane przez nasz ALB do przetwarzania dołstawnego.

Przetwarzanie danych zdarzenia Webhook

W zależności od zamierzonego celu przechowywania danych zdarzeń Bird, Twoje wymagania mogą być spełnione przez po prostu przechowywanie danych JSON jako plików płaskich. Możesz również mieć już ustanowiony proces ETL „downstream”, który jest w stanie przetwarzać i ładować dane w formacie JSON. W obu tych przypadkach możesz być w stanie użyć pliku płaskiego stworzonego przez nasz lambda processing, który stworzyliśmy powyżej, w oryginalnej formie.

Alternatywnie, możesz potrzebować przekształcenia danych – na przykład, aby przekonwertować z JSON do formatu CSV – lub załadowania danych bezpośrednio do bazy danych. W tym przykładzie stworzymy prostą funkcję lambda, która przekonwertuje dane webhook z oryginalnego formatu JSON do pliku CSV, który można załadować do bazy danych. 

Utwórz Lambda do Przetwarzania Danych

Tak jak w przypadku funkcji lambda do konsumowania danych webhook, musimy stworzyć nową funkcję lambda, nawigując do serwisu Lambda w AWS i klikając „Utwórz Funkcję.” Nowa funkcja lambda będzie aktywowana, gdy nowy plik zostanie utworzony w naszym koszyku S3 – odczyta dane i przekonwertuje je do nowego pliku csv.  

Funkcja lambda akceptuje informacje o pliku jako zdarzenie. W przykładowej funkcji lambda widać, że najpierw przeprowadzamy serię kontroli walidacyjnych, aby upewnić się, że dane są kompletne i sformatowane zgodnie z oczekiwaniami. Następnie konwertujemy ładunek JSON do pliku CSV używając biblioteki „csv” i zapisując go do pliku tymczasowego. Funkcje Lambda mogą zapisywać lokalne pliki tylko do katalogu „/tmp”, więc tworzymy tymczasowy plik csv i nazywamy go zgodnie z konwencją <batch_id>.csv. Powód, dla którego używamy tutaj batch_id, jest prosty: zapewnienie, że jakiekolwiek równoległe procesy, które działają w wyniku otrzymywania wielu ładunków webhook, nie będą sobie przeszkadzać, ponieważ każda partia webhook będzie miała unikalne batch_id.  

Gdy dane zostaną całkowicie przekonwertowane do CSV, czytamy dane CSV jako strumień bajtów, usuwamy plik tymczasowy i zapisujemy dane CSV jako nowy plik na S3. Ważne jest, aby zauważyć, że dla wyjścia potrzebny jest inny koszyk S3, w przeciwnym razie ryzykujemy stworzenie pętli rekurencyjnej, która może prowadzić do zwiększonego wykorzystania lambda i zwiększonych kosztów. Musimy zidentyfikować, w którym koszyku S3 i lokalizacji chcemy, aby nasz plik CSV został zapisany w naszej funkcji lambda.  Postępuj zgodnie z powyższą procedurą, aby stworzyć nowy koszyk S3 do przechowywania naszego pliku CSV.

Zwróć uwagę, że katalog tmp jest ograniczony do 512 MB przestrzeni, więc ważne jest, aby plik tymczasowy był usuwany po zakończeniu, aby zapewnić odpowiednią przestrzeń dla przyszłych wykonania. Powód, dla którego używamy pliku tymczasowego zamiast bezpośredniego pisania na S3, to uproszczenie połączenia z S3 poprzez posiadanie jednego żądania.

Tak samo jak w przypadku funkcji lambda do konsumowania, możesz potrzebować zaktualizować uprawnienia dla swojej funkcji lambda. Ta funkcja lambda wymaga roli wykonawczej do posiadania uprawnień GetObject dla wejściowego koszyka S3 oraz zarówno PutObject, jak i GetObject dla koszyka wyjściowego S3.

Przykład naszej funkcji lambda można znaleźć tutaj.

Skonfiguruj Lambda do Wykonywania Szkodliwego Oprogramowania Gdy Nowe Dane Są Przechowywane na S3

Teraz, gdy nasza funkcja lambda do konwersji pliku z formatu JSON na CSV została utworzona, musimy ją skonfigurować, aby wywoływała, gdy nowy plik zostanie utworzony w naszym koszyku S3. Aby to zrobić, musimy dodać wyzwalacz do naszej funkcji lambda, otwierając ją i klikając „Dodaj wyzwalacz” na górze strony.  Wybierz „S3” i podaj nazwę koszyka S3, w którym przechowywane są surowe ładunki webhook. Masz również możliwość określenia prefiksu i/lub sufiksu pliku dla filtrowania. Gdy ustawienia zostaną już skonfigurowane, możesz dodać wyzwalacz, klikając „Dodaj” u dołu strony. Teraz twoja funkcja lambda do przetwarzania będzie działać, za każdym razem gdy nowy plik zostanie dodany do twojego koszyka S3.

Ładowanie Danych do Bazy Danych

W tym przykładzie nie będę omawiać ładowania danych do bazy danych w szczegółach, ale jeśli podążasz za tym przykładem, masz kilka opcji:

  1. Załaduj dane bezpośrednio do swojej bazy danych w ramach swojej funkcji lambda do przetwarzania

  2. Korzystaj ze swojego pliku CSV, używając ustalonego procesu ETL

Niezależnie od tego, czy używasz usługi bazy danych AWS, takiej jak RDS lub DynamoDB, czy posiadasz własną bazę danych PostgreSQL (lub podobną), możesz połączyć się ze swoją usługą bazy danych bezpośrednio z twojej funkcji lambda do przetwarzania. Na przykład, w ten sam sposób, w jaki wywoływaliśmy usługę S3 za pomocą „boto3” w naszej funkcji lambda, możesz również użyć „boto3” do wywołania RDS lub DynamoDB. Usługa AWS Athena może być również używana do odczytywania plików danych bezpośrednio z plików płaskich i uzyskiwania dostępu do danych za pomocą języka zapytań podobnego do SQL. Zalecam zapoznanie się z dokumentacją dotyczącą usługi, z której korzystasz, aby uzyskać więcej informacji o tym, jak najlepiej to osiągnąć w twoim środowisku.

Podobnie, istnieje wiele dostępnych usług, które mogą pomóc w konsumpcji plików CSV i ładowaniu danych do bazy danych. Być może masz już ustalony proces ETL, który możesz wykorzystać.

Mamy nadzieję, że ten przewodnik okazał się pomocny – powodzenia w wysyłaniu!

W zależności od zamierzonego celu przechowywania danych zdarzeń Bird, Twoje wymagania mogą być spełnione przez po prostu przechowywanie danych JSON jako plików płaskich. Możesz również mieć już ustanowiony proces ETL „downstream”, który jest w stanie przetwarzać i ładować dane w formacie JSON. W obu tych przypadkach możesz być w stanie użyć pliku płaskiego stworzonego przez nasz lambda processing, który stworzyliśmy powyżej, w oryginalnej formie.

Alternatywnie, możesz potrzebować przekształcenia danych – na przykład, aby przekonwertować z JSON do formatu CSV – lub załadowania danych bezpośrednio do bazy danych. W tym przykładzie stworzymy prostą funkcję lambda, która przekonwertuje dane webhook z oryginalnego formatu JSON do pliku CSV, który można załadować do bazy danych. 

Utwórz Lambda do Przetwarzania Danych

Tak jak w przypadku funkcji lambda do konsumowania danych webhook, musimy stworzyć nową funkcję lambda, nawigując do serwisu Lambda w AWS i klikając „Utwórz Funkcję.” Nowa funkcja lambda będzie aktywowana, gdy nowy plik zostanie utworzony w naszym koszyku S3 – odczyta dane i przekonwertuje je do nowego pliku csv.  

Funkcja lambda akceptuje informacje o pliku jako zdarzenie. W przykładowej funkcji lambda widać, że najpierw przeprowadzamy serię kontroli walidacyjnych, aby upewnić się, że dane są kompletne i sformatowane zgodnie z oczekiwaniami. Następnie konwertujemy ładunek JSON do pliku CSV używając biblioteki „csv” i zapisując go do pliku tymczasowego. Funkcje Lambda mogą zapisywać lokalne pliki tylko do katalogu „/tmp”, więc tworzymy tymczasowy plik csv i nazywamy go zgodnie z konwencją <batch_id>.csv. Powód, dla którego używamy tutaj batch_id, jest prosty: zapewnienie, że jakiekolwiek równoległe procesy, które działają w wyniku otrzymywania wielu ładunków webhook, nie będą sobie przeszkadzać, ponieważ każda partia webhook będzie miała unikalne batch_id.  

Gdy dane zostaną całkowicie przekonwertowane do CSV, czytamy dane CSV jako strumień bajtów, usuwamy plik tymczasowy i zapisujemy dane CSV jako nowy plik na S3. Ważne jest, aby zauważyć, że dla wyjścia potrzebny jest inny koszyk S3, w przeciwnym razie ryzykujemy stworzenie pętli rekurencyjnej, która może prowadzić do zwiększonego wykorzystania lambda i zwiększonych kosztów. Musimy zidentyfikować, w którym koszyku S3 i lokalizacji chcemy, aby nasz plik CSV został zapisany w naszej funkcji lambda.  Postępuj zgodnie z powyższą procedurą, aby stworzyć nowy koszyk S3 do przechowywania naszego pliku CSV.

Zwróć uwagę, że katalog tmp jest ograniczony do 512 MB przestrzeni, więc ważne jest, aby plik tymczasowy był usuwany po zakończeniu, aby zapewnić odpowiednią przestrzeń dla przyszłych wykonania. Powód, dla którego używamy pliku tymczasowego zamiast bezpośredniego pisania na S3, to uproszczenie połączenia z S3 poprzez posiadanie jednego żądania.

Tak samo jak w przypadku funkcji lambda do konsumowania, możesz potrzebować zaktualizować uprawnienia dla swojej funkcji lambda. Ta funkcja lambda wymaga roli wykonawczej do posiadania uprawnień GetObject dla wejściowego koszyka S3 oraz zarówno PutObject, jak i GetObject dla koszyka wyjściowego S3.

Przykład naszej funkcji lambda można znaleźć tutaj.

Skonfiguruj Lambda do Wykonywania Szkodliwego Oprogramowania Gdy Nowe Dane Są Przechowywane na S3

Teraz, gdy nasza funkcja lambda do konwersji pliku z formatu JSON na CSV została utworzona, musimy ją skonfigurować, aby wywoływała, gdy nowy plik zostanie utworzony w naszym koszyku S3. Aby to zrobić, musimy dodać wyzwalacz do naszej funkcji lambda, otwierając ją i klikając „Dodaj wyzwalacz” na górze strony.  Wybierz „S3” i podaj nazwę koszyka S3, w którym przechowywane są surowe ładunki webhook. Masz również możliwość określenia prefiksu i/lub sufiksu pliku dla filtrowania. Gdy ustawienia zostaną już skonfigurowane, możesz dodać wyzwalacz, klikając „Dodaj” u dołu strony. Teraz twoja funkcja lambda do przetwarzania będzie działać, za każdym razem gdy nowy plik zostanie dodany do twojego koszyka S3.

Ładowanie Danych do Bazy Danych

W tym przykładzie nie będę omawiać ładowania danych do bazy danych w szczegółach, ale jeśli podążasz za tym przykładem, masz kilka opcji:

  1. Załaduj dane bezpośrednio do swojej bazy danych w ramach swojej funkcji lambda do przetwarzania

  2. Korzystaj ze swojego pliku CSV, używając ustalonego procesu ETL

Niezależnie od tego, czy używasz usługi bazy danych AWS, takiej jak RDS lub DynamoDB, czy posiadasz własną bazę danych PostgreSQL (lub podobną), możesz połączyć się ze swoją usługą bazy danych bezpośrednio z twojej funkcji lambda do przetwarzania. Na przykład, w ten sam sposób, w jaki wywoływaliśmy usługę S3 za pomocą „boto3” w naszej funkcji lambda, możesz również użyć „boto3” do wywołania RDS lub DynamoDB. Usługa AWS Athena może być również używana do odczytywania plików danych bezpośrednio z plików płaskich i uzyskiwania dostępu do danych za pomocą języka zapytań podobnego do SQL. Zalecam zapoznanie się z dokumentacją dotyczącą usługi, z której korzystasz, aby uzyskać więcej informacji o tym, jak najlepiej to osiągnąć w twoim środowisku.

Podobnie, istnieje wiele dostępnych usług, które mogą pomóc w konsumpcji plików CSV i ładowaniu danych do bazy danych. Być może masz już ustalony proces ETL, który możesz wykorzystać.

Mamy nadzieję, że ten przewodnik okazał się pomocny – powodzenia w wysyłaniu!

W zależności od zamierzonego celu przechowywania danych zdarzeń Bird, Twoje wymagania mogą być spełnione przez po prostu przechowywanie danych JSON jako plików płaskich. Możesz również mieć już ustanowiony proces ETL „downstream”, który jest w stanie przetwarzać i ładować dane w formacie JSON. W obu tych przypadkach możesz być w stanie użyć pliku płaskiego stworzonego przez nasz lambda processing, który stworzyliśmy powyżej, w oryginalnej formie.

Alternatywnie, możesz potrzebować przekształcenia danych – na przykład, aby przekonwertować z JSON do formatu CSV – lub załadowania danych bezpośrednio do bazy danych. W tym przykładzie stworzymy prostą funkcję lambda, która przekonwertuje dane webhook z oryginalnego formatu JSON do pliku CSV, który można załadować do bazy danych. 

Utwórz Lambda do Przetwarzania Danych

Tak jak w przypadku funkcji lambda do konsumowania danych webhook, musimy stworzyć nową funkcję lambda, nawigując do serwisu Lambda w AWS i klikając „Utwórz Funkcję.” Nowa funkcja lambda będzie aktywowana, gdy nowy plik zostanie utworzony w naszym koszyku S3 – odczyta dane i przekonwertuje je do nowego pliku csv.  

Funkcja lambda akceptuje informacje o pliku jako zdarzenie. W przykładowej funkcji lambda widać, że najpierw przeprowadzamy serię kontroli walidacyjnych, aby upewnić się, że dane są kompletne i sformatowane zgodnie z oczekiwaniami. Następnie konwertujemy ładunek JSON do pliku CSV używając biblioteki „csv” i zapisując go do pliku tymczasowego. Funkcje Lambda mogą zapisywać lokalne pliki tylko do katalogu „/tmp”, więc tworzymy tymczasowy plik csv i nazywamy go zgodnie z konwencją <batch_id>.csv. Powód, dla którego używamy tutaj batch_id, jest prosty: zapewnienie, że jakiekolwiek równoległe procesy, które działają w wyniku otrzymywania wielu ładunków webhook, nie będą sobie przeszkadzać, ponieważ każda partia webhook będzie miała unikalne batch_id.  

Gdy dane zostaną całkowicie przekonwertowane do CSV, czytamy dane CSV jako strumień bajtów, usuwamy plik tymczasowy i zapisujemy dane CSV jako nowy plik na S3. Ważne jest, aby zauważyć, że dla wyjścia potrzebny jest inny koszyk S3, w przeciwnym razie ryzykujemy stworzenie pętli rekurencyjnej, która może prowadzić do zwiększonego wykorzystania lambda i zwiększonych kosztów. Musimy zidentyfikować, w którym koszyku S3 i lokalizacji chcemy, aby nasz plik CSV został zapisany w naszej funkcji lambda.  Postępuj zgodnie z powyższą procedurą, aby stworzyć nowy koszyk S3 do przechowywania naszego pliku CSV.

Zwróć uwagę, że katalog tmp jest ograniczony do 512 MB przestrzeni, więc ważne jest, aby plik tymczasowy był usuwany po zakończeniu, aby zapewnić odpowiednią przestrzeń dla przyszłych wykonania. Powód, dla którego używamy pliku tymczasowego zamiast bezpośredniego pisania na S3, to uproszczenie połączenia z S3 poprzez posiadanie jednego żądania.

Tak samo jak w przypadku funkcji lambda do konsumowania, możesz potrzebować zaktualizować uprawnienia dla swojej funkcji lambda. Ta funkcja lambda wymaga roli wykonawczej do posiadania uprawnień GetObject dla wejściowego koszyka S3 oraz zarówno PutObject, jak i GetObject dla koszyka wyjściowego S3.

Przykład naszej funkcji lambda można znaleźć tutaj.

Skonfiguruj Lambda do Wykonywania Szkodliwego Oprogramowania Gdy Nowe Dane Są Przechowywane na S3

Teraz, gdy nasza funkcja lambda do konwersji pliku z formatu JSON na CSV została utworzona, musimy ją skonfigurować, aby wywoływała, gdy nowy plik zostanie utworzony w naszym koszyku S3. Aby to zrobić, musimy dodać wyzwalacz do naszej funkcji lambda, otwierając ją i klikając „Dodaj wyzwalacz” na górze strony.  Wybierz „S3” i podaj nazwę koszyka S3, w którym przechowywane są surowe ładunki webhook. Masz również możliwość określenia prefiksu i/lub sufiksu pliku dla filtrowania. Gdy ustawienia zostaną już skonfigurowane, możesz dodać wyzwalacz, klikając „Dodaj” u dołu strony. Teraz twoja funkcja lambda do przetwarzania będzie działać, za każdym razem gdy nowy plik zostanie dodany do twojego koszyka S3.

Ładowanie Danych do Bazy Danych

W tym przykładzie nie będę omawiać ładowania danych do bazy danych w szczegółach, ale jeśli podążasz za tym przykładem, masz kilka opcji:

  1. Załaduj dane bezpośrednio do swojej bazy danych w ramach swojej funkcji lambda do przetwarzania

  2. Korzystaj ze swojego pliku CSV, używając ustalonego procesu ETL

Niezależnie od tego, czy używasz usługi bazy danych AWS, takiej jak RDS lub DynamoDB, czy posiadasz własną bazę danych PostgreSQL (lub podobną), możesz połączyć się ze swoją usługą bazy danych bezpośrednio z twojej funkcji lambda do przetwarzania. Na przykład, w ten sam sposób, w jaki wywoływaliśmy usługę S3 za pomocą „boto3” w naszej funkcji lambda, możesz również użyć „boto3” do wywołania RDS lub DynamoDB. Usługa AWS Athena może być również używana do odczytywania plików danych bezpośrednio z plików płaskich i uzyskiwania dostępu do danych za pomocą języka zapytań podobnego do SQL. Zalecam zapoznanie się z dokumentacją dotyczącą usługi, z której korzystasz, aby uzyskać więcej informacji o tym, jak najlepiej to osiągnąć w twoim środowisku.

Podobnie, istnieje wiele dostępnych usług, które mogą pomóc w konsumpcji plików CSV i ładowaniu danych do bazy danych. Być może masz już ustalony proces ETL, który możesz wykorzystać.

Mamy nadzieję, że ten przewodnik okazał się pomocny – powodzenia w wysyłaniu!

Połączmy Cię z ekspertem Bird.
Zobacz pełną moc Bird w 30 minut.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

Company

Biuletyn

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.

Połączmy Cię z ekspertem Bird.
Zobacz pełną moc Bird w 30 minut.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

Company

Biuletyn

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.

Połączmy Cię z ekspertem Bird.
Zobacz pełną moc Bird w 30 minut.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

R

Reach

G

Grow

M

Manage

A

Automate

Company

Biuletyn

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.