Tworzenie i konsumowanie webhooków ptaków

Ptak

27 sty 2022

Email

1 min read

Tworzenie i konsumowanie webhooków ptaków

Najważniejsze informacje

    • Witryny internetowe Bird's w czasie rzeczywistym umożliwiają nadawcom otrzymywanie danych o zdarzeniach natychmiastowo—bez odpytywania, bez zadań cyklicznych i bez bólów głowy związanych z ograniczeniami liczby zapytań.

    • Witryny internetowe eliminują złożoność zarządzania oknami czasowymi, zapobiegając pominiętym zdarzeniom i obsługując zduplikowane rekordy.

    • Idealne do automatyzacji w dół: aktualizowanie list, rozpoczynanie podróży, wzbogacanie pulpitów nawigacyjnych lub synchronizowanie systemów wewnętrznych.

    • Poradnik prowadzi nadawców przez budowanie pełnej rury przyjmowania AWS: przechowywanie w S3, przetwarzanie Lambda i balancer obciążenia aplikacji.

    • S3 służy jako centralna warstwa przechowywania dla ładunków webhooków, przy czym każda partia jest zapisywana jako płaski plik JSON.

    • Funkcje Lambda obsługują zarówno przyjmowanie (przechowywanie surowych partii), jak i transformację (konwersję JSON na CSV).

    • Bird grupuje zdarzenia—każda partia webhooków zawiera unikalny x-messagesystems-batch-id, co umożliwia kontrole odtwarzania i usuwanie duplikatów.

    • Lambda konsumenta musi pozostać wydajna, ponieważ Bird powtarza partie, jeśli punkt końcowy nie odpowiada w ciągu ~10 sekund.

    • Rekomendowane jest użycie AWS ALB (w porównaniu z API Gateway) ze względu na prostotę, opłacalność i bezpośrednią obsługę żądań HTTP POST.

    • Dostępność DNS (Route 53 lub zewnętrzny dostawca) jest skonfigurowana, aby mapować przyjazną nazwę hosta na punkt końcowy ALB.

    • Po konfiguracji Bird przesyła dane zdarzeń bezpośrednio i niezawodnie do twojej rury AWS do przetwarzania asynchronicznego.

    • Przewodnik obejmuje również najlepsze praktyki: minimalne uprawnienia IAM, ograniczenia przechowywania tymczasowego, unikanie wyzwalaczy rekurencyjnych oraz organizowanie przepływów roboczych multi-lambda.

Podsumowanie pytań i odpowiedzi

  • Jaki jest główny cel internetowych webhooków zdarzeń na żywo Bird?

    Aby przesyłać dane zdarzeń bezpośrednio do punktu końcowego nadawcy w czasie rzeczywistym, umożliwiając natychmiastową automatyzację bez sondowania lub ograniczonych z poziomu API połączeń.

  • Dlaczego webhooks są lepsze niż pobieranie danych za pomocą API dla dużych nadawców?

    Ponieważ wywołania API wymagają zarządzania oknem czasowym, ryzyko luk w danych lub duplikatów oraz mogą napotkać na ograniczenia dotyczące liczby wywołań—webhooki eliminują to wszystko, przesyłając dane w sposób ciągły.

  • Jakie usługi AWS są używane w zalecanej pipeline do wchłaniania webhooków?

    Amazon S3 (przechowywanie), AWS Lambda (przetwarzanie), Application Load Balancer (nasłuchiwacz HTTP) oraz opcjonalnie Route 53 (DNS).

  • Jak Bird przetwarza dane zdarzeń wsadowych?

    Bird wysyła wiele zdarzeń razem w ładunku, z każdym przypisanym unikalnym identyfikatorem partii (x-messagesystems-batch-id) do śledzenia, ponownych prób i deduplikacji.

  • Co wyzwala funkcję Lambda konsumenta?

    ALB przesyła nadchodzące żądania POST webhooka bezpośrednio do Lambdy, która wyodrębnia ładunek i zapisuje go w S3.

  • Dlaczego przechowywać surową paczkę webhooków w S3 przed jej przetworzeniem?

    Aby zapewnić szybkie przetwarzanie (<10 sekund), aby połączenie nie wygasło, oraz aby przenieść cięższe przetwarzanie do osobnego asynchronicznego potoku.

  • Co robi druga funkcja Lambda?

    Jest wywoływane przez nowe obiekty S3, waliduje JSON, konwertuje go na CSV i zapisuje przetworzony wynik do oddzielnego koszyka S3.

  • Dlaczego używać osobnego bucketa S3 do przetworzonych plików CSV?

    Aby uniknąć rekursywnych wyzwalaczy (zapisanie nowego przetworzonego pliku z powrotem do tego samego koszyka ponownie wywołałoby Lambda bez końca).

  • Jakie uprawnienia są wymagane dla funkcji Lambda?

    Konsument Lambda potrzebuje uprawnień S3 PutObject; Lambda przetwarzająca potrzebuje GetObject dla źródłowego koszyka oraz PutObject dla docelowego koszyka.

  • Dlaczego zaleca się korzystanie z AWS ALB zamiast API Gateway?

    ALB jest tańszy, prostszy i idealny do bezpośredniego przekazywania HTTPS POST; API Gateway może zmieniać format ładunku i zwiększać złożoność.

  • Jak nadawcy konfigurować webhook w Bird?

    Dostarczając punkt końcowy HTTPS (rekord DNS dla ALB), wybierając subkonto, wybierając zdarzenia i zapisując konfigurację webhooka.

  • Jakie opcje downstream istnieją dla przechowywania lub analizy przetworzonych danych?

    Załaduj do baz danych (PostgreSQL, DynamoDB, RDS), dostarczaj do systemów ETL lub zapytaj bezpośrednio za pomocą narzędzi takich jak Athena.

Webhooki zdarzeń w czasie rzeczywistym Bird są niezwykle cennym narzędziem dla nadawców, aby mieć dane automatycznie przesyłane do ich systemów. Może to napędzać automatyzację w dół, taką jak aktualizacja list mailingowych, uruchamianie zautomatyzowanych podróży e-mailowych lub wypełnianie wewnętrznych pulpitów. Chociaż te same dane o zdarzeniach można uzyskać za pośrednictwem interfejsu użytkownika Bird, korzystając z Wyszukiwania zdarzeń, lub programowo, wykorzystując Interfejs API zdarzeń Bird, ograniczenia dotyczące liczby rekordów zwracanych w jednym żądaniu lub limity szybkości na punkcie końcowym API mogą sprawić, że obie te metody będą ograniczające 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 mogą być konsumowane bez konieczności planowania zadań cron, które pobierają dane. Istnieją również logistyczne koszty związane z pobieraniem danych w porównaniu do otrzymywania danych na bieżąco, takie jak konieczność określenia, jaki okres czasu i jakie parametry wykorzystać dla każdego żądania API. Jeśli okresy czasu nie są idealnie dopasowane, ryzykujesz utratę danych, a jeśli okresy czasu zachodzą na siebie, musisz poradzić sobie z duplikatami danych. Dzięki webhookom w czasie rzeczywistym, dane o zdarzeniach są po prostu przesyłane do twojego punktu końcowego w miarę ich dostępności w Bird.

Chociaż korzyści z otrzymywania danych o zdarzeniach w czasie rzeczywistym, aby napędzać procesy automatyzacji w dół, mogą być natychmiastowo zrozumiane przez wielu nadawców, rzeczywisty proces wdrażania i konsumowania webhooków może być onieśmielający. Może to być szczególnie prawdą, jeśli nie znasz technicznych elementów tworzenia punktu końcowego i programowego obsługiwania danych. Istnieją usługi, które będą konsumować dane webhooka Bird i ETL do twojej bazy danych automatycznie – przykładem może być StitchData, o którym pisaliśmy w przeszłości.  Jednak jeśli chcesz mieć większą kontrolę nad procesem, możesz łatwo zbudować komponenty samodzielnie. Poniżej znajduje się prosty przewodnik, który pomoże nadawcom poczuć się komfortowo przy tworzeniu webhooka zdarzeń Bird i konsumowaniu danych przy użyciu infrastruktury w AWS.

Webhooki zdarzeń w czasie rzeczywistym Bird są niezwykle cennym narzędziem dla nadawców, aby mieć dane automatycznie przesyłane do ich systemów. Może to napędzać automatyzację w dół, taką jak aktualizacja list mailingowych, uruchamianie zautomatyzowanych podróży e-mailowych lub wypełnianie wewnętrznych pulpitów. Chociaż te same dane o zdarzeniach można uzyskać za pośrednictwem interfejsu użytkownika Bird, korzystając z Wyszukiwania zdarzeń, lub programowo, wykorzystując Interfejs API zdarzeń Bird, ograniczenia dotyczące liczby rekordów zwracanych w jednym żądaniu lub limity szybkości na punkcie końcowym API mogą sprawić, że obie te metody będą ograniczające 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 mogą być konsumowane bez konieczności planowania zadań cron, które pobierają dane. Istnieją również logistyczne koszty związane z pobieraniem danych w porównaniu do otrzymywania danych na bieżąco, takie jak konieczność określenia, jaki okres czasu i jakie parametry wykorzystać dla każdego żądania API. Jeśli okresy czasu nie są idealnie dopasowane, ryzykujesz utratę danych, a jeśli okresy czasu zachodzą na siebie, musisz poradzić sobie z duplikatami danych. Dzięki webhookom w czasie rzeczywistym, dane o zdarzeniach są po prostu przesyłane do twojego punktu końcowego w miarę ich dostępności w Bird.

Chociaż korzyści z otrzymywania danych o zdarzeniach w czasie rzeczywistym, aby napędzać procesy automatyzacji w dół, mogą być natychmiastowo zrozumiane przez wielu nadawców, rzeczywisty proces wdrażania i konsumowania webhooków może być onieśmielający. Może to być szczególnie prawdą, jeśli nie znasz technicznych elementów tworzenia punktu końcowego i programowego obsługiwania danych. Istnieją usługi, które będą konsumować dane webhooka Bird i ETL do twojej bazy danych automatycznie – przykładem może być StitchData, o którym pisaliśmy w przeszłości.  Jednak jeśli chcesz mieć większą kontrolę nad procesem, możesz łatwo zbudować komponenty samodzielnie. Poniżej znajduje się prosty przewodnik, który pomoże nadawcom poczuć się komfortowo przy tworzeniu webhooka zdarzeń Bird i konsumowaniu danych przy użyciu infrastruktury w AWS.

Webhooki zdarzeń w czasie rzeczywistym Bird są niezwykle cennym narzędziem dla nadawców, aby mieć dane automatycznie przesyłane do ich systemów. Może to napędzać automatyzację w dół, taką jak aktualizacja list mailingowych, uruchamianie zautomatyzowanych podróży e-mailowych lub wypełnianie wewnętrznych pulpitów. Chociaż te same dane o zdarzeniach można uzyskać za pośrednictwem interfejsu użytkownika Bird, korzystając z Wyszukiwania zdarzeń, lub programowo, wykorzystując Interfejs API zdarzeń Bird, ograniczenia dotyczące liczby rekordów zwracanych w jednym żądaniu lub limity szybkości na punkcie końcowym API mogą sprawić, że obie te metody będą ograniczające 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 mogą być konsumowane bez konieczności planowania zadań cron, które pobierają dane. Istnieją również logistyczne koszty związane z pobieraniem danych w porównaniu do otrzymywania danych na bieżąco, takie jak konieczność określenia, jaki okres czasu i jakie parametry wykorzystać dla każdego żądania API. Jeśli okresy czasu nie są idealnie dopasowane, ryzykujesz utratę danych, a jeśli okresy czasu zachodzą na siebie, musisz poradzić sobie z duplikatami danych. Dzięki webhookom w czasie rzeczywistym, dane o zdarzeniach są po prostu przesyłane do twojego punktu końcowego w miarę ich dostępności w Bird.

Chociaż korzyści z otrzymywania danych o zdarzeniach w czasie rzeczywistym, aby napędzać procesy automatyzacji w dół, mogą być natychmiastowo zrozumiane przez wielu nadawców, rzeczywisty proces wdrażania i konsumowania webhooków może być onieśmielający. Może to być szczególnie prawdą, jeśli nie znasz technicznych elementów tworzenia punktu końcowego i programowego obsługiwania danych. Istnieją usługi, które będą konsumować dane webhooka Bird i ETL do twojej bazy danych automatycznie – przykładem może być StitchData, o którym pisaliśmy w przeszłości.  Jednak jeśli chcesz mieć większą kontrolę nad procesem, możesz łatwo zbudować komponenty samodzielnie. Poniżej znajduje się prosty przewodnik, który pomoże nadawcom poczuć się komfortowo przy tworzeniu webhooka zdarzeń Bird i konsumowaniu danych przy użyciu infrastruktury w AWS.

Konfigurowanie punktu docelowego webhooka

Kiedy zdarzenie Bird zostaje utworzone, chcemy, aby dane tego zdarzenia były przesyłane w czasie rzeczywistym do punktu końcowego w AWS, abyśmy mogli programowo konsumować i używać tych danych. Dane będą wysyłane z Bird do docelowego punktu końcowego, który przekaże ładunek do funkcji lambda, która przetworzy i przechowa dane w zbiorniku 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)'.


Komponent

Odpowiedzialność

Webhooks Bird

Emituj partie zdarzeń w czasie rzeczywistym jako żądania HTTP POST

Application Load Balancer

Odbieraj zewnętrzny ruch webhooków i kieruj żądania

Lambda (Konsument)

Efektywnie przechowuj surowe partie webhooków w S3

Amazon S3

Przechowuj pakowane ładunki zdarzeń jako płaskie pliki JSON

Lambda (Procesor)

Asynchronicznie przekształcaj lub ładuj przechowywane dane

Aby wdrożyć ten workflow, zbudujmy je w odwrotnej kolejności, zaczynając od utworzenia zbiornika S3, w którym przechowamy nasze dane wydarzeń, a następnie pracując wstecz – dodając każdy komponent, który wprowadza do tego, co zbudowaliśmy.

Kiedy zdarzenie Bird zostaje utworzone, chcemy, aby dane tego zdarzenia były przesyłane w czasie rzeczywistym do punktu końcowego w AWS, abyśmy mogli programowo konsumować i używać tych danych. Dane będą wysyłane z Bird do docelowego punktu końcowego, który przekaże ładunek do funkcji lambda, która przetworzy i przechowa dane w zbiorniku 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)'.


Komponent

Odpowiedzialność

Webhooks Bird

Emituj partie zdarzeń w czasie rzeczywistym jako żądania HTTP POST

Application Load Balancer

Odbieraj zewnętrzny ruch webhooków i kieruj żądania

Lambda (Konsument)

Efektywnie przechowuj surowe partie webhooków w S3

Amazon S3

Przechowuj pakowane ładunki zdarzeń jako płaskie pliki JSON

Lambda (Procesor)

Asynchronicznie przekształcaj lub ładuj przechowywane dane

Aby wdrożyć ten workflow, zbudujmy je w odwrotnej kolejności, zaczynając od utworzenia zbiornika S3, w którym przechowamy nasze dane wydarzeń, a następnie pracując wstecz – dodając każdy komponent, który wprowadza do tego, co zbudowaliśmy.

Kiedy zdarzenie Bird zostaje utworzone, chcemy, aby dane tego zdarzenia były przesyłane w czasie rzeczywistym do punktu końcowego w AWS, abyśmy mogli programowo konsumować i używać tych danych. Dane będą wysyłane z Bird do docelowego punktu końcowego, który przekaże ładunek do funkcji lambda, która przetworzy i przechowa dane w zbiorniku 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)'.


Komponent

Odpowiedzialność

Webhooks Bird

Emituj partie zdarzeń w czasie rzeczywistym jako żądania HTTP POST

Application Load Balancer

Odbieraj zewnętrzny ruch webhooków i kieruj żądania

Lambda (Konsument)

Efektywnie przechowuj surowe partie webhooków w S3

Amazon S3

Przechowuj pakowane ładunki zdarzeń jako płaskie pliki JSON

Lambda (Procesor)

Asynchronicznie przekształcaj lub ładuj przechowywane dane

Aby wdrożyć ten workflow, zbudujmy je w odwrotnej kolejności, zaczynając od utworzenia zbiornika S3, w którym przechowamy nasze dane wydarzeń, a następnie pracując wstecz – dodając każdy komponent, który wprowadza do tego, co zbudowaliśmy.

Utwórz bucket S3, aby przechować dane webhooka

Przed utworzeniem naszego load balancera do akceptowania danych, lub naszej funkcji lambda do przechowywania danych, musimy najpierw utworzyć nasz koszyk S3, w którym dane będą przechowywane. Podczas gdy S3 zapewnia doskonałe przechowywanie danych webhooków, organizacje korzystające również z baz danych PostgreSQL do przetwarzania zdarzeń powinny wdrożyć odpowiednie procedury tworzenia kopii zapasowych i przywracania, aby chronić swoje zorganizowane dane obok swojej strategii przechowywania S3. Aby to zrobić, przejdź do usługi S3 w AWS i naciśnij „Utwórz koszyk”. Zostaniesz poproszony o nadanie nazwy swojemu koszykowi i ustawienie regionu – upewnij się, że używasz tego samego regionu co twój ALB i funkcja lambda. Kiedy twój koszyk S3 zostanie utworzony, będzie pusty – jeśli chciałbyś zorganizować dane w folderze, możesz teraz utworzyć zamierzony katalog, lub katalog zostanie utworzony, gdy twoja funkcja lambda zapisze plik. W tym przykładzie nazwaliśmy nasz koszyk S3 „bird-webhooks” i utworzyliśmy folder o nazwie „Dane Wydarzenia B”, aby przechować nasze dane wydarzeń – zobaczysz te nazwy odniesione w naszej funkcji lambda poniżej.

Przed utworzeniem naszego load balancera do akceptowania danych, lub naszej funkcji lambda do przechowywania danych, musimy najpierw utworzyć nasz koszyk S3, w którym dane będą przechowywane. Podczas gdy S3 zapewnia doskonałe przechowywanie danych webhooków, organizacje korzystające również z baz danych PostgreSQL do przetwarzania zdarzeń powinny wdrożyć odpowiednie procedury tworzenia kopii zapasowych i przywracania, aby chronić swoje zorganizowane dane obok swojej strategii przechowywania S3. Aby to zrobić, przejdź do usługi S3 w AWS i naciśnij „Utwórz koszyk”. Zostaniesz poproszony o nadanie nazwy swojemu koszykowi i ustawienie regionu – upewnij się, że używasz tego samego regionu co twój ALB i funkcja lambda. Kiedy twój koszyk S3 zostanie utworzony, będzie pusty – jeśli chciałbyś zorganizować dane w folderze, możesz teraz utworzyć zamierzony katalog, lub katalog zostanie utworzony, gdy twoja funkcja lambda zapisze plik. W tym przykładzie nazwaliśmy nasz koszyk S3 „bird-webhooks” i utworzyliśmy folder o nazwie „Dane Wydarzenia B”, aby przechować nasze dane wydarzeń – zobaczysz te nazwy odniesione w naszej funkcji lambda poniżej.

Przed utworzeniem naszego load balancera do akceptowania danych, lub naszej funkcji lambda do przechowywania danych, musimy najpierw utworzyć nasz koszyk S3, w którym dane będą przechowywane. Podczas gdy S3 zapewnia doskonałe przechowywanie danych webhooków, organizacje korzystające również z baz danych PostgreSQL do przetwarzania zdarzeń powinny wdrożyć odpowiednie procedury tworzenia kopii zapasowych i przywracania, aby chronić swoje zorganizowane dane obok swojej strategii przechowywania S3. Aby to zrobić, przejdź do usługi S3 w AWS i naciśnij „Utwórz koszyk”. Zostaniesz poproszony o nadanie nazwy swojemu koszykowi i ustawienie regionu – upewnij się, że używasz tego samego regionu co twój ALB i funkcja lambda. Kiedy twój koszyk S3 zostanie utworzony, będzie pusty – jeśli chciałbyś zorganizować dane w folderze, możesz teraz utworzyć zamierzony katalog, lub katalog zostanie utworzony, gdy twoja funkcja lambda zapisze plik. W tym przykładzie nazwaliśmy nasz koszyk S3 „bird-webhooks” i utworzyliśmy folder o nazwie „Dane Wydarzenia B”, aby przechować nasze dane wydarzeń – zobaczysz te nazwy odniesione w naszej funkcji lambda poniżej.

Utwórz funkcję Lambda, aby przetwarzać dane

Rzeczywiste przetwarzanie i przechowywanie danych będzie realizowane przez funkcję lambda, która jest wywoływana przez nasz load balancer aplikacji (ALB). 

Pierwszym krokiem jest stworzenie twojej funkcji lambda poprzez przejście do usługi Lambda w AWS i kliknięcie „Utwórz funkcję”. Zostaniesz poproszony o nadanie nazwy swojej funkcji lambda oraz wybranie, w jakim języku programowania napisać swoją funkcję. W tym przykładzie używamy Pythona jako języka uruchomieniowego.

Teraz musimy opracować naszą funkcję lambda. Na chwilę załóżmy, że nasz load balancer aplikacji został skonfigurowany i przesyła ładunek webhooka do naszej funkcji lambda – lambda otrzyma ładunek zawierający pełne nagłówki i treść. Ładunek jest przekazywany do naszej funkcji lambda przy użyciu obiektu „event” jako słownika. Możesz odwoływać się do nagłówków i treści ładunku niezależnie, uzyskując dostęp do obiektów „headers” i „body” w ładunku. W tym przykładzie po prostu odczytamy nagłówek „x-messagesystems-batch-id”, gdzie identyfikator wsadu jest unikalną wartością utworzoną przez Bird dla wsadu webhooka, i użyjemy go jako nazwy pliku podczas przechowywania treści jako pliku płaskiego w S3; jednak możesz chcieć dodać dodatkowe funkcjonalności, takie jak kontrole uwierzytelniania lub obsługę błędów, w razie potrzeby.

Przechowując ładunek w pliku płaskim na S3, będziemy musieli określić nazwę wiadra S3, lokalizację i nazwę pliku, w którym dane ładunku będą przechowywane. W naszej przykładowej funkcji lambda robimy to w funkcji „store_batch”. W tym przykładzie zamierzamy przechować cały wsad jako jeden plik, co pomaga zapewnić, że dane są zbierane i przechowywane zanim połączenie HTTP między Bird a twoim punktem końcowym wygaśnie. Choć możesz dostosować ustawienia czasu oczekiwania połączenia na swoim load balancerze, nie ma gwarancji, że połączenie nie wygasnie po stronie przesyłania (w tym przypadku Bird) ani że połączenie nie zostanie przerwane, zanim twoja funkcja lambda zakończy wykonywanie. Najlepszą praktyką jest utrzymanie funkcji konsumenta jak najbardziej efektywnej i zarezerwowanie działań przetwarzania danych dla dalszych procesów, gdzie to możliwe – jak konwersja zbiorczego ładunku w formacie JSON na plik CSV lub ł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. Najlepszą praktyką jest przestrzeganie zasady minimalnych uprawnień, więc zalecam ustawienie tych uprawnień tylko dla wiadra S3, w którym będą przechowywane ładunki webhooków.

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

Jako szybka uwaga dotycząca identyfikatora wsadu:  Bird grupuje zdarzenia w jeden ładunek, gdzie każdy wsad może zawierać od 1 do 350 lub więcej rekordów zdarzeń.  Wsad otrzyma unikalny identyfikator wsadu, który można wykorzystać do wyświetlenia statusu wsadu, korzystając z API Webhooks Zdarzeń lub w twoim koncie Bird, klikając na strumień webhooków i wybierając „Status wsadu.” W przypadku, gdy ładunek webhooka nie mógł zostać dostarczony, na przykład podczas przekroczenia czasu połączenia, Bird automatycznie ponowi próbę wsadu używając tego samego identyfikatora wsadu. Może to się zdarzyć, gdy twoja funkcja lambda działa blisko maksymalnego czasu odpowiedzi wynoszącego 10 sekund i jest to powód do optymalizacji funkcji konsumenta w celu skrócenia czasu wykonania.

Aby obsłużyć wszystkie działania przetwarzania danych, zalecam utworzenie osobnej funkcji lambda, która będzie uruchamiana za każdym razem, gdy nowy plik zostanie utworzony w wiadrze S3 – dzięki temu przetwarzanie danych jest realizowane asynchronicznie w stosunku do transmisji danych i nie ma ryzyka utraty danych z powodu przerwanego połączenia. Omówię funkcję przetwarzającą lambda w późniejszej części.

Rzeczywiste przetwarzanie i przechowywanie danych będzie realizowane przez funkcję lambda, która jest wywoływana przez nasz load balancer aplikacji (ALB). 

Pierwszym krokiem jest stworzenie twojej funkcji lambda poprzez przejście do usługi Lambda w AWS i kliknięcie „Utwórz funkcję”. Zostaniesz poproszony o nadanie nazwy swojej funkcji lambda oraz wybranie, w jakim języku programowania napisać swoją funkcję. W tym przykładzie używamy Pythona jako języka uruchomieniowego.

Teraz musimy opracować naszą funkcję lambda. Na chwilę załóżmy, że nasz load balancer aplikacji został skonfigurowany i przesyła ładunek webhooka do naszej funkcji lambda – lambda otrzyma ładunek zawierający pełne nagłówki i treść. Ładunek jest przekazywany do naszej funkcji lambda przy użyciu obiektu „event” jako słownika. Możesz odwoływać się do nagłówków i treści ładunku niezależnie, uzyskując dostęp do obiektów „headers” i „body” w ładunku. W tym przykładzie po prostu odczytamy nagłówek „x-messagesystems-batch-id”, gdzie identyfikator wsadu jest unikalną wartością utworzoną przez Bird dla wsadu webhooka, i użyjemy go jako nazwy pliku podczas przechowywania treści jako pliku płaskiego w S3; jednak możesz chcieć dodać dodatkowe funkcjonalności, takie jak kontrole uwierzytelniania lub obsługę błędów, w razie potrzeby.

Przechowując ładunek w pliku płaskim na S3, będziemy musieli określić nazwę wiadra S3, lokalizację i nazwę pliku, w którym dane ładunku będą przechowywane. W naszej przykładowej funkcji lambda robimy to w funkcji „store_batch”. W tym przykładzie zamierzamy przechować cały wsad jako jeden plik, co pomaga zapewnić, że dane są zbierane i przechowywane zanim połączenie HTTP między Bird a twoim punktem końcowym wygaśnie. Choć możesz dostosować ustawienia czasu oczekiwania połączenia na swoim load balancerze, nie ma gwarancji, że połączenie nie wygasnie po stronie przesyłania (w tym przypadku Bird) ani że połączenie nie zostanie przerwane, zanim twoja funkcja lambda zakończy wykonywanie. Najlepszą praktyką jest utrzymanie funkcji konsumenta jak najbardziej efektywnej i zarezerwowanie działań przetwarzania danych dla dalszych procesów, gdzie to możliwe – jak konwersja zbiorczego ładunku w formacie JSON na plik CSV lub ł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. Najlepszą praktyką jest przestrzeganie zasady minimalnych uprawnień, więc zalecam ustawienie tych uprawnień tylko dla wiadra S3, w którym będą przechowywane ładunki webhooków.

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

Jako szybka uwaga dotycząca identyfikatora wsadu:  Bird grupuje zdarzenia w jeden ładunek, gdzie każdy wsad może zawierać od 1 do 350 lub więcej rekordów zdarzeń.  Wsad otrzyma unikalny identyfikator wsadu, który można wykorzystać do wyświetlenia statusu wsadu, korzystając z API Webhooks Zdarzeń lub w twoim koncie Bird, klikając na strumień webhooków i wybierając „Status wsadu.” W przypadku, gdy ładunek webhooka nie mógł zostać dostarczony, na przykład podczas przekroczenia czasu połączenia, Bird automatycznie ponowi próbę wsadu używając tego samego identyfikatora wsadu. Może to się zdarzyć, gdy twoja funkcja lambda działa blisko maksymalnego czasu odpowiedzi wynoszącego 10 sekund i jest to powód do optymalizacji funkcji konsumenta w celu skrócenia czasu wykonania.

Aby obsłużyć wszystkie działania przetwarzania danych, zalecam utworzenie osobnej funkcji lambda, która będzie uruchamiana za każdym razem, gdy nowy plik zostanie utworzony w wiadrze S3 – dzięki temu przetwarzanie danych jest realizowane asynchronicznie w stosunku do transmisji danych i nie ma ryzyka utraty danych z powodu przerwanego połączenia. Omówię funkcję przetwarzającą lambda w późniejszej części.

Rzeczywiste przetwarzanie i przechowywanie danych będzie realizowane przez funkcję lambda, która jest wywoływana przez nasz load balancer aplikacji (ALB). 

Pierwszym krokiem jest stworzenie twojej funkcji lambda poprzez przejście do usługi Lambda w AWS i kliknięcie „Utwórz funkcję”. Zostaniesz poproszony o nadanie nazwy swojej funkcji lambda oraz wybranie, w jakim języku programowania napisać swoją funkcję. W tym przykładzie używamy Pythona jako języka uruchomieniowego.

Teraz musimy opracować naszą funkcję lambda. Na chwilę załóżmy, że nasz load balancer aplikacji został skonfigurowany i przesyła ładunek webhooka do naszej funkcji lambda – lambda otrzyma ładunek zawierający pełne nagłówki i treść. Ładunek jest przekazywany do naszej funkcji lambda przy użyciu obiektu „event” jako słownika. Możesz odwoływać się do nagłówków i treści ładunku niezależnie, uzyskując dostęp do obiektów „headers” i „body” w ładunku. W tym przykładzie po prostu odczytamy nagłówek „x-messagesystems-batch-id”, gdzie identyfikator wsadu jest unikalną wartością utworzoną przez Bird dla wsadu webhooka, i użyjemy go jako nazwy pliku podczas przechowywania treści jako pliku płaskiego w S3; jednak możesz chcieć dodać dodatkowe funkcjonalności, takie jak kontrole uwierzytelniania lub obsługę błędów, w razie potrzeby.

Przechowując ładunek w pliku płaskim na S3, będziemy musieli określić nazwę wiadra S3, lokalizację i nazwę pliku, w którym dane ładunku będą przechowywane. W naszej przykładowej funkcji lambda robimy to w funkcji „store_batch”. W tym przykładzie zamierzamy przechować cały wsad jako jeden plik, co pomaga zapewnić, że dane są zbierane i przechowywane zanim połączenie HTTP między Bird a twoim punktem końcowym wygaśnie. Choć możesz dostosować ustawienia czasu oczekiwania połączenia na swoim load balancerze, nie ma gwarancji, że połączenie nie wygasnie po stronie przesyłania (w tym przypadku Bird) ani że połączenie nie zostanie przerwane, zanim twoja funkcja lambda zakończy wykonywanie. Najlepszą praktyką jest utrzymanie funkcji konsumenta jak najbardziej efektywnej i zarezerwowanie działań przetwarzania danych dla dalszych procesów, gdzie to możliwe – jak konwersja zbiorczego ładunku w formacie JSON na plik CSV lub ł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. Najlepszą praktyką jest przestrzeganie zasady minimalnych uprawnień, więc zalecam ustawienie tych uprawnień tylko dla wiadra S3, w którym będą przechowywane ładunki webhooków.

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

Jako szybka uwaga dotycząca identyfikatora wsadu:  Bird grupuje zdarzenia w jeden ładunek, gdzie każdy wsad może zawierać od 1 do 350 lub więcej rekordów zdarzeń.  Wsad otrzyma unikalny identyfikator wsadu, który można wykorzystać do wyświetlenia statusu wsadu, korzystając z API Webhooks Zdarzeń lub w twoim koncie Bird, klikając na strumień webhooków i wybierając „Status wsadu.” W przypadku, gdy ładunek webhooka nie mógł zostać dostarczony, na przykład podczas przekroczenia czasu połączenia, Bird automatycznie ponowi próbę wsadu używając tego samego identyfikatora wsadu. Może to się zdarzyć, gdy twoja funkcja lambda działa blisko maksymalnego czasu odpowiedzi wynoszącego 10 sekund i jest to powód do optymalizacji funkcji konsumenta w celu skrócenia czasu wykonania.

Aby obsłużyć wszystkie działania przetwarzania danych, zalecam utworzenie osobnej funkcji lambda, która będzie uruchamiana za każdym razem, gdy nowy plik zostanie utworzony w wiadrze S3 – dzięki temu przetwarzanie danych jest realizowane asynchronicznie w stosunku do transmisji danych i nie ma ryzyka utraty danych z powodu przerwanego połączenia. Omówię funkcję przetwarzającą lambda w późniejszej części.

Utwórz Load Balancer aplikacji

Aby otrzymać ładunek webhooka, musimy dostarczyć punkt końcowy, do którego będzie wysyłany ładunek. Robimy to, tworząc równoważnik obciążenia aplikacji w AWS, przechodząc do EC2 > Równoważniki obciążenia i klikając „Utwórz równoważnik obciążenia”. Zostaniesz poproszony o wybranie, jaki typ równoważnika obciążenia chcesz utworzyć – w tym przypadku chcemy utworzyć równoważnik obciążenia aplikacji. Musimy użyć równoważnika obciążenia aplikacji (ALB), aby zbudować naszego konsumenta, ponieważ zdarzenia webhook będą wysyłane jako żądanie HTTP, a ALB są używane do routingu żądań HTTP w AWS. Możemy wdrożyć bramkę HTTP jako alternatywę; jednak wykorzystujemy ALB w tym projekcie, ponieważ jest on bardziej wydajny i kosztowo efektywny niż bramka HTTP. Ważne jest, aby zauważyć, że jeśli zdecydujesz się na użycie bramki HTTP, format zdarzenia może być inny niż w przypadku ALB, a zatem twoja funkcja lambda będzie musiała odpowiednio obsłużyć obiekt żądania.

Gdy twój ALB zostanie utworzony, zostaniesz poproszony o przypisanie nazwy do swojego ALB oraz skonfigurowanie schematu i ustawień dostępu/bezpieczeństwa – ponieważ planujemy otrzymać dane zdarzeń z zewnętrznego źródła (Bird), chcemy, aby nasz ALB był dostępny w Internecie.   Pod „Nasłuchiwacze i routowanie” ALB powinien nasłuchiwać HTTPS na porcie 443, a chcemy utworzyć grupę docelową, która wskazuje na naszą funkcję lambda, aby nasz ALB mógł przekazywać przychodzące żądania do funkcji lambda konsumenta, którą utworzyliśmy powyżej.   Musisz również upewnić się, że grupa zabezpieczeń ma uprawnienie do akceptowania ruchu przez port 443.

Aby otrzymać ładunek webhooka, musimy dostarczyć punkt końcowy, do którego będzie wysyłany ładunek. Robimy to, tworząc równoważnik obciążenia aplikacji w AWS, przechodząc do EC2 > Równoważniki obciążenia i klikając „Utwórz równoważnik obciążenia”. Zostaniesz poproszony o wybranie, jaki typ równoważnika obciążenia chcesz utworzyć – w tym przypadku chcemy utworzyć równoważnik obciążenia aplikacji. Musimy użyć równoważnika obciążenia aplikacji (ALB), aby zbudować naszego konsumenta, ponieważ zdarzenia webhook będą wysyłane jako żądanie HTTP, a ALB są używane do routingu żądań HTTP w AWS. Możemy wdrożyć bramkę HTTP jako alternatywę; jednak wykorzystujemy ALB w tym projekcie, ponieważ jest on bardziej wydajny i kosztowo efektywny niż bramka HTTP. Ważne jest, aby zauważyć, że jeśli zdecydujesz się na użycie bramki HTTP, format zdarzenia może być inny niż w przypadku ALB, a zatem twoja funkcja lambda będzie musiała odpowiednio obsłużyć obiekt żądania.

Gdy twój ALB zostanie utworzony, zostaniesz poproszony o przypisanie nazwy do swojego ALB oraz skonfigurowanie schematu i ustawień dostępu/bezpieczeństwa – ponieważ planujemy otrzymać dane zdarzeń z zewnętrznego źródła (Bird), chcemy, aby nasz ALB był dostępny w Internecie.   Pod „Nasłuchiwacze i routowanie” ALB powinien nasłuchiwać HTTPS na porcie 443, a chcemy utworzyć grupę docelową, która wskazuje na naszą funkcję lambda, aby nasz ALB mógł przekazywać przychodzące żądania do funkcji lambda konsumenta, którą utworzyliśmy powyżej.   Musisz również upewnić się, że grupa zabezpieczeń ma uprawnienie do akceptowania ruchu przez port 443.

Aby otrzymać ładunek webhooka, musimy dostarczyć punkt końcowy, do którego będzie wysyłany ładunek. Robimy to, tworząc równoważnik obciążenia aplikacji w AWS, przechodząc do EC2 > Równoważniki obciążenia i klikając „Utwórz równoważnik obciążenia”. Zostaniesz poproszony o wybranie, jaki typ równoważnika obciążenia chcesz utworzyć – w tym przypadku chcemy utworzyć równoważnik obciążenia aplikacji. Musimy użyć równoważnika obciążenia aplikacji (ALB), aby zbudować naszego konsumenta, ponieważ zdarzenia webhook będą wysyłane jako żądanie HTTP, a ALB są używane do routingu żądań HTTP w AWS. Możemy wdrożyć bramkę HTTP jako alternatywę; jednak wykorzystujemy ALB w tym projekcie, ponieważ jest on bardziej wydajny i kosztowo efektywny niż bramka HTTP. Ważne jest, aby zauważyć, że jeśli zdecydujesz się na użycie bramki HTTP, format zdarzenia może być inny niż w przypadku ALB, a zatem twoja funkcja lambda będzie musiała odpowiednio obsłużyć obiekt żądania.

Gdy twój ALB zostanie utworzony, zostaniesz poproszony o przypisanie nazwy do swojego ALB oraz skonfigurowanie schematu i ustawień dostępu/bezpieczeństwa – ponieważ planujemy otrzymać dane zdarzeń z zewnętrznego źródła (Bird), chcemy, aby nasz ALB był dostępny w Internecie.   Pod „Nasłuchiwacze i routowanie” ALB powinien nasłuchiwać HTTPS na porcie 443, a chcemy utworzyć grupę docelową, która wskazuje na naszą funkcję lambda, aby nasz ALB mógł przekazywać przychodzące żądania do funkcji lambda konsumenta, którą utworzyliśmy powyżej.   Musisz również upewnić się, że grupa zabezpieczeń ma uprawnienie do akceptowania ruchu przez port 443.

Utwórz rekord DNS dla load balancera

Aby ułatwić korzystanie z naszego ALB jako punktu końcowego, stworzymy rekord A w DNS, który wskazuje na nasze ALB. W tym celu możemy skorzystać z usługi AWS Route 53 (lub twojego obecnego dostawcy DNS) i utworzyć rekord A dla nazwy hosta, którego chcesz użyć jako punktu końcowego (np. spevents.<twoja_domena>). Pracując z DNS na dużą skalę w AWS, należy pamiętać, że istnieją nieudokumentowane limity DNS, które mogą wpływać na aplikacje o dużej objętości, w szczególności te obsługujące duże ilości ruchu wychodzącego, takie jak systemy dostarczania e-maili. Rekord A powinien być skonfigurowany tak, aby wskazywał na ALB, które stworzyliśmy. Jeśli używasz Route 53 do zarządzania rekordami DNS, możesz bezpośrednio odwołać się do instancji ALB, włączając “Alias” i wybierając ALB; w przeciwnym razie, jeśli korzystasz z zewnętrznego dostawcy DNS, powinieneś skierować rekord A na publiczny adres IP instancji ALB.

Rekomenduję użycie narzędzia takiego jak Postman, aby przetestować, czy wszystko zostało skonfigurowane poprawnie przed włączeniem swojego webhooka Bird. Możesz wysłać żądanie POST do swojego punktu końcowego i potwierdzić, że otrzymano odpowiedź. Jeśli twoje żądanie POST nie zwraca odpowiedzi, być może musisz ponownie sprawdzić, czy twoje ALB nasłuchuje na odpowiednim porcie.

Aby ułatwić korzystanie z naszego ALB jako punktu końcowego, stworzymy rekord A w DNS, który wskazuje na nasze ALB. W tym celu możemy skorzystać z usługi AWS Route 53 (lub twojego obecnego dostawcy DNS) i utworzyć rekord A dla nazwy hosta, którego chcesz użyć jako punktu końcowego (np. spevents.<twoja_domena>). Pracując z DNS na dużą skalę w AWS, należy pamiętać, że istnieją nieudokumentowane limity DNS, które mogą wpływać na aplikacje o dużej objętości, w szczególności te obsługujące duże ilości ruchu wychodzącego, takie jak systemy dostarczania e-maili. Rekord A powinien być skonfigurowany tak, aby wskazywał na ALB, które stworzyliśmy. Jeśli używasz Route 53 do zarządzania rekordami DNS, możesz bezpośrednio odwołać się do instancji ALB, włączając “Alias” i wybierając ALB; w przeciwnym razie, jeśli korzystasz z zewnętrznego dostawcy DNS, powinieneś skierować rekord A na publiczny adres IP instancji ALB.

Rekomenduję użycie narzędzia takiego jak Postman, aby przetestować, czy wszystko zostało skonfigurowane poprawnie przed włączeniem swojego webhooka Bird. Możesz wysłać żądanie POST do swojego punktu końcowego i potwierdzić, że otrzymano odpowiedź. Jeśli twoje żądanie POST nie zwraca odpowiedzi, być może musisz ponownie sprawdzić, czy twoje ALB nasłuchuje na odpowiednim porcie.

Aby ułatwić korzystanie z naszego ALB jako punktu końcowego, stworzymy rekord A w DNS, który wskazuje na nasze ALB. W tym celu możemy skorzystać z usługi AWS Route 53 (lub twojego obecnego dostawcy DNS) i utworzyć rekord A dla nazwy hosta, którego chcesz użyć jako punktu końcowego (np. spevents.<twoja_domena>). Pracując z DNS na dużą skalę w AWS, należy pamiętać, że istnieją nieudokumentowane limity DNS, które mogą wpływać na aplikacje o dużej objętości, w szczególności te obsługujące duże ilości ruchu wychodzącego, takie jak systemy dostarczania e-maili. Rekord A powinien być skonfigurowany tak, aby wskazywał na ALB, które stworzyliśmy. Jeśli używasz Route 53 do zarządzania rekordami DNS, możesz bezpośrednio odwołać się do instancji ALB, włączając “Alias” i wybierając ALB; w przeciwnym razie, jeśli korzystasz z zewnętrznego dostawcy DNS, powinieneś skierować rekord A na publiczny adres IP instancji ALB.

Rekomenduję użycie narzędzia takiego jak Postman, aby przetestować, czy wszystko zostało skonfigurowane poprawnie przed włączeniem swojego webhooka Bird. Możesz wysłać żądanie POST do swojego punktu końcowego i potwierdzić, że otrzymano odpowiedź. Jeśli twoje żądanie POST nie zwraca odpowiedzi, być może musisz ponownie sprawdzić, czy twoje ALB nasłuchuje na odpowiednim porcie.

Utwórz webhook dla ptaków

Teraz jesteśmy gotowi do utworzenia webhooka w Bird i użycia nazwy hosta zdefiniowanej przez rekord A jako nasz docelowy punkt końcowy. Aby utworzyć webhook, przejdź do sekcji Webhooki w swoim koncie Bird i kliknij „Utwórz webhook.” Zostaniesz poproszony o przypisanie nazwy do swojego webhooka oraz podanie adresu URL docelowego – powinien to być nazwa hosta rekordu A, który utworzyłeś wcześniej. Zauważ, że adres URL docelowy może wymagać, aby „HTTPS://” został uwzględniony w adresie URL.  

Po zakończeniu sprawdź, czy wybrano poprawne subkonto i zdarzenia, a następnie naciśnij „Utwórz webhook”, aby zapisać swoją konfigurację. Dane zdarzeń dla wszystkich wybranych typów zdarzeń będą teraz przesyłane do naszego adresu URL docelowego i będą przetwarzane przez nasz ALB w celu dalszego przetwarzania.

Teraz jesteśmy gotowi do utworzenia webhooka w Bird i użycia nazwy hosta zdefiniowanej przez rekord A jako nasz docelowy punkt końcowy. Aby utworzyć webhook, przejdź do sekcji Webhooki w swoim koncie Bird i kliknij „Utwórz webhook.” Zostaniesz poproszony o przypisanie nazwy do swojego webhooka oraz podanie adresu URL docelowego – powinien to być nazwa hosta rekordu A, który utworzyłeś wcześniej. Zauważ, że adres URL docelowy może wymagać, aby „HTTPS://” został uwzględniony w adresie URL.  

Po zakończeniu sprawdź, czy wybrano poprawne subkonto i zdarzenia, a następnie naciśnij „Utwórz webhook”, aby zapisać swoją konfigurację. Dane zdarzeń dla wszystkich wybranych typów zdarzeń będą teraz przesyłane do naszego adresu URL docelowego i będą przetwarzane przez nasz ALB w celu dalszego przetwarzania.

Teraz jesteśmy gotowi do utworzenia webhooka w Bird i użycia nazwy hosta zdefiniowanej przez rekord A jako nasz docelowy punkt końcowy. Aby utworzyć webhook, przejdź do sekcji Webhooki w swoim koncie Bird i kliknij „Utwórz webhook.” Zostaniesz poproszony o przypisanie nazwy do swojego webhooka oraz podanie adresu URL docelowego – powinien to być nazwa hosta rekordu A, który utworzyłeś wcześniej. Zauważ, że adres URL docelowy może wymagać, aby „HTTPS://” został uwzględniony w adresie URL.  

Po zakończeniu sprawdź, czy wybrano poprawne subkonto i zdarzenia, a następnie naciśnij „Utwórz webhook”, aby zapisać swoją konfigurację. Dane zdarzeń dla wszystkich wybranych typów zdarzeń będą teraz przesyłane do naszego adresu URL docelowego i będą przetwarzane przez nasz ALB w celu dalszego przetwarzania.

Przetwarzanie danych zdarzeń webhook

W zależności od zamierzonego celu przechowywania danych zdarzeń ptaków, twoje wymagania mogą zostać spełnione poprzez proste przechowywanie ładunku JSON w formie pliku płaskiego. Możesz również mieć już ustalony proces ETL downstream, który jest zdolny do konsumowania i ładowania danych w formacie JSON. W obu tych przypadkach, być może będziesz mógł użyć pliku płaskiego stworzonego przez nasze lambda przetwarzanie, które stworzyliśmy powyżej, bez zmian.

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

W zależności od zamierzonego celu przechowywania danych zdarzeń ptaków, twoje wymagania mogą zostać spełnione poprzez proste przechowywanie ładunku JSON w formie pliku płaskiego. Możesz również mieć już ustalony proces ETL downstream, który jest zdolny do konsumowania i ładowania danych w formacie JSON. W obu tych przypadkach, być może będziesz mógł użyć pliku płaskiego stworzonego przez nasze lambda przetwarzanie, które stworzyliśmy powyżej, bez zmian.

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

W zależności od zamierzonego celu przechowywania danych zdarzeń ptaków, twoje wymagania mogą zostać spełnione poprzez proste przechowywanie ładunku JSON w formie pliku płaskiego. Możesz również mieć już ustalony proces ETL downstream, który jest zdolny do konsumowania i ładowania danych w formacie JSON. W obu tych przypadkach, być może będziesz mógł użyć pliku płaskiego stworzonego przez nasze lambda przetwarzanie, które stworzyliśmy powyżej, bez zmian.

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

Utwórz Lambdę do przetwarzania danych

Podobnie jak w przypadku funkcji lambda do przetwarzania danych webhooka, musimy utworzyć nową funkcję lambda, przechodząc do usługi Lambda w AWS i naciskając „Utwórz funkcję”. Ta nowa funkcja lambda zostanie uruchomiona, gdy nowy plik zostanie utworzony w naszym koszu S3 – odczyta dane i przekształci je w nowy plik csv.  

Funkcja lambda przyjmuje informacje o pliku jako zdarzenie. W przykładowej funkcji lambda zobaczysz, że najpierw mamy szereg sprawdzeń walidacyjnych, aby upewnić się, że dane są kompletne i sformatowane zgodnie z oczekiwaniami. Następnie przekształcamy ładunek JSON w plik CSV, korzystając z biblioteki „csv” i zapisując go do pliku tymczasowego. Funkcje lambda mogą zapisywać lokalne pliki tylko w katalogu „/tmp”, więc tworzymy tymczasowy plik csv i nazywamy go według konwencji <batch_id>.csv. Powodem użycia batch_id tutaj jest po prostu zapewnienie, że wszelkie równoległe procesy uruchamiane w wyniku otrzymania wielu ładunków webhooków nie będą zakłócać się nawzajem, ponieważ każda partia webhooków będzie miała unikalny batch_id.  

Gdy dane zostaną w pełni przekształcone na CSV, odczytujemy dane CSV jako strumień bajtów, usuwamy plik tymczasowy i zapisujemy dane CSV jako nowy plik w S3. Ważne jest, aby zauważyć, że potrzebny jest inny kosz S3 do danych wyjściowych, w przeciwnym razie ryzykujemy utworzenie rekurencyjnej pętli, co może prowadzić do zwiększonego użycia lambda i zwiększonych kosztów. Musimy zidentyfikować, w którym koszu S3 i lokalizacji chcemy, aby nasz plik CSV był przechowywany w ramach naszej funkcji lambda.  Postępuj zgodnie z tym samym procedurą, co powyżej, aby utworzyć nowy kosz S3 do przechowywania naszego pliku CSV.

Uwaga, że katalog tmp jest ograniczony do 512 MB miejsca, więc ważne jest, aby plik tymczasowy został usunięty później, aby zapewnić wystarczająco miejsca na przyszłe wykonania. Powód, dla którego używamy pliku tymczasowego, zamiast pisać bezpośrednio do S3, polega na uproszczeniu połączenia z S3 poprzez posiadanie jednego żądania.

Tak jak w przypadku funkcji lambda do przetwarzania, być może trzeba będzie zaktualizować uprawnienia dla twojej funkcji lambda procesowej. Ta funkcja lambda wymaga, aby rola wykonawcza miała uprawnienia GetObject dla wejściowego kosza S3 oraz zarówno PutObject, jak i GetObject dla wyjściowego kosza S3.

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

Podobnie jak w przypadku funkcji lambda do przetwarzania danych webhooka, musimy utworzyć nową funkcję lambda, przechodząc do usługi Lambda w AWS i naciskając „Utwórz funkcję”. Ta nowa funkcja lambda zostanie uruchomiona, gdy nowy plik zostanie utworzony w naszym koszu S3 – odczyta dane i przekształci je w nowy plik csv.  

Funkcja lambda przyjmuje informacje o pliku jako zdarzenie. W przykładowej funkcji lambda zobaczysz, że najpierw mamy szereg sprawdzeń walidacyjnych, aby upewnić się, że dane są kompletne i sformatowane zgodnie z oczekiwaniami. Następnie przekształcamy ładunek JSON w plik CSV, korzystając z biblioteki „csv” i zapisując go do pliku tymczasowego. Funkcje lambda mogą zapisywać lokalne pliki tylko w katalogu „/tmp”, więc tworzymy tymczasowy plik csv i nazywamy go według konwencji <batch_id>.csv. Powodem użycia batch_id tutaj jest po prostu zapewnienie, że wszelkie równoległe procesy uruchamiane w wyniku otrzymania wielu ładunków webhooków nie będą zakłócać się nawzajem, ponieważ każda partia webhooków będzie miała unikalny batch_id.  

Gdy dane zostaną w pełni przekształcone na CSV, odczytujemy dane CSV jako strumień bajtów, usuwamy plik tymczasowy i zapisujemy dane CSV jako nowy plik w S3. Ważne jest, aby zauważyć, że potrzebny jest inny kosz S3 do danych wyjściowych, w przeciwnym razie ryzykujemy utworzenie rekurencyjnej pętli, co może prowadzić do zwiększonego użycia lambda i zwiększonych kosztów. Musimy zidentyfikować, w którym koszu S3 i lokalizacji chcemy, aby nasz plik CSV był przechowywany w ramach naszej funkcji lambda.  Postępuj zgodnie z tym samym procedurą, co powyżej, aby utworzyć nowy kosz S3 do przechowywania naszego pliku CSV.

Uwaga, że katalog tmp jest ograniczony do 512 MB miejsca, więc ważne jest, aby plik tymczasowy został usunięty później, aby zapewnić wystarczająco miejsca na przyszłe wykonania. Powód, dla którego używamy pliku tymczasowego, zamiast pisać bezpośrednio do S3, polega na uproszczeniu połączenia z S3 poprzez posiadanie jednego żądania.

Tak jak w przypadku funkcji lambda do przetwarzania, być może trzeba będzie zaktualizować uprawnienia dla twojej funkcji lambda procesowej. Ta funkcja lambda wymaga, aby rola wykonawcza miała uprawnienia GetObject dla wejściowego kosza S3 oraz zarówno PutObject, jak i GetObject dla wyjściowego kosza S3.

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

Podobnie jak w przypadku funkcji lambda do przetwarzania danych webhooka, musimy utworzyć nową funkcję lambda, przechodząc do usługi Lambda w AWS i naciskając „Utwórz funkcję”. Ta nowa funkcja lambda zostanie uruchomiona, gdy nowy plik zostanie utworzony w naszym koszu S3 – odczyta dane i przekształci je w nowy plik csv.  

Funkcja lambda przyjmuje informacje o pliku jako zdarzenie. W przykładowej funkcji lambda zobaczysz, że najpierw mamy szereg sprawdzeń walidacyjnych, aby upewnić się, że dane są kompletne i sformatowane zgodnie z oczekiwaniami. Następnie przekształcamy ładunek JSON w plik CSV, korzystając z biblioteki „csv” i zapisując go do pliku tymczasowego. Funkcje lambda mogą zapisywać lokalne pliki tylko w katalogu „/tmp”, więc tworzymy tymczasowy plik csv i nazywamy go według konwencji <batch_id>.csv. Powodem użycia batch_id tutaj jest po prostu zapewnienie, że wszelkie równoległe procesy uruchamiane w wyniku otrzymania wielu ładunków webhooków nie będą zakłócać się nawzajem, ponieważ każda partia webhooków będzie miała unikalny batch_id.  

Gdy dane zostaną w pełni przekształcone na CSV, odczytujemy dane CSV jako strumień bajtów, usuwamy plik tymczasowy i zapisujemy dane CSV jako nowy plik w S3. Ważne jest, aby zauważyć, że potrzebny jest inny kosz S3 do danych wyjściowych, w przeciwnym razie ryzykujemy utworzenie rekurencyjnej pętli, co może prowadzić do zwiększonego użycia lambda i zwiększonych kosztów. Musimy zidentyfikować, w którym koszu S3 i lokalizacji chcemy, aby nasz plik CSV był przechowywany w ramach naszej funkcji lambda.  Postępuj zgodnie z tym samym procedurą, co powyżej, aby utworzyć nowy kosz S3 do przechowywania naszego pliku CSV.

Uwaga, że katalog tmp jest ograniczony do 512 MB miejsca, więc ważne jest, aby plik tymczasowy został usunięty później, aby zapewnić wystarczająco miejsca na przyszłe wykonania. Powód, dla którego używamy pliku tymczasowego, zamiast pisać bezpośrednio do S3, polega na uproszczeniu połączenia z S3 poprzez posiadanie jednego żądania.

Tak jak w przypadku funkcji lambda do przetwarzania, być może trzeba będzie zaktualizować uprawnienia dla twojej funkcji lambda procesowej. Ta funkcja lambda wymaga, aby rola wykonawcza miała uprawnienia GetObject dla wejściowego kosza S3 oraz zarówno PutObject, jak i GetObject dla wyjściowego kosza S3.

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

Skonfiguruj Lambdę, aby wykonała się, gdy nowe dane zostaną zapisane w S3

Teraz, gdy nasza funkcja lambda do konwersji pliku z formatu JSON na format CSV została utworzona, musimy skonfigurować ją tak, aby uruchamiała się, gdy nowy plik zostanie utworzony w naszym zasobniku S3. Aby to zrobić, musimy dodać wyzwalacz do naszej funkcji lambda, otwierając naszą funkcję lambda i klikając „Dodaj wyzwalacz” u góry strony.  Wybierz „S3” i podaj nazwę zasobnika S3, w którym przechowywane są surowe ładunki webhooków. Masz również możliwość określenia prefiksu i/lub sufiksu pliku, aby filtrować. Po skonfigurowaniu ustawień możesz dodać wyzwalacz, klikając „Dodaj” na dole strony. Teraz twoja funkcja lambda do przetwarzania będzie się uruchamiać za każdym razem, gdy nowy plik zostanie dodany do twojego zasobnika S3.

Teraz, gdy nasza funkcja lambda do konwersji pliku z formatu JSON na format CSV została utworzona, musimy skonfigurować ją tak, aby uruchamiała się, gdy nowy plik zostanie utworzony w naszym zasobniku S3. Aby to zrobić, musimy dodać wyzwalacz do naszej funkcji lambda, otwierając naszą funkcję lambda i klikając „Dodaj wyzwalacz” u góry strony.  Wybierz „S3” i podaj nazwę zasobnika S3, w którym przechowywane są surowe ładunki webhooków. Masz również możliwość określenia prefiksu i/lub sufiksu pliku, aby filtrować. Po skonfigurowaniu ustawień możesz dodać wyzwalacz, klikając „Dodaj” na dole strony. Teraz twoja funkcja lambda do przetwarzania będzie się uruchamiać za każdym razem, gdy nowy plik zostanie dodany do twojego zasobnika S3.

Teraz, gdy nasza funkcja lambda do konwersji pliku z formatu JSON na format CSV została utworzona, musimy skonfigurować ją tak, aby uruchamiała się, gdy nowy plik zostanie utworzony w naszym zasobniku S3. Aby to zrobić, musimy dodać wyzwalacz do naszej funkcji lambda, otwierając naszą funkcję lambda i klikając „Dodaj wyzwalacz” u góry strony.  Wybierz „S3” i podaj nazwę zasobnika S3, w którym przechowywane są surowe ładunki webhooków. Masz również możliwość określenia prefiksu i/lub sufiksu pliku, aby filtrować. Po skonfigurowaniu ustawień możesz dodać wyzwalacz, klikając „Dodaj” na dole strony. Teraz twoja funkcja lambda do przetwarzania będzie się uruchamiać za każdym razem, gdy nowy plik zostanie dodany do twojego zasobnika S3.

Ładowanie danych do bazy danych

W tym przykładzie nie będę szczegółowo omawiać ładowania danych do bazy danych, ale jeśli śledziłeś ten przykład, masz kilka opcji:

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

  2. Wykorzystaj swój plik CSV przy użyciu ustalonego procesu ETL

Niezależnie od tego, czy korzystasz z usługi bazy danych AWS, takiej jak RDS czy DynamoDB, czy masz swoją własną bazę danych PostgreSQL (lub podobną), możesz połączyć się z usługą bazy danych bezpośrednio z funkcji przetwarzania lambda. Na przykład, w ten sam sposób, w jaki wywołaliś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ć także używana do bezpośredniego odczytu plików danych z plików płaskich i uzyskiwania dostępu do danych za pomocą języka zapytań podobnego do SQL. Zalecam zapoznanie się z odpowiednią dokumentacją dla usługi, z której korzystasz, aby uzyskać więcej informacji na temat najlepszego sposobu wykonania tego w swoim otoczeniu.

Podobnie istnieje wiele usług, które mogą pomóc w przetwarzaniu plików CSV i ładowaniu danych do bazy danych. Możesz już mieć ustalony proces ETL, z którego możesz skorzystać.

Liczymy, że ten przewodnik był pomocny – miłego wysyłania!

W tym przykładzie nie będę szczegółowo omawiać ładowania danych do bazy danych, ale jeśli śledziłeś ten przykład, masz kilka opcji:

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

  2. Wykorzystaj swój plik CSV przy użyciu ustalonego procesu ETL

Niezależnie od tego, czy korzystasz z usługi bazy danych AWS, takiej jak RDS czy DynamoDB, czy masz swoją własną bazę danych PostgreSQL (lub podobną), możesz połączyć się z usługą bazy danych bezpośrednio z funkcji przetwarzania lambda. Na przykład, w ten sam sposób, w jaki wywołaliś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ć także używana do bezpośredniego odczytu plików danych z plików płaskich i uzyskiwania dostępu do danych za pomocą języka zapytań podobnego do SQL. Zalecam zapoznanie się z odpowiednią dokumentacją dla usługi, z której korzystasz, aby uzyskać więcej informacji na temat najlepszego sposobu wykonania tego w swoim otoczeniu.

Podobnie istnieje wiele usług, które mogą pomóc w przetwarzaniu plików CSV i ładowaniu danych do bazy danych. Możesz już mieć ustalony proces ETL, z którego możesz skorzystać.

Liczymy, że ten przewodnik był pomocny – miłego wysyłania!

W tym przykładzie nie będę szczegółowo omawiać ładowania danych do bazy danych, ale jeśli śledziłeś ten przykład, masz kilka opcji:

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

  2. Wykorzystaj swój plik CSV przy użyciu ustalonego procesu ETL

Niezależnie od tego, czy korzystasz z usługi bazy danych AWS, takiej jak RDS czy DynamoDB, czy masz swoją własną bazę danych PostgreSQL (lub podobną), możesz połączyć się z usługą bazy danych bezpośrednio z funkcji przetwarzania lambda. Na przykład, w ten sam sposób, w jaki wywołaliś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ć także używana do bezpośredniego odczytu plików danych z plików płaskich i uzyskiwania dostępu do danych za pomocą języka zapytań podobnego do SQL. Zalecam zapoznanie się z odpowiednią dokumentacją dla usługi, z której korzystasz, aby uzyskać więcej informacji na temat najlepszego sposobu wykonania tego w swoim otoczeniu.

Podobnie istnieje wiele usług, które mogą pomóc w przetwarzaniu plików CSV i ładowaniu danych do bazy danych. Możesz już mieć ustalony proces ETL, z którego możesz skorzystać.

Liczymy, że ten przewodnik był pomocny – miłego wysyłania!

Inne wiadomości

Przeczytaj więcej z tej kategorii

A person is standing at a desk while typing on a laptop.

Kompletna platforma oparta na sztucznej inteligencji, która rośnie wraz z Twoim biznesem.

A person is standing at a desk while typing on a laptop.

Kompletna platforma oparta na sztucznej inteligencji, która rośnie wraz z Twoim biznesem.