AWS - Generowanie dziennych raportów

Hej,

od pewnego czasu zastnawiam jakich komponentów AWS użyć do generowania codziennych raportów dla klienta. Dokładnie chodzi o pliki csv generowane raz dziennie na podstawie query do bazy.

Na początku postawiłem na rozwiązanie opierające się na Lambdzie, która byłaby trigerowana przez cloudwatch event. Podejście wydawało się proste lecz problem pojawił się w czasie wykonywania query. Czas ten wynosi ponad 30min.

Kolejnym pomysłem było postawienie serwisu na instancji ec2. Lecz tutaj w grę weszły koszty. Całkowity czas generowania raportów zająłby ~40minut natomiast przez resztę czasu instancja byłaby nie używana. Trochę marnotrastwo pieniędzy.

Stąd też narodził się pomysł utworzenia lambdy, która byłaby trigerowana przez cloudwatch event i startowałaby instancję ec2 tylko po to by tą wygenerowała raport a nastepnei została ubitą.

W grę wchodzi również użycie komponentu Data Pipeline, który w cenniku aws prezentuje się obiecująco 2.5$ / miesiąc (o ile nie posiada jeszcze jakiś ukrytych kosztów). Problem polega na tym, że nie mam z nim doświadczenia i nie wiem jakie niespodziewane problemy/koszty mogą wystąpić.

Tutaj moje pytania, czy istnieje jeszcze jakiś komponent czy też architektura pozwalająca na generowanie raportów w prosty i tani sposób?
Oraz, który z powyższych przykładów wydaje się najlepszym rozwiązaniem?

Pozdrawiam

czesc @Stanislaw witaj na forum :slight_smile:

Bez zbędnego teoretyzowania i wymyślania zmian architektury, ponieważ zakładam, że chcesz rozwiązania na szybko, napiszę tak: weź DataPipeline.

Ukryte koszty :stuck_out_tongue_closed_eyes: - tak będą, będziesz płacił za instancję EC2, ale DataPipeline zrobi za Ciebie to co chciałeś samemu wykonać (za pomocą Lambdy), czyli właśnie uruchomi maszynę wirtualną i wyłączy / skasuje po zakończonej robocie.

Koszty możesz obniżyć stosując EC2 Spot Instance.

Zakładając, że zmiana systemu w obszarze generującym raporty nie wchodzi w grę, to DataPipeline jest najbardziej poprawnym rozwiązaniem. Da Ci rozwiązanie najszybciej i najtaniej (liczę tu czas pracy ludzi a nie cennik AWS).

uwagi na marginesie…
Ja mam u klienta taki pipeline na DataPipeline i to teoretycznie wygląda spoko i nawet w miarę działa. Raz na parę dni sie wywali bez, żadnego sensownego powodu lub dlatego, że AWS zabiera bez ostrzeżenia instancje spot (a powinien ostrzegać). Na szczęście proces mamy taki, że następnego dnia może przerobić dwa dni wstecz, więc nas to nie boli. Osobiście tego nie znoszę i z chęcią bym to przepisał na severless. Ale ponieważ nie ma bólu to nie przepisuje.

Dzięki za odpowiedź :slight_smile:

Na początku zakładałem, że projekt będzie w pełni serverless sterowany eventami lecz czas wykonywania query pokrzyżował plan. Skorzystam z twojej rady i wskoczę w Data Pipeline.

A tak z ciekawości zapytam, jakie zmiany architektury miałeś na myśli?

Z tego, co piszesz, to problemem jest 30 minutowe zapytanie generujące raport. Jeśli byś był w stanie zbić to kilkukrotnie to byś nie miał problemu z timeoutem Lambdy.

Ale znając życie to by się wiązało z ogromnymi zmianami całego rozwiązania. Te zmiany mogą ale nie muszą być pożądane. Może to 30 min nie jest żadnym problemem, a może to wyraźny przykład, że Twój system ledwo zipie. Nie znam Twojej sytuacji. Cieżko dywagować nie znając szczegółów ¯_(ツ)_/¯

Alternatywnie dla DataPipeline to możesz użyć Fargate - takie “serverlessowe” kontenery ale pewnie DP będzie tańsze.

1lajk