2016-02-03 16 views

Odpowiedz

3

plików przechowywanych na woluminach lokalnych Lambda powinna być tylko dla czasowego składowania krótkoterminowego i nie należy się spodziewać, aby utrzymywać się poza okres użytkowania pojedynczego Lambda wywołania funkcji.

Jeśli chcesz przechowywać dane długoterminowo, użyj bazy danych takiej jak DynamoDB lub użyj Amazon S3.

Jeśli musisz przechowywać dane na woluminie lokalnym, możesz je zaszyfrować, ale musisz to zrobić samodzielnie. Należy również pamiętać, że przy następnym wywołaniu funkcji dane najprawdopodobniej znikną.

+0

Dzięki za szybką odpowiedź, Tak, to jest w porządku, jeśli dane są usuwane podczas następnego wywołania funkcji, ponieważ jest tymczasowa. Czy wiemy, gdzie działa lokalny dysk Lambda, pod S3 itd.? – obaid

+0

Najprawdopodobniej jest to wolumin EBS, ale może to być magazyn instancji EC2 (np. Lokalny dysk twardy do instancji EC2). To nie będzie S3. –

5

Przechowuję tymczasowe dane w mojej funkcji lambda, nigdy nie miałem problemu.

  • przechowywać swoje dane w/tmp, nie może mieć dostępu do innych katalogów
  • Dane tymczasowe - jak sama nazwa wskazuje - jest dostępna tylko dla tej inwokacji lambda
  • Jeśli dane są wrażliwe, zaszyfruj (jeśli biblioteki szyfrowania nie są domyślnie dostarczane dla tego języka, upewnij się, że zapakowałeś bibliotekę)
11

Jednym z ważnych elementów/tmp funkcji Lambda jest to, że kontenery funkcji Lambda są ponownie używane i przestrzeń rysunkowa to nie zawsze usunięte. Jeśli wywołanie używa kontenera, który został odwinięty z powodu wcześniejszego wywołania (dzieje się tak, jeśli uruchamiasz kilka funkcji Lambda w krótkim odstępie czasu), przestrzeń rysowania jest udostępniana.

To jednorazowo przywróciło mi funkcjonalność.

+10

Aby to wyjaśnić, nie zawsze jest kasowane w przypadku kolejnych wywołań ** twojej funkcji **. Nie znajdziesz tam danych kogoś innego. –

+0

@ Luc Hendriks Jak mogę oczyścić folder tmp? – rresol

+0

Możesz po prostu usunąć pliki. Jeśli używasz węzła js, możesz zrobić 'fs.readdir', aby uzyskać wszystkie pliki w folderze tmp, a następnie dla każdego pliku wykonaj na przykład 'fs.unlink'. Możesz również odrodzić proces potomny i zrobić na przykład to (powinien działać jako oneliner, ale chcesz podzielić wymagania i uczynić je asynchronicznym): 'require ('child_process'). ExecSync ('rm -rf/tmp') ' –

2

Jeśli "bezpieczny" zapyta, kto będzie miał dostęp do danych, odpowiedź brzmi: każdy, kto może zadzwonić do lambda. Jeśli przez "bezpieczne" również zastanawiasz się, czy jest to trwałe przechowywanie, to odpowiedź brzmi "nie". Funkcje Lambda mają dostęp tylko do ulotnego folderu /tmp. Nie ma gwarancji, że dwa kolejne wywołania tej samej funkcji lambda będą wykonywane na tej samej maszynie fizycznej. Jeśli jednak funkcja zostanie wywołana dwukrotnie w krótkim okresie czasu, może zostać wykonana na tym samym komputerze, a następnie plik, który został zapisany przez pierwsze połączenie, może być dostępny dla drugiego połączenia. Jeśli zdecydujesz się użyć tego tymczasowego przechowywania plików, powinieneś także pamiętać, że istnieje około limitations ilości danych, które można przechowywać.

+0

Dzięki za informację. Więc jeśli dobrze rozumiem, każda inna Lambda może wyświetlić katalog/tmp? wydaje się to dziwne, ponieważ każdy może usunąć lub odczytać dane (jeśli tak jest). Pozwól, że zadam inne pytanie. Jak Lambda korzysta z pamięci RAM, na przykład jeśli przydzielę 1024 RAM (przez interfejs WWW) i średnio uruchomię funkcje Lambdy 5-7 w ciągu 1-10 sekund (S3 uruchomi funkcje Lambda), to ta pamięć RAM zostanie podzielona na wszystkie funkcje Lambda, lub każda pojedyncza funkcja Lambda będzie miała przydzieloną 1024 pamięci RAM? – obaid

+1

@obaid Nie, "Każda funkcja Lambda otrzymuje 500 MB nietrwałego miejsca na dysku w swoim katalogu/tmp." (podkreślenie moje, skopiowane z [FAQ Lambda] (https://aws.amazon.com/lambda/faqs/)). Każde żądanie do funkcji Lambda będzie miało własny przydział pamięci, inaczej nie zostanie skalowane. Alternatywa (stały budżet pamięci dla wszystkich żądań do konkretnej Lambdy) nie ma sensu. Takie rozwiązanie sugerowałoby, że każde żądanie będzie uzyskiwać coraz mniej pamięci, gdy ruch wzrośnie do punktu, w którym nieuchronnie wyrzuci wyjątek z pamięci. – matsev

Powiązane problemy