Serverless reInvented
re:Invent 2019 za nami. Nowości, jak zwykle, bardzo dużo. Zaczęły się zresztą pojawiać już przed samą imprezą.
Dla mnie najciekawsze są sprawy związane z serverless i na nich się skupię. Oto co zwróciło moją uwagę.
Lambda Provisioned
Chyba każdy, kto korzysta z AWS Lambda słyszał o tak zwanych cold startach. Na ten temat przelano w internecie hektolitry atramentu. W skrócie, każde pierwsze uruchomienie funkcji trwa dłużej. Niekiedy sporo dłużej. Czas ten co raz bardziej, dzięki działaniom AWS, się skraca. Jednak nadal może on być zbyt długi w rozwiązaniach, które potrzebują naprawdę krótkich czasów odpowiedzi.
Od teraz AWS umożliwia nam trzymanie przygotowanej do działania określonej liczby instancji funkcji Lambda. Pozwoli to na skrócenie czasu odpowiedzi z naszych systemów serverless.
Trochę odchodzimy jednak w tym przypadku od zasady pay-per-use, gdyż w tym przypadku zapłacimy za czas samej gotowości funkcji do działania.
Liczbą funkcji w gotowości możemy oczywiście dynamicznie sterować i zmieniać ją w czasie. To może pozwolić nam nawet na obniżenie rachunków, gdyż samo „działanie” funkcji będzie krótsze. Ale przede wszystkim zabezpieczy nas przed spodziewanymi skokami obciążeń.
Brzmi jak uruchamianie aplikacji na maszynach wirtualnych? Niekoniecznie. Nadal nie musimy martwić się o infrastrukturę i nadal jesteśmy przygotowani na nagłe i nieprzewidziane skoki obciążenia.
Na pewno krok w dobrym kierunku. Boję się tylko, żeby AWS nie spoczął na laurach i nie zaprzestał prac nad jeszcze większym skróceniu czasu tego „przeklętego” cold startu. Ale o to ich raczej nie posądzam.
RDS Proxy
Korzystanie z relacyjnych baz danych przy użyciu AWS Lambda ma pewne wady. Jak wiemy, Lambdy mogą skalować się do wielu tysięcy wywołań. Relacyjne bazy danych nie są projektowane w taki sposób, aby mogły obsługiwać takie ilości połączeń. Nawet jeżeli, to wymaga to sporo zasobów.
RDS Proxy to usługa, którą umieszczamy pomiędzy bazą danych, a naszą aplikacją. Po jej uruchomieniu łączymy się do proxy, zamiast to samej bazy danych. RDS Proxy zarządza i utrzymuje połączenia do bazy, a my możemy uprościć swój kod i nie przejmować się samym zarządzaniem tymi połączeniami.
W chwili obecnej usługa dostępna jest w preview i nie należy jej używać w rozwiązaniach produkcyjnych. Jest to jednak na pewno krok w dobrą stronę.
Niestety, w chwili obecnej usługa ma sporo ograniczeń, pracuje np. tylko z MySQL w wersjach 5.6 i 5.7. Więcej tutaj
HTTP API Gateway v2
Co ważne, około 70% tańszy. Płaciliśmy 3,5$ za milion requestów. W wersji drugiej zapłacimy 1$.
Podobno, bo nie testowałem jeszcze, opóźnienia o 50% niższe. Samo przesyłanie danych do Lambdy jest uproszczone.
Pod pewnymi względami mamy mniej, pod innymi więcej. Dla wielu zaatosowań, to więcej, wygrywa. Mamy reż bezpośrednią obsługę JWT.
Do tego dochodzi uproszczona obsługa resources w API.
CORS? Jest.
S3 Access Points
Alternatywna metoda korzystania z zasobów usługi S3. AWS stara się z jednej strony ułatwić życie developerom, a z drugiej wprowadzić kolejne sposoby zabezpieczania i udostępniania danych.
Zarządzanie uprawnieniami do S3 może być skomplikowane. Szczególnie w przypadkach, kiedy mamy do czynienia z wieloma aplikacjami i użytkownikami.
Access Point to troche taka polityka, za pomocą której możemy nadać uprawnienia zarówno do całego bucketa S3, jak i poszczególnych obiektów.
Do bucketa można dodać wiele accespointów, a każdy z nich może mieć podpiętą inną politykę. Zamiast więc zarządzać jedną, co raz bardziej skomplikowana bucket policy możemy dodawać kolejne w miarę jak zwiększa się np. liczba aplikacji, które korzystają z zasobów bucketa.
Można tworzyć takie accesspointy tak, aby było dostępne z internetu, bądź tylko z naszych VPC.
Inne
Mamy oczywiście więcej nowości. Zmiany w StepFunctions, o których już pisałem. AWS udostępniło nam zarządzaną Cassandrę. Część z Was uzna pewnie Fargate dla Kubernetes jako serverless. Ja nie 😉 Ale to też nowość warta zauważenia. Folejki SQS FIFO jako event dla Lambdy to też coś, obok czegoś nie można przejść obojętnie.
Nowości było bardzo dużo. Chyba wszystkie spisaliśmy z Łukaszem na GitHubie zapraszam więc tam po informacje.