Używanie funkcji Lambda z Amazon S3

Usługa Amazon S3 służy do przechowywania plików, gdzie można przesyłać lub usuwać pliki. Możemy uruchomić AWS Lambda na S3, gdy są załadowane pliki w zasobnikach S3. AWS Lambda ma funkcję handlera, która działa jako punkt startowy funkcji AWS Lambda. Program obsługi ma szczegółowe informacje o zdarzeniach. W tym rozdziale zobaczmy, jak używać AWS S3 do wyzwalania funkcji AWS Lambda, gdy przesyłamy pliki w zasobniku S3.

Kroki korzystania z funkcji AWS Lambda z Amazon S3

Aby rozpocząć korzystanie z AWS Lambda z Amazon S3, potrzebujemy:

  • Utwórz wiadro S3
  • Utwórz rolę, która ma uprawnienia do pracy z s3 i lambdą
  • Utwórz funkcję lambda i dodaj s3 jako wyzwalacz.

Przykład

Zobaczmy te kroki na przykładzie, który pokazuje podstawową interakcję między Amazon S3 i AWS Lambda.

  • Użytkownik prześle plik w zasobniku Amazon S3

  • Po załadowaniu pliku uruchomi on w tle funkcję AWS Lambda, która wyświetli wynik w postaci komunikatu konsoli, że plik został załadowany.

  • Użytkownik będzie mógł zobaczyć wiadomość w dziennikach Cloudwatch po przesłaniu pliku.

Schemat blokowy wyjaśniający przepływ przykładu jest pokazany tutaj -

Tworzenie zasobnika S3

Zacznijmy od utworzenia zasobnika s3 w konsoli AWS, wykonując czynności podane poniżej -

Krok 1

Przejdź do usług Amazon i kliknij S3 w sekcji przechowywania, jak zaznaczono na obrazku podanym poniżej -

Krok 2

Kliknij S3 storage i Create bucket który będzie przechowywać przesłane pliki.

Krok 3

Po kliknięciu Create bucket przycisk, możesz zobaczyć następujący ekran -

Krok 4

Wprowadź szczegóły Bucket name, Select the Region i kliknij Createprzycisk w lewym dolnym rogu. W ten sposób stworzyliśmy wiadro o nazwie:workingwithlambdaands3.

Krok 5

Teraz kliknij nazwę zasobnika, a poprosi Cię o przesłanie plików, jak pokazano poniżej -

W ten sposób zakończyliśmy tworzenie wiadra w S3.

Utwórz rolę, która współpracuje z S3 i Lambda

Aby utworzyć rolę, która działa z S3 i Lambda, wykonaj kroki podane poniżej -

Krok 1

Przejdź do usług AWS i wybierz IAM, jak pokazano poniżej -

Krok 2

Teraz kliknij IAM -> Roles jak pokazano poniżej -

Krok 3

Teraz kliknij Create rolei wybierz usługi, które będą używać tej roli. Wybierz Lambda i kliknijPermission przycisk.

Krok 4

Dodaj uprawnienia od dołu i kliknij Review.

Krok 5

Zwróć uwagę, że wybraliśmy następujące uprawnienia -

Zwróć uwagę, że wybrane przez nas zasady są AmazonS3FullAccess, AWSLambdaFullAccess i CloudWatchFullAccess.

Krok 6

Teraz wprowadź nazwę roli, opis roli i kliknij Create Role przycisk na dole.

Tak nazwaliśmy naszą rolę lambdawiths3service jest tworzone.

Utwórz funkcję Lambda i dodaj wyzwalacz S3

W tej sekcji zobaczmy, jak utworzyć funkcję Lambda i dodać do niej wyzwalacz S3. W tym celu będziesz musiał wykonać poniższe kroki -

Krok 1

Przejdź do AWS Services i wybierz Lambda, jak pokazano poniżej -

Krok 2

Kliknij Lambda i postępuj zgodnie z procedurą dodawania Name. WybierzRuntime, Roleitd. i utwórz funkcję. Utworzona przez nas funkcja Lambda jest pokazana na zrzucie ekranu poniżej -

Krok 3

Teraz dodajmy wyzwalacz S3.

Krok 4

Wybierz wyzwalacz z góry i dodaj szczegóły, jak pokazano poniżej -

Krok 5

Wybierz zasobnik utworzony z menu zasobnika. Typ zdarzenia zawiera następujące szczegóły -

Wybierz Object Created (All)ponieważ potrzebujemy wyzwalacza AWS Lambda, gdy plik jest ładowany, usuwany itp.

Krok 6

Możesz dodać Prefiks i Wzorzec pliku, które są używane do filtrowania dodawanych plików. Na przykład, aby wyzwolić lambdę tylko dla obrazów .jpg. Pozostawmy to na razie puste, ponieważ musimy wyzwalać Lambdę dla wszystkich przesyłanych plików. KliknijAdd przycisk, aby dodać wyzwalacz.

Krok 7

Możesz znaleźć wyświetlacz wyzwalania dla funkcji Lambda, jak pokazano poniżej -

Dodajmy szczegóły funkcji lambda aws. Tutaj użyjemy edytora online, aby dodać nasz kod i użyć nodejs jako środowiska wykonawczego.

Krok 8

Aby wyzwolić S3 z AWS Lambda, będziemy musieli użyć zdarzenia S3 w kodzie, jak pokazano poniżej -

exports.handler = function(event, context, callback) {
   console.log("Incoming Event: ", event);
   const bucket = event.Records[0].s3.bucket.name;
   const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
   const message = `File is uploaded in - ${bucket} -> ${filename}`;
   console.log(message);
   callback(null, message);
};

Zauważ, że parametr zdarzenia zawiera szczegóły S3event. Pocieszaliśmy nazwę zasobnika i nazwę pliku, które zostaną zapisane podczas przesyłania obrazu w S3bucket.

Krok 9

Teraz zapiszmy zmiany i przetestujmy funkcję lambda za pomocą S3upload. Poniżej znajdują się szczegóły kodu dodane w AWS Lambda -

Krok 10

Teraz dodajmy rolę, pamięć i limit czasu.

Krok 11

Teraz zapisz funkcję Lambda. Otwórz S3 z usług Amazon i otwórz wiadro, które stworzyliśmy wcześniej, a mianowicieworkingwithlambdaands3.

Prześlij w nim obraz, jak pokazano poniżej -

Krok 12

Kliknij Upload przycisk, aby dodać pliki, jak pokazano -

Krok 13

Kliknij Add filesaby dodać pliki. Możesz także przeciągać i upuszczać pliki. Teraz kliknijUpload przycisk.

W ten sposób przesłaliśmy jeden obraz do naszego wiadra S3.

Krok 14

Aby zobaczyć szczegóły wyzwalacza, przejdź do usługi AWS i wybierz CloudWatch. Otwórz dzienniki funkcji Lambda i użyj następującego kodu -

exports.handler = function(event, context, callback) {
   console.log("Incoming Event: ", event);
   const bucket = event.Records[0].s3.bucket.name;
   const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
   const message = `File is uploaded in - ${bucket} -> ${filename}`;
   console.log(message);
   callback(null, message);
};

Dane wyjściowe, które możesz obserwować w Cloudwatch, są pokazane -

Funkcja AWS Lambda zostaje wyzwolona po przesłaniu pliku do zasobnika S3, a szczegóły są rejestrowane w Cloudwatch, jak pokazano poniżej -