AWS Lambda - Szybki przewodnik

AWS Lambdato usługa polegająca na wykonywaniu obliczeń bezserwerowych, co oznacza przetwarzanie bez serwera. Kod jest wykonywany w oparciu o reakcję na zdarzenia w usługach AWS, takie jak dodawanie / usuwanie plików w wiadrze S3, aktualizacja tabel Amazon dynamo dB, żądanie HTTP z bramy Amazon API itp.

Do pracy AWS Lambda, musimy tylko wypchnąć kod w usłudze AWS Lambda. Wszystkie inne zadania i zasoby, takie jak infrastruktura, system operacyjny, utrzymanie serwera, monitorowanie kodu, logi i bezpieczeństwo, są obsługiwane przez AWS.

AWS Lambdaobsługuje języki takie jak Java, NodeJS, Python, C # i Go. Pamiętaj, że AWS Lambda będzie działać tylko z usługami AWS.

Co to jest AWS Lambda?

Definicja AWS Lambda podana w oficjalnej dokumentacji jest następująca -

AWS Lambda to usługa obliczeniowa, która umożliwia uruchamianie kodu bez udostępniania lub zarządzania serwerami. AWS Lambda wykonuje Twój kod tylko wtedy, gdy jest to potrzebne i automatycznie skaluje, od kilku żądań dziennie do tysięcy na sekundę. Płacisz tylko za zużyty czas obliczeniowy - nie ma żadnych opłat, gdy kod nie jest uruchomiony.

Jak działa AWS Lambda?

Schemat blokowy, który wyjaśnia działanie AWS Lambda w pięciu łatwych krokach, pokazano poniżej -

Step 1 − Prześlij kod lambda AWS w dowolnym z języków obsługiwanych przez AWS lambda, czyli NodeJS, Java, Python, C # i Go.

Step 2 − To kilka usług AWS, na których można wyzwolić lambdę AWS.

Step 3 −AWS Lambda, która zawiera kod do przesłania i szczegóły zdarzenia, na którym wystąpił wyzwalacz. Na przykład zdarzenie z Amazon S3, Amazon API Gateway, Dynamo dB, Amazon SNS, Amazon Kinesis, CloudFront, Amazon SES, CloudTrail, aplikacja mobilna itp.

Step 4 − Wykonuje kod AWS Lambda tylko wtedy, gdy jest uruchamiany przez usługi AWS w scenariuszach takich jak -

  • Użytkownik przesyła pliki w zasobniku S3
  • http get / post URL punktu końcowego został trafiony
  • dane są dodawane / aktualizowane / usuwane w tablicach dynamo dB
  • aktywne powiadomienie
  • zbieranie strumieni danych
  • hosting witryn internetowych
  • wysyłanie e-maili
  • aplikacja mobilna itp.

Step 5 − Pamiętaj, że AWS pobiera opłaty tylko wtedy, gdy wykonywany jest kod lambda AWS, a nie inaczej.

Zalety korzystania z AWS Lambda

AWS Lambda oferuje wiele korzyści podczas pracy nad nią. Ta sekcja omawia je szczegółowo -

Łatwość pracy z kodem

AWS Lambda zapewnia infrastrukturę do przesłania kodu. Dba o utrzymanie kodu i uruchamia go, gdy zajdzie wymagane zdarzenie. Pozwala wybrać pamięć i limit czasu wymagany dla kodu.

AWS Lambda może również wykonywać równoległe żądania zgodnie z wyzwalaczami zdarzeń.

Udostępnianie dziennika

AWS Lambda podaje szczegółowe informacje o tym, ile razy kod został wykonany, ile czasu zajęło wykonanie, zajętej pamięci itp. AWS CloudWatch zbiera wszystkie dzienniki, co pomaga w zrozumieniu przebiegu wykonywania i debugowaniu kodu.

Rozliczenia na podstawie użycia

Fakturowanie za AWS Lambda odbywa się na podstawie wykorzystania pamięci, wysłanego żądania i wykonania, które jest rozliczane w odstępach co najmniej 100 ms. Tak więc w przypadku wykonania 500 ms fakturowanie będzie dokonywane co 100 ms. Jeśli określisz, że kod lambda AWS ma być wykonany w 500 ms, a czas potrzebny na wykonanie to zaledwie 200 ms, AWS obciąży Cię tylko za ten czas, czyli 200 ms wykonania zamiast 500 ms. AWS zawsze pobiera opłaty za wykorzystany czas wykonania. Nie musisz płacić, jeśli funkcja nie jest wykonywana.

Obsługa wielu języków

AWS Lambda obsługuje popularne języki, takie jak Node. js, Python, Java, C # i Go. Są to powszechnie używane języki i każdy programista z łatwością napisze kod dla AWS Lambda.

Łatwość tworzenia i wdrażania kodu

Lambda ma wiele opcji tworzenia i wdrażania kodu. Do pisania kodu można użyć edytora online AWS, środowiska Visual Studio IDE lub Eclipse IDE. Obsługuje również framework bezserwerowy, który ułatwia pisanie i wdrażanie kodu AWS Lambda. Oprócz konsoli AWS mamy AWS-cli do tworzenia i wdrażania kodu.

Inne funkcje

Możesz używać AWS Lambda za darmo, uzyskując login do darmowego poziomu AWS. Zapewnia bezpłatną usługę przez 1 rok. Spójrz na bezpłatne usługi oferowane przez darmowy poziom AWS.

Wady korzystania z AWS Lambda

Pomimo wielu zalet AWS Lambda posiada następujące wady -

  • Nie nadaje się do małych projektów.

  • Musisz dokładnie przeanalizować swój kod i zdecydować o pamięci i limicie czasu. W przypadku, gdy twoja funkcja potrzebuje więcej czasu niż to, co zostało przydzielone, zostanie zakończona zgodnie z podanym w niej limitem czasu, a kod nie zostanie w pełni wykonany.

  • Ponieważ AWS Lambda opiera się całkowicie na AWS w zakresie infrastruktury, nie możesz zainstalować żadnego dodatkowego oprogramowania, jeśli wymaga tego Twój kod.

Zdarzenia wyzwalające AWS Lambda

Zdarzenia, które mogą wyzwolić AWS Lambda, są następujące -

  • Wejście do obiektu S3
  • Wstawianie, aktualizowanie i usuwanie danych w tabeli Dynamo DB
  • Powiadomienia push z SNS
  • GET / POST wywołania API Gateway
  • Modyfikacja nagłówków w przeglądarce lub żądaniu / odpowiedzi pochodzenia w CloudFront
  • Wpisy dziennika w strumieniu danych AWS Kinesis
  • Loguj historię w CloudTrail

Użyj przypadków AWS Lambda

AWS Lambda to usługa obliczeniowa używana głównie do uruchamiania procesów w tle. Może się wyzwalać, gdy jest używany z innymi usługami AWS. Lista usług AWS, w których możemy skorzystać z AWS Lambda znajduje się poniżej -

Obiekt S3 i AWS Lambda

Amazon S3 przekazuje szczegóły zdarzenia do AWS Lambda, gdy w S3 jest przesyłany plik. Szczegóły dotyczące załadowania lub usunięcia pliku lub przeniesienia pliku są przekazywane do AWS Lambda. Kod w AWS Lambda może wykonać niezbędny krok po otrzymaniu szczegółów zdarzenia. Na przykład tworzenie miniatury obrazu wstawionego do S3.

DynamoDB i AWS Lambda

DynamoDB może wyzwolić AWS Lambda, gdy w tabeli zostaną dodane, zaktualizowane i usunięte dane. Zdarzenie AWS Lambda zawiera wszystkie szczegóły tabeli AWS DynamoDB dotyczące wstawiania / aktualizowania lub usuwania.

API Gateway i AWS Lambda

API Gateway może wyzwalać AWS Lambda na metodach GET / POST. Możemy stworzyć formularz i udostępnić szczegóły punktowi końcowemu API Gateway i wykorzystać go z AWS Lambda do dalszego przetwarzania, na przykład, dokonując wpisu danych w tabeli DynamoDB.

SNS i AWS Lambda

SNS służy do powiadamiania push, wysyłania SMS-ów itp. Możemy wyzwalać lambdę AWS, gdy w SNS ma miejsce jakiekolwiek powiadomienie push. Możemy również wysłać SMS na numer telefonu z AWS Lambda, gdy otrzyma wyzwalacz.

Zaplanowane wydarzenia i AWS Lambda

Zaplanowane zdarzenia mogą być używane do zadań cron. Może spowodować, że AWS Lambda będzie wykonywać zadanie w regularnych odstępach czasu.

CloudTrail i AWS Lambda

CloudTrail może być pomocny w monitorowaniu logów na koncie. Możemy użyć AWS Lambda do dalszego przetwarzania dzienników CloudTrail.

Kinesis i AWS Lambda

Kinesis służy do przechwytywania / przechowywania danych śledzenia w czasie rzeczywistym pochodzących z kliknięć w witrynie, dzienników, kanałów mediów społecznościowych i wyzwalacza dla AWS Lambda może wykonać dodatkowe przetwarzanie w tych dziennikach.

CloudFront i Lambda @ Edge

CloudFront to sieć dostarczania treści, w której możesz hostować swoją witrynę internetową, a Lambda @ Edge może być używany do przetwarzania nagłówków pochodzących z żądania przeglądarki, żądania pochodzenia, odpowiedzi pochodzenia i odpowiedzi przeglądarki. Modyfikacja nagłówków obejmuje takie zadania, jak modyfikowanie danych cookie, przepisywanie adresu URL, używane do testowania AB w celu zmiany odpowiedzi wysyłanej do użytkownika, dodawanie dodatkowych informacji o nagłówkach ze względów bezpieczeństwa itp.

Zanim zaczniesz pracować z AWS Lambda, musisz mieć login z konsolą Amazon. AWS Lambda obsługuje dwa IDE:Visual studio i Eclipse. W tym rozdziale omówimy szczegółowo krok po kroku instalację AWS Lambda.

Utwórz login w konsoli AWS

Możesz utworzyć swój login w konsoli AWS za darmo, korzystając z bezpłatnej warstwy Amazon. Możesz wykonać poniższe kroki, aby utworzyć login z amazon, aby korzystać z usług Amazon -

Krok 1

Iść do https://aws.amazon.com/free/i kliknij utwórz darmowe konto. Możesz zobaczyć zrzut ekranu, jak podano poniżej -

Krok 2

Kliknij Create a Free Account i zostaniesz przekierowany do ekranu, jak pokazano poniżej -

Teraz wypełnij szczegóły adresu e-mail, hasła i nazwy konta AWS zgodnie z wyborem w powyższym formularzu i kliknij Continue.

Krok 3

Teraz możesz znaleźć ekran, jak pokazano poniżej -

Wprowadź wszystkie wymagane dane w tym formularzu.

Należy pamiętać, że obowiązują minimalne opłaty w zależności od wybranego kraju. To samo jest zwracane po zweryfikowaniu wprowadzonych danych. Aby utworzyć bezpłatne konto, potrzebujesz danych karty kredytowej lub debetowej. Dla użytkowników z IndiiRs 2/- jest odliczane i dla USA $1 To samo jest zwracane danemu użytkownikowi karty po zweryfikowaniu użytkownika.

Należy pamiętać, że konto jest bezpłatne, a korzystanie z usług jest ograniczone. Jeśli użycie przekroczy limit, użytkownik zostanie za to obciążony.

Po wprowadzeniu danych w powyższym formularzu kliknij Create Account and Continue.

Zostaniesz przekierowany do następnego ekranu, jak pokazano poniżej.

Krok 4

Musisz podać szczegóły płatności, czyli kartę kredytową lub debetową, wraz z jej datą ważności i nazwiskiem posiadacza karty, jak pokazano poniżej -

Krok 5

Po wprowadzeniu wszystkich szczegółów kliknij Secure Submit i zweryfikuje kartę w banku i wyda ci OTPna telefonie komórkowym, który jest powiązany z kartą. Możesz znaleźć okno, jak pokazano poniżej -

Teraz wprowadź OTP szczegóły i kliknij Make Payment. Opłata jest naliczana na podstawie wybranego kraju.

Krok 6

Po dokonaniu płatności kolejnym krokiem jest weryfikacja telefoniczna. Musisz wprowadzić swój numer telefonu komórkowego, jak pokazano poniżej -

Po wypełnieniu szczegółów kliknij Call Me Now. AWS zadzwoni natychmiast, korzystając z automatycznego systemu. Gdy pojawi się monit telefoniczny, wprowadź 4-cyfrowy numer, który pojawi się w Twojej witrynie AWS, na telefonie za pomocą klawiatury telefonu. To zweryfikuje Twój numer i otrzymasz aktywację poczty w mail id podanym na początku podczas tworzenia loginu.

Krok 7

Kliknij łącze e-mail i wprowadź nazwę konta lub identyfikator e-mail oraz hasło i zaloguj się do usług AWS, jak pokazano poniżej -

Nazwa konta jest wyświetlana w prawym górnym rogu, jak pokazano powyżej. Możesz już zacząć korzystać z usługi AWS Lambda. W przypadku usługi AWS Lambda obsługiwane języki to NodeJS, Python, Java, C # i Go.

Instalacja programu Visual Studio 2017

Istnieją 2 środowiska IDE zgodne z AWS: Visual Studio i Eclipse. W tej sekcji omówimy instalację programu Visual studio 2017 na systemach Windows, Linux i Mac. Przejdź do oficjalnej witryny programu Visual Studio:https://www.visualstudio.com/downloads/. Możesz znaleźć ekran powitalny, jak pokazano -

Pobierz wersję społecznościową tj Visual Studio Community 2017jak to jest teraz wolne do ćwiczeń. Po zainstalowaniu przeprowadzi Cię przez kroki instalacji, w których musisz wybrać pakiety do późniejszego wykorzystania. Możesz wybrać nodejs, python, c# pakiet dla nas do pracy później.

Obsługa zestawu narzędzi AWS dla programu Visual Studio 2017

Po zainstalowaniu programu Visual Studio 2017 będziesz musiał wykonać podane kroki, aby zainstalować obsługę zestawu narzędzi AWS dla programu Visual Studio 2017 -

Krok 1

Iść do https://aws.amazon.com/visualstudio/ i pobierz zestaw narzędzi AWS dla Visual Studio. Ekran wygląda jak poniżej -

Zwróć uwagę, że pakiet pobrany dla programu Visual Studio 2017 to vsixpakiet. Jeśli Twoja wersja programu Visual Studio jest w latach 2013-2015, zainstalujemsiinstalator. KliknijDownload jak pokazano poniżej.

Krok 2

Teraz kliknij dwukrotnie pobrany pakiet vsix, który przeprowadzi Cię przez kroki instalacji, jak pokazano poniżej -

Po pomyślnym zainstalowaniu programu Visual Studio możesz zobaczyć okno, jak pokazano poniżej -

Krok 3

Teraz otwórz Visual Studio 2017 i powinieneś zobaczyć stronę powitalną z AWS, jak pokazano poniżej -

Zauważ, że musisz dodać klucz dostępu, tajny klucz, numer konta, aby rozpocząć i korzystać z usług AWS z Visual studio.

AWS Lambda BoilerPlate dla NodeJS

Możesz go używać z visual studio code jak pokazano niżej.

Krok 1

Możesz pobrać Visual studio code bezpłatnie z oficjalnej strony internetowej:https://www.visualstudio.com/downloads/. Strona główna pobierania programu Visual Studio wygląda następująco -

Krok 2

Teraz otwórz kod Visual Studio, jak pokazano poniżej -

Krok 3

Aby zainstalować obsługę AWS, support for nodejsopcja jest dostępna wewnątrz rozszerzeń. Możesz wyszukać AWS i wyświetli opcję w następujący sposób -

Krok 4

Teraz zainstaluj płytę kotłową dla AWS Lambda w formacie nodejs jak pokazano -

Krok 5

Kliknij repozytorium i sklonuj je w programie Visual Studio, aby rozpocząć pisanie funkcji Lambda w programie Visual Studio. Przekierowuje do tego repozytorium, które możemy sklonować w programie Visual Studio:https://github.com/loganarnett/vscode-lambda-snippets. Teraz otwórz paletę poleceń zView opcja w programie Visual Studio.

Krok 6

Kliknij na niego i wybierz klon git, jak pokazano poniżej -

Krok 7

Wprowadź adres URL repozytorium i zapisz go lokalnie według własnego wyboru. Stwórzindex.js plik, jak pokazano poniżej, do pracy z funkcją lambda -

Instalacja Eclipse IDE

Teraz będziesz musiał zainstalować najnowsze środowisko eclipse Java EE IDE. Możesz go pobrać z oficjalnej strony Eclipse:https://www.eclipse.org/downloads/

Wsparcie AWS Toolkit dla Eclipse IDE

Po zainstalowaniu Eclipse wykonaj następujące czynności -

Krok 1

Przejdź do pomocy z menu i kliknij Install New Software.

Krok 2

Wchodzić https://aws.amazon.com/eclipse w oznaczonym polu tekstowym Work with u góry okna dialogowego.

Krok 3

Teraz wybierz wymagane AWS Core Management Tools i inne opcjonalne pozycje z poniższej listy.

Krok 4

Teraz kliknij Next. Eclipse poprowadzi Cię przez pozostałe kroki instalacji, jak podano w dalszych krokach podanych poniżej.

Krok 5

Podstawowe moduły AWS są wyświetlane w siatce poniżej, jak pokazano na zrzucie ekranu podanym poniżej -

Krok 6

Po zainstalowaniu narzędzie AWS będzie dostępne w Eclipse, jak pokazano poniżej -

Krok 7

Po kliknięciu usługi Amazon możesz zobaczyć następujący ekran.

Teraz kliknij AWS Explorer, aby zobaczyć dostępne usługi. W kolejnych rozdziałach omówimy, jak pracować z zainstalowanym IDE.

AWS Lambda to usługa, która zajmuje się obliczaniem Twojego kodu bez żadnego serwera. Mówi się, że jest to obliczenia bezserwerowe. Kod jest wykonywany na podstawie reakcji na zdarzenia w usługach AWS, takie jak dodawanie / usuwanie plików w zasobniku S3, aktualizacja Amazon DynamoDBtables, żądanie HTTP z bramy Amazon Api itp.

Kod AWS Lambda można pisać w NodeJS, Javie, C #, Pythonie i Go. W tym rozdziale szczegółowo omówimy tworzenie funkcji AWS Lambda w konsoli AWS.

Konsola AWS

Zaloguj się do konsoli AWS pod linkiem https://aws.amazon.com/console. Po zalogowaniu się przekieruje Cię do ekranu, na którym wyświetlane są usługi AWS.

Przykład: tworzenie funkcji

Pozwól nam zrozumieć funkcjonalność konsoli AWS za pomocą przykładu. Kliknij Lambda (zaznaczona powyżej), przekieruje do tworzenia funkcji, jak pokazano poniżej -

Kliknij Create function a na ekranie zostaną wyświetlone następujące informacje -

Zwróć uwagę, że domyślnie ta opcja to Author from scratch. Ta opcja pozwala napisać kod Lambda od podstaw. Będzie miał po prostu prostą funkcję zhello world wiadomość.

Druga opcja Blue prints zawiera następujące szczegóły.

Zawiera szczegóły kodu już napisanego dla niektórych usług aws w językach dostępnych w AWS Lambda. W przypadku, gdy musisz napisać kod AWS Lambda dla wszystkich usług, które możesz sprawdzićblue prints i zacznij.

Trzecia opcja Serverless Application Repository posiada konfigurację aplikacji serverless, która pomoże wdrożyć kod AWS Lambda.

W dalszej części dyskusji będziemy pracować nad pierwszą opcją, w której utworzymy funkcję lambda AWS za pomocą Author from scratch.

Zanim utworzymy funkcję Lambda, potrzebna będzie rola tj. Pozwolenie na pracę z usługami AWS oraz aws lambda. Później rola musi zostać przypisana do funkcji lambda aws.

Tworzenie ról w konsoli AWS

Aby utworzyć rolę w konsoli AWS, przejdź do usług konsoli AWS i kliknij IAM, jak pokazano poniżej -

Teraz, jeśli klikniesz IAM, pojawi się ekran, jak pokazano poniżej -

Jeśli wybierzesz Roles, na ekranie widać następujące przyciski -

Teraz kliknij Create role. Poprosi Cię o wybranie usługi, w której chcesz użyć utworzonej roli.

Ponieważ musimy używać tej roli w AWS Lambda, wybierz Lambda i kliknij Next:Permissionsjak pokazano powyżej. Następny ekran wyświetla nazwę polityki, która jest dostępna w ramach usług AWS. Możesz wybrać polisę tutaj -

Na przykład, jeśli chcesz zezwolić AWS Lambda na współpracę z S3 i DynamoDB, musisz wybrać politykę. W polu wyszukiwania wprowadź usługę AWS i kliknij pole wyboru. Możesz wybrać wiele zasad, a następnie kliknąćNext:Review.

Możliwe jest również stworzenie własnej polityki. Na przykład, istnieje tabela dynamodb i musisz nadać uprawnienia tylko tej tabeli, w takich przypadkach możesz utworzyć politykę.

Kliknij Create policyjak pokazano na powyższym ekranie. Poniżej przedstawiono szczegóły wyświetlane na ekranie.

Wybierz Servicedla którego tworzysz politykę. Później wyświetli dane dla działań,resources i Request conditions.

Teraz powinniśmy wybrać usługę. WybierzmyAWS Dynamodb z wyszukiwania. Actions ma następujące szczegóły -

Teraz wprowadź Access levelchcesz przekazać DynamoDB. Następnie,resources wyświetli następujące szczegóły -

Teraz wybierz typ zasobu tabeli. Możesz zobaczyć następujące dane wyjściowe -

Aby uzyskać pozwolenie na stół, musisz Add ARN. ARN to szczegóły, które są unikalne dla tabeli utworzonej w AWS DynamoDB. Szczegóły uzyskasz, gdy tabela zostanie utworzona w dynamodb.

Jeśli klikniesz Add ARN i wyświetli następujące szczegóły -

Teraz, jeśli wpiszesz ARN i Region, Account i Tablenazwa zostanie wypełniona. Powinieneś kliknąćAddprzycisk, aby dodać politykę. Podobnie możesz tworzyć zasady dla innych usług.

Tutaj wybraliśmy dwie zasady AmazonS3FullAccess i AmazonDynamoDBFullACcess. Daliśmy pełny dostęp do S3 i DynamoDB w tej roli. Zaleca się jednak, aby zezwolić tylko na niezbędne zasobniki i tabele.

Możesz wykonać kroki omówione wcześniej, aby utworzyć zasady przy użyciu ARN.

Krok 1

Kliknij Create roleprzycisk, aby utworzyć rolę. Wszystkie utworzone role są wyświetlane, jak pokazano -

Krok 2

Pamiętaj, że możesz wybrać wymaganą rolę, jeśli potrzebujesz modyfikacji dla utworzonej roli. Jeśli wybierzemyAuthor from scratch optionmusisz wejść Name, Runtime and Role.

Krok 3

Możesz zobaczyć następujące szczegóły w Runtime lista rozwijana -

Krok 4

Możesz wybrać żądane środowisko wykonawcze i postępować zgodnie z ilustracją.

Role Lista rozwijana zawiera następujące opcje -

  • Choose an existing role − Spowoduje to wyświetlenie wszystkich ról utworzonych w rolach uprawnień.

  • Create new role from template(s) −Umożliwi to utworzenie roli i wyświetli uprawnienia do wyboru dla tej roli. Obserwuj zrzut ekranu, aby lepiej zrozumieć.

  • Create a custom role − Pozwala to użytkownikowi na tworzenie zasad, jak omówiliśmy wcześniej.

Krok 5

Wybierz runtime, rolei dodaj funkcję. KliknijCreate functionprzycisk, aby utworzyć funkcję lambda. Następny wyświetlany ekran jest następujący -

Części funkcji AWS Lambda

Istnieją dwie części funkcji AWS Lambda:Configuration i Monitoring. Omówmy szczegółowo każdy z nich.

Konfiguracja

Konfiguracja zawiera następujące funkcjonalności.

Add Triggers

Wyzwalacze, które należy dodać do funkcji AWS Lambda są wyświetlane w następujący sposób -

Zauważ, że kiedy wybieramy wyzwalacz, musimy dodać szczegóły konfiguracji dla tego wyzwalacza. Na przykład dla wyzwalacza S3 musimy wybrać nazwę zasobnika; dla wyzwalacza Dynamodb musimy wybrać nazwę tabeli.

Przykład

Zobaczmy przykład szczegółów konfiguracji wyzwalacza S3 -

Teraz dodaj szczegóły konfiguracji dla dodanego wyzwalacza S3 -

Tutaj musisz wybrać bucket name, event type na którym chcesz wyzwolić Lambdę, prefiks i wzorzec filtru, jeśli istnieje i Add spust.

Dodawanie kodu w Lambdzie

Teraz powinniśmy skupić się na napisaniu kodu Lambda. Aby dodać kod w aws lambda, istnieją trzy opcje -

  • Korzystanie z wbudowanego edytora
  • Korzystanie z pliku .zip
  • Prześlij plik z Amazon S3

Pokazuje to poniższy zrzut ekranu -

Omówmy szczegółowo każdy z nich.

Using the inline editor

Wbudowany edytor kodu, w którym możesz napisać swój kod, wygląda następująco:

Możesz napisać swój kod, wybierając odpowiedni język. Tutaj możesz ponownie wybrać środowisko wykonawcze.

Obserwuj poniższy zrzut ekranu, aby lepiej zrozumieć -

Kod należy wpisać index.js.Handler. Szczegóły będą się różnić w zależności od czasu działania. Dlanodejs, to jest filename.export function który jest teraz index.lambda handler.

Upload a .ZIP file

Możesz najpierw napisać kod, spakować go i przesłać plik zip, wybierając Upload a .ZIP file.

Upload a file from Amazon S3

Możesz przesłać plik w zasobniku S3 i wybrać opcję Upload a file from Amazon S3.

Zauważ, że dla .ZIP i S3 nie będzie można zmienić środowiska wykonawczego.

Zmienne środowiska

Biorą pary klucz-wartość i dzielą się nimi z kodem AWS Lambda. Możemy użyć zmiennych środowiskowych w AWS Lambda do przechowywania szczegółów połączenia z bazą danych, szczegółów pliku w celu przechowywania danych wyjściowych, szczegółów pliku dziennika itp.

Tagi

Są to pary klucz-wartość dodawane do AWS Lambda w celu lepszej organizacji funkcji, gdy są używane w różnych regionach. W przypadku prostego użycia nie jest to wymagane. Kiedy jest utworzonych wiele funkcji Lambda, tagowanie pomaga w filtrowaniu i zarządzaniu funkcjami Lambda.

Rola wykonawcza

W tym miejscu możesz ponownie zmienić rolę, jeśli nie została wykonana poprawnie na początku tworzenia funkcji Lambda. Tutaj możesz zaktualizować lub utworzyć nową rolę. Udostępnia te same opcje, które były wyświetlane na początku tworzenia funkcji Lambda.

Podstawowe ustawienia

Tutaj musisz wpisać krótki opis tego, co robi twoja funkcja Lambda. Wybierz pamięć i limit czasu, które są wymagane dla funkcji Lambda.

Sieć

Umożliwia to wybranie VPC, które umożliwi dostęp do funkcji Lambda z VPC. Domyślnie nie jest wybrane żadne VPC.

Debugowanie i obsługa błędów

W przypadku debugowania i obsługi błędów możesz wybrać usługę AWS, aby przesłać szczegóły. Dostępne opcje toNone, SNS i SQS.

Konkurencja

Pozwala to na przydzielenie określonego limitu jednoczesnych wykonań dozwolonych dla tej funkcji.

Audyt i zgodność

Zawiera dzienniki, które są zarządzane za pomocą AWS CloudTrail.

Po zakończeniu musisz zapisać zmiany za pomocą przycisku Zapisz, jak pokazano tutaj -

Teraz, jeśli klikniesz Testprzycisk, zapyta o zdarzenie testowe. Możesz zdać przykładowe zdarzenie testowe w następujący sposób -

Utworzone zdarzenie testowe jest pokazane tutaj -

Teraz zapisz zdarzenie testowe i kliknij przycisk testu, aby zobaczyć wykonanie funkcji AWS Lambda -

Kod dla index.js wygląda następująco -

exports.lambdahandler = (event, context, callback) => {
   // TODO implement
   console.log(event.key1);
   console.log(event.key2);
   console.log(event.key3);
   callback(null, 'Lambda test');
};

Zauważ, że funkcja zwrotna jest wywoływana, gdy wystąpi błąd lub powodzenie. Jeśli się powiedzie, możesz zobaczyćLambda test zostanie wyświetlony.

Monitorowanie

Wybierz zakładkę monitorowanie, aby zobaczyć szczegóły wykonania funkcji Lambda. Wykresy pokazują szczegóły dotyczące czasu wykonania, zaistniałych błędów itp.

Możesz również przeglądać dzienniki w Cloudwatch. W tym celu przejdź do usług AWS i wybierz Cloudwatch, jak pokazano -

Teraz wybierz logi z lewej strony i wprowadź nazwę swojej funkcji w filtrze -

Funkcja AWS Lambda wykonuje kod po jej wywołaniu. W tym rozdziale szczegółowo omówiono wszystkie etapy cyklu życia funkcji AWS Lambda.

Kroki tworzenia funkcji Lambda

Cykl życia funkcji Lambda obejmuje cztery niezbędne kroki -

  • Authoring
  • Deploying
  • Monitoring
  • Troubleshooting

Tworzenie kodu lambda

Kod funkcji AWS Lambda można napisać w następujących językach -

  • NodeJS
  • Java,
  • Python
  • C#
  • Go.

Możemy pisać kod dla AWS Lambda używając konsoli AWS, AWS CLI, z Eclipse IDE, z Visual Studio IDE, bezserwerowego frameworka itp.

Poniższa tabela przedstawia listę języków oraz różnych narzędzi i IDE, których można użyć do napisania funkcji Lambda -

Język IDE do tworzenia kodu lambda
NodeJS

Konsola AWS Lambda

Visual Studio IDE

Jawa Eclipse IDE
Pyton Konsola AWS Lambda
DO#

Visual Studio IDE

.NET core

Iść Konsola AWS Lambda

Wdrażanie kodu lambda

Kiedy już zdecydujesz, w jakim języku chcesz napisać funkcję Lambda, możesz wdrożyć kod na dwa sposoby -

  • Bezpośrednio napisz kod w konsoli AWS
  • Spakuj lub jar pliki ze wszystkimi plikami i zależnościami

Pamiętaj jednak, że plik zip musi mieć odpowiednie pozwolenie.

Testowanie kodu lambda

Kod Lambda można testować pod kątem zdarzeń wewnątrz konsoli AWS Lambda. Możliwe jest również przetestowanie funkcji Lambda z CLI AWS i Cli bezserwerowej. Konsola AWS posiada również dane o zdarzeniach, które mogą posłużyć jako przykładowe zdarzenia podczas testowania funkcji AWS Lambda.

Monitorowanie funkcji Lambda

Monitorowanie funkcji Lambda można wykonać za pomocą AWS CloudWatch. Możemy dodać niezbędne komunikaty dziennika w wybranych przez nas językach i zobaczyć to samo w AWS CloudWatch.

Aby rozpocząć pisanie funkcji Lambda, należy postępować zgodnie ze wzorem. Poniżej przedstawiono główne podstawowe koncepcje, których należy przestrzegać podczas pisania funkcji Lambda -

Treser

Handler to nazwa funkcji lambda AWS, od której rozpoczyna się wykonanie. Pojawia się w konsoli AWS, jak pokazano poniżej -

Zauważ, że tutaj zmieniliśmy domyślną procedurę obsługi na inną nazwę i zaktualizowaliśmy to samo w Handlerze -

Należy zauważyć, że sposób wywoływania programu obsługi różni się od języków wybranych jako środowisko wykonawcze.

Parametry przekazane do handlera

Jeśli obserwujesz funkcję handlera, przekazywane są parametry event, context i call back function jak pokazano poniżej -

Event parametr zawiera wszystkie szczegóły dotyczące używanego wyzwalacza.

ContextParametr zasadniczo zajmuje się szczegółami czasu działania funkcji Lambda do wykonania. Możemy współdziałać z funkcją Lambda za pomocącontextparam. Zawiera szczegóły, takie jak czas pozostały do ​​zakończenia funkcji przez AWS Lambda, tj. Limit czasu określony podczas tworzenia funkcji Lambda, nazwa funkcji Lambda, nazwa grupy Cloudwatch, szczegóły arn itp.

Przykład

Rozumiemy szczegóły uzyskane z obiektu kontekstu AWS Lambda na przykładzie -

exports.lambdahandler = (event, context, callback) => {
   // TODO implement
   console.log("context object details");
   console.log(JSON.stringify(context));
   callback(null, 'Lambda test');
};

Kiedy wykonujesz funkcję Lambda pokazaną powyżej, możesz zobaczyć następujące dane wyjściowe -

Wynik

Plik context szczegóły podano w następujący sposób -

{
   "callbackWaitsForEmptyEventLoop":true,"logGroupName":"/aws/lambda/myfirstlambdafunction",
   "logStreamName":"2018/05/20/[$LATEST]04f17ee4ff7048d5bb1fedffaa807c71","functionName":
   "myfirstlambdafunction","memoryLimitInMB":"128","functionVersion":"$LATEST","invokeid":
   "c931e21c-5bf3-11e8-acfe-47fdbb39eee9","awsRequestId":"c931e21c-5bf3-11e8-acfe-47fdbb39eee9",
   "invokedFunctionArn":"arn:aws:lambda:us-east-1:625297745038:function:myfirstlambdafunction"
}

Zwróć uwagę, że zawiera szczegóły, takie jak functionName, memorylimit, requestId itp.

Logowanie

Dzienniki dodane wewnątrz funkcji Lambda są wyświetlane w AWS CloudWatch, gdy funkcja AWS jest wykonywana. Składnia dzienników będzie się różnić w zależności od wybranego języka. Na przykład wnodejs, to jest console.log.

Oto dane wyjściowe, które możesz zobaczyć w AWSCloudWatch -

Obsługa błędów

Funkcja AWS Lambda udostępnia funkcję zwrotną, która służy do powiadamiania funkcji Lambda o wystąpieniu błędu lub powodzeniu. Zauważ, że tutaj użyliśmy nodejs jako środowiska wykonawczego. Obsługa błędów będzie się różnić w zależności od wybranego języka.

Aby lepiej zrozumieć, zapoznaj się z podanym tutaj przykładem -

exports.lambdahandler = (event, context, callback) => {
   // TODO implement
   var error = new Error("There is error in code");
   callback(error);
};

Wynik

Podczas testowania kodu Lambda można znaleźć dane wyjściowe, jak pokazano poniżej -

Szczegóły dziennika w następujący sposób -

Nodejs to jeden z języków obsługiwanych przez funkcję AWS Lambda. Wersje obsługiwane przez nodejs to 6.10 i 8.10. W tym rozdziale szczegółowo poznamy różne funkcjonalności AWS Lambda w NODEJS.

Handler w NodeJS

Aby napisać funkcję AWS Lambda w nodejs, powinniśmy najpierw zadeklarować handler. Program obsługi w nodejs to nazwa pliku i nazwa funkcji eksportu. Na przykład nazwa pliku toindex.js a nazwa funkcji eksportu to lambda handler, więc jego odpowiedni program obsługi to index.lambdahandler

Obserwuj przykładową obsługę pokazaną tutaj -

exports.lambdahandler = function(event, context, callback) {   //code goes here}

Parametry dla obsługi

Handler jest głównym rdzeniem budowania funkcji Lambda. Program obsługi przyjmuje trzy parametry:event, context i callback.

Parametr zdarzenia

Zawiera wszystkie szczegóły wywołanego zdarzenia. Na przykład, jeśli używamy funkcji Lambda do wyzwolenia na S3, zdarzenie będzie miało szczegóły obiektu S3.

Parametr kontekstu

Zawiera szczegóły kontekstu, takie jak właściwości i szczegóły konfiguracji funkcji Lambda.

Funkcja oddzwaniania

Pomaga w przekazywaniu szczegółów rozmówcy. Struktura wywołania zwrotnego wygląda następująco -

callback(error, result);

Parametry funkcji zwrotnej są wyjaśnione poniżej -

Error −Będzie zawierał szczegółowe informacje, jeśli wystąpił błąd podczas wykonywania funkcji Lambda. Jeśli funkcja Lambda się powiedzie,null może być przekazany jako pierwszy parametr funkcji zwrotnej.

Result −To da szczegóły pomyślnego wykonania funkcji lambda. Jeśli wystąpi błąd, parametr wyniku jest ignorowany.

Note −Korzystanie z funkcji zwrotnej w AWS Lambda nie jest obowiązkowe. W przypadku, gdy nie ma funkcji zwrotnej, program obsługi zwróci ją jako null.

Prawidłowe podpisy zwrotne podano poniżej -

callback();                // It will return success, but no indication to the caller
callback(null);            // It will return success, but no indication to the caller
callback(null, "success"); // It will return the success indication to the caller
callback(error);           //  It will return the error indication to the caller

Za każdym razem, gdy AWS Lambda zostanie wykonana, szczegóły wywołania zwrotnego, takie jak błąd lub sukces, są rejestrowane w AWS CloudWatch wraz z komunikatami konsoli, jeśli takie istnieją.

Praca z AWS Lambda w Nodejs 8.10

Zrozummy, jak pracować z AWS Lambda w nodejs8.10 i wywołaj funkcję w sposób synchroniczny i asynchroniczny.

Wywołanie funkcji Lambda w sposób synchroniczny

Poniższy przykład daje wyobrażenie o wywoływaniu funkcji Lambda w sposób zsynchronizowany -

exports.handler = function(event, context, callback) {
   let arrItems = [4,5,6,8,9,10,35,70,80,31];
   function countevennumbers (items) {
      return new Promise(resolve => {
         setTimeout(() => {
            let a = 0;
            for (var i in items) {
               if (items[i] % 2 == 0) {
                  a++;
               } 
            }
            resolve(a);
         },2000);
      });
   }
   let evennumber = countevennumbers(arrItems);
   callback(null,'even numbers equals ='+evennumber);
};

Po przetestowaniu tego kodu w konsoli AWS można zaobserwować następujące dane wyjściowe -

Zauważ, że wynik powyższego kodu jest obiektem obietnicy. Nie podaje liczby, ponieważ liczba jest zwiększana wewnątrz setTimeout, a wywołanie funkcji nie czeka na wykonanie wewnątrz setTimeout i zwraca obiekt obietnicy.

Gdybyśmy mieli async/await na funkcji obsługi otrzyma dokładne dane wyjściowe z funkcji lambda.

Wywoływanie programu obsługi w sposób asynchroniczny

Poniższy przykład przedstawia sposób wywoływania funkcji Lambda w sposób asynchroniczny -

exports.handler = async function(event, context, callback) {
   let arrItems = [4,5,6,8,9,10,35,70,80,31];
   function countevennumbers (items) {
      return new Promise(resolve => {
         setTimeout(() => {
            let a = 0;
            for (var i in items) {
               if (items[i] % 2 == 0) {
                  a++;
               } 
            }
            resolve(a);
         }, 2000);
      });
   }
   let evennumber = await countevennumbers(arrItems);
   callback(null,'even numbers equals ='+evennumber);
};

Dodaliśmy async i awaitw powyższym kodzie. Kiedy używamyawaitpoza wywołaniem funkcji wykonanie zatrzymuje się, aż obietnica wewnątrz funkcji zostanie rozwiązana. Zwróć na to uwagęawait obowiązuje tylko dla async Funkcje.

Po przetestowaniu tego kodu w konsoli AWS można zaobserwować następujące dane wyjściowe -

ContextDetails w NodeJS

Obiekt kontekstowy podaje szczegóły, takie jak nazwa funkcji Lambda, pozostały czas w milisekundach, identyfikator żądania, nazwa grupy Cloudwatch, szczegóły limitu czasu itp.

W poniższych tabelach przedstawiono listę metod i atrybutów dostępnych z obiektem kontekstu -

Metoda dostępna dla obiektu kontekstu

Sr.No Nazwa i opis metody
1

getRemainingTimeInMillis()

Ta metoda podaje pozostały czas w milisekundach do zakończenia funkcji przez funkcję Lambda

Atrybuty dostępne dla obiektu kontekstu

Sr.No Nazwa i opis atrybutu
1

functionName

Daje to nazwę funkcji AWS Lambda

2

functionVersion

To daje wersję wykonywania funkcji AWS Lambda

3

nvokedFunctionArn

To poda szczegóły ARN.

4

memoryLimitInMB

Pokazuje limit pamięci dodany podczas tworzenia funkcji Lambda

5

awsRequestId

Daje to identyfikator żądania AWS.

6

logGroupName

W ten sposób zostanie podana nazwa grupy Cloudwatch

7

logStreamName

W ten sposób zostanie podana nazwa strumienia dziennika Cloudwatch, w którym zapisywane są dzienniki.

8

identity

W ten sposób uzyskasz szczegółowe informacje na temat dostawcy tożsamości amazon cognito w przypadku korzystania z zestawu SDK AWS Mobile.

Podane szczegóły są następujące -

  • identity.cognito_identity_id
  • identity.cognito_identity_pool_id
9

clientContext

Spowoduje to szczegółowe informacje o aplikacji klienckiej używanej z zestawem aws mobile sdk. Podane szczegóły są następujące -

  • client_context.client.installation_id
  • client_context.client.app_title
  • client_context.client.app_version_name
  • client_context.client.app_version_code
  • client_context.client.app_package_name
  • client_context.custom - zawiera informacje o niestandardowych wartościach z aplikacji klienta mobilnego
  • client_context.env - zawiera szczegóły środowiska z AWS Mobile SDK

Spójrz na poniższy przykład, aby lepiej zrozumieć obiekt kontekstu -

exports.handler = (event, context, callback) => {
   // TODO implement
   console.log('Remaining time =>', context.getRemainingTimeInMillis());
   console.log('functionName =>', context.functionName);
   console.log('AWSrequestID =>', context.awsRequestId);
   console.log('logGroupName =>', context.log_group_name);
   console.log('logStreamName =>', context.log_stream_name);
   console.log('clientContext =>', context.clientContext);
   callback(null, 'Name of aws Lambda is=>'+context.functionName);
};

Po przetestowaniu tego kodu w konsoli AWS można zaobserwować następujące dane wyjściowe -

Po przetestowaniu tego kodu w konsoli AWS można zobaczyć następujące dane wyjściowe dziennika -

Logowanie do NodeJS

Do logowania w NodeJS możemy użyć console.log, a szczegóły dziennika można pobrać z usługi CloudWatch na podstawie funkcji Lambda.

Zapoznaj się z następującym przykładem, aby lepiej zrozumieć -

exports.handler = (event, context, callback) => {
   // TODO implement
   console.log('Logging for AWS Lamnda in NodeJS');
   callback(null, 'Name of aws Lambda is=>'+context.functionName);
};

Po przetestowaniu tego kodu w konsoli AWS można zaobserwować następujące dane wyjściowe -

Możesz zobaczyć następujący zrzut ekranu z CloudWatch -

Obsługa błędów w NodeJS

Pozwól nam zrozumieć, jak odbywa się powiadamianie o błędach w NodeJS. Przestrzegaj następującego kodu -

exports.handler = function(event, context, callback) {
   // This Source code only throws error. 
   var error = new Error("something is wrong");
   callback(error);   
};

W danych wyjściowych dziennika można zaobserwować:

Szczegóły błędu są podane w wywołaniu zwrotnym w następujący sposób -

{
   "errorMessage": "something is wrong",
   "errorType": "Error",
   "stackTrace": [    "exports.handler (/var/task/index.js:2:17)"  ]
}

W tym rozdziale wyjaśnimy szczegółowo, jak szczegółowo stworzyć prostą funkcję AWS Lambda w Javie.

Tworzenie pliku JAR w Eclipse

Przed przystąpieniem do pracy nad tworzeniem funkcji lambda w AWS, potrzebujemy wsparcia AWS Toolkit dla Eclipse. Aby uzyskać wskazówki dotyczące instalacji tego samego, możesz zapoznać się zEnvironment Setup rozdział w tym samouczku.

Po zakończeniu instalacji wykonaj kroki podane tutaj -

Krok 1

Otwórz Eclipse IDE i utwórz nowy projekt za pomocą AWS Lambda Java Project. Aby lepiej zrozumieć, spójrz na poniższy zrzut ekranu -

Krok 2

Po wybraniu Next, przekieruje Cię do ekranu pokazanego poniżej -

Krok 3

Teraz tworzony jest domyślny kod dla typu danych wejściowych Custom. Po kliknięciuFinish przycisk projekt zostanie utworzony, jak pokazano poniżej -

Krok 4

Teraz kliknij prawym przyciskiem myszy swój projekt i wyeksportuj go. WybierzJava / JAR plik z Export kreatora i kliknij Next.

Krok 5

Teraz, jeśli klikniesz Next, pojawi się monit o zapisanie pliku w folderze docelowym, o który zostanie wyświetlony monit po kliknięciu Dalej.

Po zapisaniu pliku wróć do konsoli AWS i utwórz funkcję AWS Lambda dla Javy.

Krok 6

Teraz prześlij plik .jar plik, który utworzyliśmy przy użyciu Upload przycisk, jak pokazano na zrzucie ekranu podanym poniżej -

Szczegóły obsługi języka Java

Handler jest package name i class name. Spójrz na poniższy przykład, aby szczegółowo zrozumieć obsługę -

Przykład

package com.amazonaws.lambda.demo;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler
      
        { @Override public String handleRequest(Object input, Context context) { context.getLogger().log("Input: " + input); // TODO: implement your handler return "Hello from Lambda!"; } } 
      

Zauważ, że z powyższego kodu, handlerem będzie com.amazonaws.lambda.demo.LambdaFunctionHandler

Przetestujmy teraz zmiany i zobaczmy wyniki -

Obiekt kontekstu w Javie

Interakcja z uruchomieniem AWS Lambda odbywa się za pomocą kontekstu. Udostępnia następujące metody do użycia w Javie -

Sr.No Metody kontekstowe i opis
1

getMemoryLimitInMB()

da to limit pamięci określony podczas tworzenia funkcji lambda.

2

getFunctionName()

to da nazwę funkcji lambda.

3

getFunctionVersion()

da to wersję uruchomionej funkcji lambda.

4

getInvokedFunctionArn()

to da ARN użyty do wywołania funkcji.

5

getAwsRequestId()

da to identyfikator żądania aws. Ten identyfikator jest tworzony dla funkcji lambda i jest unikalny. Identyfikatora można używać z obsługą aws, jeśli napotkasz jakiekolwiek problemy.

6

getLogGroupName()

da to nazwę grupy AWS Cloudwatch połączoną z utworzoną funkcją aws lambda. Będzie zerowa, jeśli użytkownik iam nie ma uprawnień do rejestrowania w chmurze.

7

getClientContext()

w ten sposób uzyskasz szczegółowe informacje o aplikacji i urządzeniu w przypadku korzystania z zestawu aws mobile sdk. Poda szczegóły, takie jak nazwa i kod wersji, identyfikator klienta, tytuł, nazwa pakietu aplikacji. Może być zerowa.

8

getIdentity()

dostarczy to szczegółowych informacji o tożsamości amazon cognito w przypadku użycia z aws mobile sdk. Może być zerowa.

9

getRemainingTimeInMillis()

da to pozostały czas wykonania w milisekundach, gdy funkcja zostanie zakończona po określonym czasie.

10

getLogger()

da to rejestrator lambda połączony z obiektem kontekstu.

Teraz zaktualizujmy kod podany powyżej i przyjrzyjmy się wynikom niektórych metod wymienionych powyżej. Aby lepiej zrozumieć, zapoznaj się z przykładowym kodem podanym poniżej -

package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
   @Override
   public String handleRequest(Object input, Context context) {
      context.getLogger().log("Input: " + input);
      System.out.println("AWS Lambda function name: " + context.getFunctionName());
      System.out.println("Memory Allocated: " + context.getMemoryLimitInMB());
      System.out.println("Time remaining in milliseconds: " + context.getRemainingTimeInMillis());
      System.out.println("Cloudwatch group name " + context.getLogGroupName());
      System.out.println("AWS Lambda Request Id " + context.getAwsRequestId());
      
      // TODO: implement your handler
      return "Hello from Lambda!";
   }
}

Po uruchomieniu powyższego kodu możesz znaleźć dane wyjściowe podane poniżej -

Dzienniki kontekstu

Podczas przeglądania danych wyjściowych dziennika można obserwować następujące dane wyjściowe:

Pamięć przydzielona dla funkcji Lambda to 512 MB. Przeznaczony czas to 25 sekund. Pozostały czas, jak pokazano powyżej, to 24961, czyli w milisekundach. Tak więc 25000 - 24961, co odpowiada 39 milisekundom, jest używane do wykonania funkcji Lambda. Zwróć uwagę, że nazwa grupy Cloudwatch i identyfikator żądania są również wyświetlane, jak pokazano powyżej.

Zauważ, że użyliśmy następującego polecenia do wydrukowania dzienników w Javie -

System.out.println (“log message”)

To samo jest dostępne w CloudWatch. W tym celu przejdź do usług AWS, wybierzCloudWatchservices i kliknij Logs.

Teraz, jeśli wybierzesz funkcję Lambda, wyświetli ona datę logów, jak pokazano poniżej -

Logowanie w Javie

Możesz również użyć Lambdaloggera w Javie, aby zarejestrować dane. Zwróć uwagę na następujący przykład, który pokazuje to samo -

Przykład

package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
   @Override
   public String handleRequest(Object input, Context context) {
      LambdaLogger logger = context.getLogger();
      logger.log("Input: " + input);
      logger.log("AWS Lambda function name: " + context.getFunctionName()+"\n");
      logger.log("Memory Allocated: " + context.getMemoryLimitInMB()+"\n");
      logger.log("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()+"\n");
      logger.log("Cloudwatch group name " + context.getLogGroupName()+"\n");
      logger.log("AWS Lambda Request Id " + context.getAwsRequestId()+"\n");
      
      // TODO: implement your handler
      return "Hello from Lambda!";
   }
}

Kod pokazany powyżej daje następujące dane wyjściowe -

Dane wyjściowe w CloudWatch będą wyglądać tak, jak pokazano poniżej -

Obsługa błędów w Javie dla funkcji Lambda

W tej sekcji wyjaśniono, jak radzić sobie z błędami w Javie dla funkcji Lambda. Obserwuj następujący kod, który pokazuje to samo -

package com.amazonaws.lambda.errorhandling;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
   @Override
   public String handleRequest(Object input, Context context) {
      throw new RuntimeException("Error from aws lambda");
   } 
}

Zwróć uwagę, że szczegóły błędu są wyświetlane w formacie json format z errorMessage Error from AWS Lambda. PonadtoErrorType i stackTrace podaje więcej szczegółów na temat błędu.

Dane wyjściowe i odpowiadające im dane wyjściowe dziennika kodu podanego powyżej będą wyglądać tak, jak pokazano na poniższych zrzutach ekranu podanych poniżej -

W tym rozdziale utworzymy prostą funkcję AWS Lambda w Pythonie i po szczegółach zrozumiemy jej koncepcje pracy.

Przed przystąpieniem do pracy nad tworzeniem funkcji Lambda w AWS potrzebujemy wsparcia AWS Toolkit dla Pythona. W tym celu postępuj zgodnie z poniższymi krokami i obserwuj załączone zrzuty ekranu -

Krok 1

Zaloguj się do konsoli AWS i utwórz funkcję Lambda i wybierz język jako Python.

Krok 2

Teraz kliknij Create functioni wprowadź szczegóły tworzenia prostej AWS Lambda w Pythonie. Ten kod zwraca wiadomośćHello from Lambda using Python i wygląda jak pokazano tutaj -

Krok 3

Teraz zapisz zmiany i przetestuj kod, aby zobaczyć dane wyjściowe. Powinieneś zobaczyć następujące dane wyjściowe i dzienniki, gdy testujesz je w konsoli AWS za pomocą przycisku testu z interfejsu użytkownika.

Krok 4

Teraz możesz pisać kod w dowolnym edytorze lub środowisku IDE dla Pythona. Tutaj używamy kodu Visual Studio do pisania kodu. Powinieneś później spakować plik i przesłać go w konsoli AWS.

Tutaj spakowaliśmy kod i używamy go w konsoli AWS.

Krok 5

Teraz wybierz Upload a .ZIP file opcja, jak pokazano poniżej -

Szczegóły obsługi dla języka Python

Zauważ, że procedura obsługi musi być nazwą pliku, po której następuje nazwa funkcji. W powyższym przypadku nasza nazwa pliku tohellopython.py a nazwa funkcji to my_handler; więc przewodnik będzie hellopython.my_handler.

Po zakończeniu przesyłania i zapisaniu zmian, faktycznie pokazuje szczegóły pliku zip w edytorze online w konsoli AWS Lambda. Teraz przetestujmy kod, aby zobaczyć dane wyjściowe i dzienniki.

Przyjrzyjmy się teraz szczegółom funkcji Lambda, korzystając z następującego przykładowego kodu -

def my_handler(event, context):
   return "aws lambda in python using zip file"

W powyższym kodzie nazwa funkcji my_handler ma 2 parametry, zdarzenie i kontekst.

Obiekt kontekstu w Pythonie

Obiekt kontekstowy podaje szczegóły, takie jak nazwa funkcji Lambda, pozostały czas w milisekundach, identyfikator żądania, nazwa grupy obserwacyjnej w chmurze, szczegóły limitu czasu itp.

Metody i atrybuty dostępne na obiekcie kontekstu są pokazane w tabelach poniżej -

Sr.No Nazwa i opis metody
1

get_remaining_time_in_millis()

Ta metoda podaje pozostały czas w milisekundach do zakończenia funkcji przez funkcję lambda

Sr.No Atrybut i opis
1

function_name

Daje to nazwę funkcji lambda aws

2

function_version

Daje to wersję wykonywanej funkcji lambda aws

3

invoked_function_arn

To poda szczegóły ARN.

4

memory_limit_in_mb

Pokazuje limit pamięci dodany podczas tworzenia funkcji lambda

5

aws_request_id

Daje to identyfikator żądania aws.

6

og_group_name

W ten sposób zostanie podana nazwa grupy Cloudwatch

7

log_stream_name

W ten sposób zostanie podana nazwa strumienia dziennika Cloudwatch, w którym zapisywane są dzienniki.

8

identity

W ten sposób uzyskasz szczegółowe informacje na temat dostawcy tożsamości amazon cognito w przypadku korzystania z zestawu SDK AWS Mobile. Podane szczegóły są następujące -

  • identity.cognito_identity_id
  • identity.cognito_identity_pool_id
9

client_context

Spowoduje to szczegółowe informacje o aplikacji klienckiej używanej z zestawem aws mobile sdk. Podane szczegóły są następujące -

  • client_context.client.installation_id
  • client_context.client.app_title
  • client_context.client.app_version_name
  • client_context.client.app_version_code
  • client_context.client.app_package_name
  • client_context.custom - zawiera informacje o niestandardowych wartościach z aplikacji klienta mobilnego
  • client_context.env - zawiera szczegółowe informacje o środowisku z AWS Mobile SDK

Zobaczmy działający przykład w Pythonie, który wyświetla szczegóły kontekstu. Przestrzegaj kodu podanego poniżej -

def my_handler(event, context):
   print("Log stream name:", context.log_stream_name)
   print("Log group name:",  context.log_group_name)
   print("Request ID:",context.aws_request_id)
   print("Mem. limits(MB):", context.memory_limit_in_mb)
   print("Time remaining (MS):", context.get_remaining_time_in_millis())
   return "aws lambda in python using zip file"

Odpowiednie wyjście powyższego kodu podano poniżej -

Logowanie za pomocą Pythona

Aby zalogować informacje za pomocą Pythona, możemy skorzystać z dostępnej funkcji print lub logger. Skorzystajmy z powyższego przykładu kontekstu i sprawdźmy wCloudWatch, czy logi są drukowane. Przestrzegaj następującego kodu -

def my_handler(event, context):
   print("Log stream name:", context.log_stream_name)
   print("Log group name:",  context.log_group_name)
   print("Request ID:",context.aws_request_id)
   print("Mem. limits(MB):", context.memory_limit_in_mb)
   print("Time remaining (MS):", context.get_remaining_time_in_millis())
   return "aws lambda in python using zip file"

Dane wyjściowe tego kodu w CloudWatch są pokazane poniżej -

Przyjrzyj się poniższemu przykładowi, aby zrozumieć, jak używać rejestratora do drukowania dzienników w CloudWatch -

import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def my_handler(event, context):
   logger.info('Using logger to print messages to cloudwatch logs')
   return "aws lambda in python using zip file"

Wynik dla tego będzie taki, jak pokazano na zrzucie ekranu podanym poniżej -

Obsługa błędów w Pythonie dla funkcji Lambda

W tej sekcji zobaczmy działający przykład, który pokazuje, jak obsługiwać błędy w Pythonie. Obserwuj fragment kodu podany tutaj -

def error_handler(event, context):
   raise Exception('Error Occured!')

Ekran dziennika wygląda tak, jak pokazano na ilustracji tutaj -

Obsługa języka Go to niedawny dodatek do AWS. Aby pracować z Go, musisz wybrać język z konsoli AWS podczas tworzenia funkcji AWS Lambda. W tym rozdziale zapoznajmy się szczegółowo z funkcją AWS Lambda w języku Go.

Instalowanie Go

Aby rozpocząć, potrzebujemy wsparcia w języku Go. W tej sekcji omówimy następujące szczegóły, aby rozpocząć pracę z AWS Lambda in Go. To jest oficjalna strona pobierania Go:https://golang.org/dl/

Teraz pobierz pakiet zgodnie z systemem operacyjnym. Postępuj zgodnie z procedurą podaną tutaj, aby zainstalować Go w odpowiednim systemie operacyjnym.

Instalacja w systemie Windows

Zauważ, że dla systemu Windows dostępne jest pobieranie w wersji 32-bitowej i 64-bitowej. Pobierz plik zip, wyodrębnij zawartość i zapisz ją w wybranym katalogu.

Dodaj zmienne środowiskowe dostępne pod adresem ControlPanel ---> System ---> Advanced system settings.

Teraz kliknij Environment Variables i dodaj ścieżkę do katalogu, jak pokazano tutaj -

Możesz również edytować zmienną systemową, jak pokazano tutaj -

Po wykonaniu tych kroków powinieneś być w stanie rozpocząć pracę z Go. Otwórz wiersz polecenia i sprawdź wersję polecenia Przejdź. Obserwuj poniższy zrzut ekranu dla tego samego.

Instalacja w systemach Linux i Mac OS

Aby zainstalować pakiety w systemie Linux i Mac OS, postępuj zgodnie z instrukcjami, jak pokazano poniżej -

Rozpakuj paczki i przechowuj je na miejscu /usr/local/go. Teraz dodaj/usr/local/go/bindo zmiennej środowiskowej PATH. Można to zrobić za pomocą/etc/profile lub $HOME/.profile.

W tym celu możesz użyć następującego polecenia

export PATH=$PATH:/usr/local/go/bin

Aby dodać obsługę AWS do systemów Windows, Linux i Mac, użyj następującego polecenia w wierszu poleceń git -

go.exe get -u github.com/aws/aws-lambda-go/lambda 
go.exe get -u github.com/aws/aws-lambda-go/lambdacontext
go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip

Aby skompilować kod Windows / Linux / Mac, użyj następujących poleceń -

GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main

Funkcja AWS Lambda za pomocą GO

Program zwrócony w Go, gdy kompilacja daje plik wykonywalny. Poniżej znajduje się prosty program w Go z obsługą AWS Lambda. Musimy zaimportowaćgithub.com/aws/aws-lambda-go/lambda, ponieważ ma to funkcjonalność programowania Lambda. Inną ważną potrzebą AWS Lambda jest handler.

Main.go

// main.go
package main

import (
   "github.com/aws/aws-lambda-go/lambda"
)
func hello() (string, error) {
   return "Hello Lambda", nil
}
func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Zwróć uwagę, że wykonanie Goprogram zaczyna się od głównego, gdzie lambda. start jest wywoływany za pomocą funkcji obsługi. Przestrzegaj kodu pokazanego poniżej -

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Teraz uruchommy powyższy plik za pomocą polecenia Go, a następnie spakuj plik wykonywalny.

Struktura pliku, którego używaliśmy, jest taka, jak pokazano tutaj -

Z go build, tworzy plik wykonywalny o nazwie main.exe. Aby spakować plik i przesłać go do AWS Lambda, możesz skorzystać z następującej procedury -

Aby skompilować kod Windows / Linux / Mac, użyj następujących poleceń -

GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main

Następnie zaloguj się do konsoli AWS i utwórz funkcję Lambda za pomocą Go jako środowisko wykonawcze -

Po utworzeniu funkcji prześlij plik wykonywalny zip utworzony powyżej.

Obsługa funkcji lambda z Go

Handler to miejsce, w którym rozpoczyna się wykonywanie programu Go. Od głównego połączenia dolambda.start, wykonanie jest wywoływane za pomocą funkcji obsługi. Zauważ, że program obsługi, który ma zostać dodany, będziemain.

Obserwuj kod tutaj, aby zrozumieć -

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Postępuj zgodnie z zrzutami ekranu podanymi poniżej -

Teraz zapisz funkcję i przetestuj ją. Możesz zobaczyć wynik wykonania, jak pokazano tutaj.

Odpowiednie dane wyjściowe dziennika będą wyglądać tak, jak pokazano tutaj -

Obiekt kontekstu z Go

AWS Lambda in Go podaje następujące zmienne globalne i właściwości kontekstu.

  • MemoryLimitInMB - Limit pamięci w MB, który jest skonfigurowany w aws lambda.

  • FunctionName - nazwa funkcji lambda aws.

  • FunctionVersion - wersja wykonywania funkcji lambda aws.

  • LogStreamName - nazwa strumienia dziennika Cloudwatch.

  • LogGroupName - nazwa grupy Cloudwatch.

Właściwości dostępne w kontekście są podane jako -

AwsRequestID

To jest identyfikator żądania AWS, który otrzymujesz po wywołaniu funkcji AWS Lambda.

ClientContext

Zawiera szczegółowe informacje o aplikacji klienckiej i urządzeniu, gdy jest ona wywoływana przez AWS Mobile SDK. Może być zerowa. Kontekst klienta zawiera szczegółowe informacje, takie jak identyfikator klienta, tytuł aplikacji, nazwa wersji, kod wersji i nazwa pakietu aplikacji.

InvokedFunctionArn

ARN wywołanej funkcji. Niekwalifikowany ARN wykonuje wersję $ LATEST, a aliasy wykonują wersję funkcji, na którą wskazuje.

Tożsamość

Zawiera szczegółowe informacje na temat dostawcy tożsamości Amazon Cognito, gdy jest używany z mobilnym SDK AWS.

Zmiany dodane do main.go wydrukować szczegóły kontekstu -

// main.go
package main

import (
   "context"
   "log"
   "github.com/aws/aws-lambda-go/lambda"
   "github.com/aws/aws-lambda-go/lambdacontext"
)

func hello(ctx context.Context) (string, error) {
   lc, _ := lambdacontext.FromContext(ctx);
   log.Print(lc);
   log.Print(lc.AwsRequestID);
   log.Print(lc.InvokedFunctionArn);
   return "Hello Lambda", nil
}

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Musimy zaimportować log i lambda contextużywać go z Go. Szczegóły kontekstu są następujące -

func hello(ctx context.Context) (string, error) {
   lc, _ := lambdacontext.FromContext(ctx);
   log.Print(lc);
   log.Print(lc.AwsRequestID);
   log.Print(lc.InvokedFunctionArn);	
   return "Hello Lambda", nil
}

Podczas testowania powyższego kodu można zaobserwować następujące dane wyjściowe -

Rejestrowanie danych

Z Go możesz rejestrować dane za pomocą modułu log lub fmt, jak pokazano poniżej -

// main.go
package main

import (
   "log"
   "fmt"
   "github.com/aws/aws-lambda-go/lambda"
)

func hello() (string, error) {
   log.Print("Hello from Lambda Go using log");
   fmt.Print("Hello from Lambda Go using fmt");
   return "Hello Lambda", nil
}

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Wynik dla tego samego jest taki, jak pokazano poniżej -

Sprawdzanie dzienników w CloudWatch

Możesz również zobaczyć dzienniki w CloudWatch. W tym celu przejdź do usługi AWS i wybierz Cloudwatch i kliknijLogspo lewej stronie. Teraz wyszukaj funkcję Lambda na liście, aby zobaczyć dzienniki -

Błędy funkcji

Możesz stworzyć niestandardową obsługę błędów w AWS Lambda za pomocą modułu błędów, jak pokazano w poniższym kodzie -

// main.go
package main
import (
   "errors"
   "github.com/aws/aws-lambda-go/lambda"
)

func hello() error  {
   return errors.New("There is an error in the code!")
}

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Dane wyjściowe dla powyższego kodu są podane poniżej -

W tym rozdziale szczegółowo wyjaśnimy, jak pracować z funkcją AWS Lambda w języku C #. Tutaj zamierzamy użyć Visual Studio do napisania i wdrożenia kodu do AWS Lambda. Aby uzyskać wszelkie informacje i pomoc dotyczącą instalacji programu Visual Studio i dodawania zestawu narzędzi AWS do programu Visual Studio, zapoznaj się zIntroductionrozdział w tym samouczku. Po zakończeniu instalacji programu Visual Studio wykonaj czynności podane poniżej. Zapoznaj się z odpowiednimi zrzutami ekranu, aby lepiej zrozumieć -

Krok 1

Otwórz program Visual Studio i postępuj zgodnie z instrukcjami, aby utworzyć nowy projekt. KliknijFile -> New -> Project.

Krok 2

Teraz zostanie wyświetlony następujący ekran, na którym można dokonać wyboru AWS Lambda for Visual C#. WybierzAWS Lambda Project (.NET Core).

W razie potrzeby możesz zmienić nazwę, zachowa tutaj nazwę domyślną. KliknijOK kontynuować.

W następnym kroku zostaniesz poproszony o wybranie pliku Blueprint.

Wybierz Empty function dla tego przykładu i kliknij Finish. Utworzy nową strukturę projektu, jak pokazano poniżej -

Teraz wybierz Function.cs który jest głównym plikiem, w którym tworzona jest procedura obsługi ze zdarzeniem i kontekstem dla AWS Lambda.

Widok pliku Functions.cs wygląda następująco -

Możesz użyć polecenia podanego poniżej, aby serializować parametry wejściowe i wyjściowe do funkcji AWS Lambda.

[assembly: 
LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

Szczegóły obsługi dla języka C #

Program obsługi jest wyświetlany w następujący sposób -

public string FunctionHandler(string input, ILambdaContext context) {
   return input?.ToUpper();
}

Różne elementy powyższego kodu wyjaśniono poniżej -

FunctionHandler −To jest punkt wyjścia funkcji C # AWS Lambda.

String input − Parametry do programu obsługi string input zawiera wszystkie dane o zdarzeniach, takie jak obiekt S3, szczegóły bramy API itp.

ILambdaContext context −ILamdaContext to interfejs, który ma szczegóły kontekstu. Zawiera szczegóły, takie jak nazwa funkcji lambda, szczegóły pamięci, szczegóły limitu czasu itp.

Program obsługi Lambda można wywołać w sposób synchroniczny i asynchroniczny. Jeśli zostanie wywołany w sposób synchronizacyjny, jak pokazano powyżej, możesz mieć typ zwracany. Jeśli async, to typ zwracany musi być nieważny.

Teraz zastosujmy AWS Lambda C # i przetestujmy to samo. Kliknij projekt prawym przyciskiem myszy i kliknijPublish to AWS Lambda jak pokazano poniżej -

Wypełnij Function Name i kliknij Next. Następny wyświetlany ekran toAdvanced Function Details jak pokazano -

Wejdz do Role Name, Memory i Timeout. szczegóły Zwróć uwagę, że tutaj wybraliśmy istniejącą utworzoną rolę i używaliśmy pamięci jako 128 MB, a limit czasu to 10 sekund. Po zakończeniu kliknijUpload do publikacji na konsoli AWS Lambda.

Możesz zobaczyć następujący ekran po załadowaniu funkcji AWS Lambda. KliknijInvokedo wykonania utworzonej funkcji AWS Lambda. Obecnie pokazuje błąd, ponieważ wymaga pewnych danych wejściowych zgodnie z napisanym kodem.

Teraz wprowadźmy przykładowe dane wejściowe i Invoketo znowu. Zwróć uwagę, że tutaj wpisaliśmy tekst w polu wprowadzania i to samo po kliknięciuinvokejest wyświetlany wielkimi literami w sekcji odpowiedzi. Dane wyjściowe dziennika są wyświetlane poniżej -

Teraz sprawdźmy również konsolę AWS, aby zobaczyć, czy funkcja została utworzona tak, jak wdrożyliśmy funkcję z programu Visual Studio.

Utworzona powyżej funkcja Lambda to aws lambda using csharp i to samo jest wyświetlane w konsoli AWS, jak pokazano na zrzutach ekranu podanych poniżej -

Podpis opiekuna

Handler to punkt startowy do wykonania przez AWS. Nazwę osoby obsługującej należy zdefiniować jako -

ASSEMBLY::TYPE::METHOD

Szczegóły podpisu wyjaśniono poniżej -

ASSEMBLY- To jest nazwa zestawu .NET dla utworzonej aplikacji. Jest to w zasadzie nazwa folderu, z którego tworzony jest projekt.

TYPE- To jest imię przewodnika. W zasadzie jest to namespace.classname.

METHOD - To jest nazwa programu obsługi funkcji.

Kod podpisu obsługi jest pokazany poniżej -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;

// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

namespace AWSLambda3 {
   public class Function {

      /// <summary>
      /// A simple function that takes a string and does a ToUpper
      /// </summary>
      /// <param name="input"></param>
      /// <param name="context"></param>
      /// <returns></returns>
      public string FunctionHandler(string input, ILambdaContext context) {
         return input?.ToUpper();
      }
   }
}

Zwróć uwagę, że tutaj jest zespół AWSLamda3, Type to namespace.classname, czyli AWSLambda3.Function a metoda jest FunctionHandler. Tak więc podpis programu obsługi toAWSLamda3::AWSLambda3.Function::FunctionHandler

Obiekt kontekstu w C #

Obiekt kontekstu dostarcza przydatnych informacji o środowisku wykonawczym w środowisku AWS. Właściwości dostępne w obiekcie kontekstu są pokazane w poniższej tabeli -

Sr.No Właściwości i opis
1

MemoryLimitInMB

To da szczegóły pamięci skonfigurowanej dla funkcji AWS Lambda

2

FunctionName

Nazwa funkcji AWS Lambda

3

FunctionVersion

Wersja funkcji AWS Lambda

4

InvokedFunctionArn

ARN użył do wywołania tej funkcji.

5

AwsRequestId

Identyfikator żądania AWS dla utworzonej funkcji AWS

6

LogStreamName

Nazwa strumienia dziennika Cloudwatch

7

LogGroupName

Nazwa grupy Cloudwatch

8

ClientContext

Informacje o aplikacji klienckiej i urządzeniu używanym z AWS mobile SDK

9

Identity

Informacje o tożsamości amazon cogbnito w przypadku korzystania z mobilnego zestawu SDK AWS

10

RemainingTime

Pozostały czas wykonywania funkcji do zakończenia funkcji

11

Logger

Rejestrator powiązany z kontekstem

Przykład

W tej sekcji przetestujmy niektóre z powyższych właściwości w AWS Lambda w C #. Obserwuj przykładowy kod podany poniżej -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

namespace AWSLambda6 {
   public class Function {

      /// <summary>
      /// </summary>
      /// <param name="input"></param>
      /// <param name="context"></param>
      /// <returns></returns>
      public void FunctionHandler(ILambdaContext context) {
         LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
         context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
         LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");            
      }
   }
}

Powiązane dane wyjściowe, które można zaobserwować po wywołaniu powyższego kodu w programie C# jest jak pokazano poniżej -

Powiązane dane wyjściowe, które można zaobserwować po wywołaniu powyższego kodu w programie AWS Console jest jak pokazano poniżej -

Rejestrowanie za pomocą C #

Do logowania możesz użyć dwóch funkcji -

  • context.Logger.Log

  • LambdaLogger.Log

Zwróć uwagę na poniższy przykład pokazany tutaj -

public void FunctionHandler(ILambdaContext context) {
   LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
   context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
   LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");            
}

Odpowiednie wyjście dla podanego powyżej kodu jest pokazane tutaj -

Możesz pobrać dzienniki z CloudWatch, jak pokazano poniżej -

Obsługa błędów w języku C # dla funkcji Lambda

W tej sekcji omówiono obsługę błędów w języku C #. Do obsługi błędów,Exception klasę należy rozszerzyć, jak pokazano na poniższym przykładzie -

przykład

namespace example {            
   public class AccountAlreadyExistsException : Exception {
      public AccountAlreadyExistsException(String message) :
         base(message) {
      }
   }
} 
namespace example {
   public class Handler {
     public static void CreateAccount() {
       throw new AccountAlreadyExistsException("Error in AWS Lambda!");
     }
   }
}

Odpowiednie wyjście dla kodu podanego powyżej jest takie, jak podano poniżej -

{
   "errorType": "LambdaException",
   "errorMessage": "Error in AWS Lambda!"
}

W poprzednich rozdziałach dowiedzieliśmy się, jak stworzyć funkcję AWS Lambda w konsoli AWS. Istnieją jednak inne parametry do tworzenia funkcji Lambda. Obejmują one alokację pamięci, limit czasu itp.

W tym rozdziale wyjaśnimy szczegółowo następujące właściwości konfiguracyjne AWS Lambda.

Alokacja pamięci

Zaloguj się do konsoli AWS i utwórz lub wybierz istniejącą funkcję lambda. KliknijConfigurationaby uzyskać szczegółowe informacje o przydzielonej pamięci. Spójrz na zrzut ekranu pokazany poniżej -

Zauważ, że domyślnie przydzielona pamięć to 128MB. Jeśli chcesz zwiększyć pamięć, możesz kliknąć suwak.

Pamięć zostanie zwiększona do 64MBpodczas przesuwania suwaka. Zwróć uwagę, że maksymalna dostępna pamięć to3008MB. Spójrz na zrzut ekranu pokazany poniżej -

Możesz także użyć aws cliz wiersza polecenia, aby zwiększyć limit pamięci. Będziesz musiał udostępniać pamięć w przyrostach co 64 MB.

Teraz zwiększmy limit pamięci AWS Lambda o nazwie:myfirstlambdafunction.

Szczegóły pamięci funkcji pokazano na poniższym zrzucie ekranu -

Polecenie używane do zmiany pamięci za pomocą aws cli wygląda następująco -

aws lambda update-function-configuration --function-name your function name --
region region where your function resides --memory-size memory amount --
profile admin user

Odpowiednie wyjście funkcji AWS Lambda myfirstlambdafunctionw konsoli AWS pokazano tutaj. Zwróć uwagę, że pamięć została zmieniona z 128 MB na 256 MB.

Maksymalny czas wykonania

Timeout to czas przydzielony funkcji AWS Lambda do zakończenia, jeśli nastąpi przekroczenie limitu czasu. Funkcja AWS Lambda będzie działać w wyznaczonym czasie lub zakończy się, jeśli przekroczy podany limit czasu. Musisz ocenić czas wymagany do wykonania funkcji i odpowiednio wybrać czas wConfiguration zakładka w konsoli AWS, jak pokazano poniżej -

Rola uprawnień

Podczas tworzenia funkcji AWS Lambda należy przypisać rolę lub uprawnienie. Jeśli potrzebujesz AWS Lambda dla S3 lub dynamoDB, konieczne jest nadanie uprawnień w zakresie usług lambda. Na podstawie przypisanej roli AWS Lambda zdecyduje o krokach, jakie należy podjąć. Na przykład, jeśli dasz pełny dostęp do dynamodb, możesz dodawać, aktualizować i usuwać wiersze z tabeli dynamodb.

Nazwa handlowca

To jest początek wykonywania funkcji AWS Lambda. Funkcja Handler zawiera szczegóły wyzwalanego zdarzenia, obiektu kontekstu i wywołania zwrotnego, które ma zostać wysłane z powrotemsuccess lub error z AWS Lambda.

Format funkcji obsługi w nodejs jest pokazany tutaj -

exports.handler = (event, context, callback) => {
   callback(null, "hello from lambda");
};

Funkcja Lambda wykorzystująca zmienne środowiskowe

W tej sekcji utworzymy prostą funkcję Lambda przy użyciu zmiennych środowiskowych dodanych w sekcji konfiguracji. W tym celu wykonaj kroki podane poniżej i zapoznaj się z odpowiednimi zrzutami ekranu -

Krok 1

Przejdź do konsoli AWS i utwórz funkcję w Lambdzie, jak pokazano.

Krok 2

Teraz dodaj zmienne środowiskowe, jak pokazano -

Krok 3

Teraz pobierzmy to samo w kodzie Lambda w następujący sposób -

exports.handler = (event, context, callback) => {
   var hostName = process.env.host;   
   var userName = process.env.username;
   callback(null, "Environment Variables =>"+hostName+" and "+userName);
};

Krok 4

Aby uzyskać szczegółowe informacje ze zmiennych środowiskowych, musimy użyć process.envjak pokazano. Zauważ, że ta składnia jest przeznaczona dlaNodeJS runtime.

var hostName = process.env.host;   
var userName = process.env.username;

Krok 5

Dane wyjściowe funkcji Lambda podczas wykonywania będą wyglądać następująco:

Możemy stworzyć funkcję Lambda i przetestować ją w konsoli AWS. W tym rozdziale omówiono to szczegółowo. W tym celu będziesz musiał postępować zgodnie z instrukcjami podanymi tutaj i obserwować odpowiednie zrzuty ekranu -

Krok 1

Zaloguj się do konsoli AWS https://aws.amazon.com/console/. Teraz zostaniesz przekierowany do ekranu, na którym wyświetlane są usługi AWS.

Krok 2

Teraz kliknij Lambdausługi, jak podkreślono powyżej. Spowoduje to przekierowanie do tworzenia funkcji, jak pokazano poniżej -

Krok 3

Teraz kliknij Create functioni wprowadź szczegóły funkcji. Następnie możesz zobaczyć ekran, jak pokazano poniżej -

Krok 4

Możesz napisać swój kod, wybierając odpowiedni język. Kod należy napisać w edytorze, jeśli wybrana opcja to edycja kodu inline. Inne dostępne opcje są następujące -

Krok 5

Po zakończeniu musisz zapisać zmiany, dla których przycisk znajduje się w prawym górnym rogu, jak pokazano poniżej -

Krok 6

Teraz kliknij Testprzycisk. Daje to wszystkie szczegóły wykonania funkcji Lambda, jak pokazano poniżej -

Krok 7

Kod dla index.js wygląda następująco -

exports.handler = (event, context, callback) => {
   // TODO implement
   callback(null, 'Lambda test');
};

To wywoła Callback functiona rezultatem może być błąd lub sukces. Po sukcesie zobaczysz plikLambda testwiadomość; jeśli błąd przejdzie null.

Krok 8

Plik Role szczegóły funkcji Lambda są częścią konfiguracji i są wyświetlane, jak pokazano poniżej -

Krok 9

Teraz możesz zaktualizować rolę, jeśli to konieczne, i zapisać funkcję Lambda. Następnie szczegóły pamięci i limitu czasu dla funkcji lambda są wyświetlane, jak pokazano poniżej -

Krok 10

Teraz musimy dodać wyzwalacz do funkcji Lambda, aby był wykonywany po wystąpieniu zdarzenia. Szczegóły wyzwalacza są wyświetlane na początku ekranu funkcji AWS Lambda, jak pokazano poniżej -

W tym miejscu możesz wybrać wyzwalacz, który chcesz, aby funkcja Lambda była wyzwalana. Po wybraniu wyzwalacza należy dodać szczegóły konfiguracji wyzwalacza.

Na przykład dla wyzwalacza na S3 szczegóły konfiguracji do dodania są następujące -

Krok 11

Teraz wybierz zasobnik, w którym chcesz włączyć wyzwalacz. Typ zdarzenia zawiera następujące szczegóły -

Krok 12

W przypadku wyzwalacza można również wspomnieć o plikach typu prefiks lub wzorcu pliku, Lambda musi być wyzwalaczem. Szczegóły są jak pokazano -

Krok 13

Teraz wypełnij wymagane szczegóły wyzwalacza i kliknij Add Zapisz funkcję Lambda, aby wyzwalacz został dodany. Zapisanie funkcji powoduje wdrożenie szczegółów i od teraz za każdym razem, gdy pliki są dodawane do wiadra S3, Lambda zostanie wyzwolona.

Obserwuj poniższy zrzut ekranu, który pokazuje wyzwalacz S3 dodany do AWS Lambda -

Krok 14

Teraz użyjmy przykładowego zdarzenia S3 do przetestowania funkcji Lambda. Kod tego samego jest pokazany tutaj -

Amazon S3 Put Sample Event

{
   "Records": [{
      "eventVersion": "2.0",
      "eventTime": "1970-01-01T00:00:00.000Z",
      "requestParameters": {
         "ExampleIPAddress": "127.0.0.1"
      },
      "s3": {
         "configurationId": "testConfigRule",
         "object": {
            "eTag": "0123456789abcdef0123456789abcdef",
            "sequencer": "0A1B2C3D4E5F678901",
            "key": "HappyFace.jpg",
            "size": 1024
         },
         "bucket": { 
            "arn": bucketarn,
            "name": "Examplebucket",
            "ownerIdentity": {
               "principalId": "Example"
            }
         },
         "s3SchemaVersion": "1.0"
      },
      "responseElements": { 
         "x-amz-id-2": "Example123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
         "x-amz-request-id": "Example123456789"
      },
      "awsRegion": "us-east-1",
      "eventName": "ObjectCreated:Put",
      "userIdentity": {
         "principalId": "Example"
      },
      "eventSource": "aws:s3"
   }]
}

Będziesz musiał użyć następującego polecenia, aby uzyskać szczegóły pliku przesłanego ze zdarzenia S3 put -

event.Records[0].s3.object.key     //will display the name of the file

Będziesz musiał użyć następującego polecenia, aby uzyskać nazwę zasobnika -

event.Records[0].s3.bucket.name    //will give the name of the bucket.

Będziesz musiał użyć następującego polecenia, aby uzyskać nazwę zdarzenia -

event.Records[0].eventName        // will display the event name

Krok 15

Teraz zaktualizujmy kod AWS Lambda, aby wydrukować szczegóły S3, jak pokazano poniżej -

exports.lambdahandler = (event, context, callback) => {
   callback(null, "Bucket name: "+event.Records[0].s3.bucket.name+"  
   File name:"+event.Records[0].s3.object.key );
};

Krok 16

Zapisz zmiany. KliknijTest i wprowadź zdarzenie próbki S3 -

Krok 17

Teraz kliknij Test i możesz zobaczyć dane wyjściowe, jak pokazano -

Krok 18

Aby przetestować wyzwalacz na S3 przy użyciu usługi S3 AWS, prześlij plik w zasobniku S3: test bucket trigger. Zaktualizuj rolę używaną z Lambda, aby przyjąć zasady S3 i SES (do wysyłania poczty) dla uprawnień. Spowoduje to zaktualizowanie kodu AWS Lambda, aby wysyłać pocztę, aby zobaczyć, jak działa wyzwalacz -

Zaktualizowany kod AWS Lambda jest taki, jak pokazano -

var aws = require('aws-sdk');
var ses = new aws.SES({
   region: 'us-east-1'
});
exports.lambdahandler = function(event, context, callback) {
   var eParams = {
      Destination: {
         ToAddresses: ["[email protected]"]
      },
      Message: {
         Body: {
            Text: {
               Data: "Bucket name: "+event.Records[0].s3.bucket.name+"  File name:"+event.Records[0].s3.object.key
            }
         },
         Subject: {
            Data: "S3 and AWS Lambda"
         }
      },
      Example: "[email protected]"
   };
   console.log('===SENDING EMAIL===');
   var email = ses.sendEmail(eParams, function(err, data) {
      if (err) console.log(err);
         else {
            console.log("===EMAIL SENT===");
            console.log("EMAIL CODE END");
            console.log('EMAIL: ', email);
            context.succeed(event);
            callback(null, "email is send");
         }
   });
};

Odpowiedni zrzut ekranu jest pokazany tutaj -

Krok 19

Teraz prześlij plik i sprawdź identyfikator poczty podany w kodzie AWS Lambda -

AWS CLIto narzędzie wiersza poleceń, które pomaga w pracy z usługami AWS. Możemy go użyć do tworzenia, aktualizacji, usuwania, wywoływania funkcji lambda aws. W tym rozdziale omówimy szczegółowo instalację i użytkowanie AWS CLI.

Instalacja AWS CLI

Ta sekcja poprowadzi Cię przez proces instalacji AWS CLI w różnych systemach operacyjnych. Postępuj zgodnie z podanymi instrukcjami i obserwuj odpowiednie zrzuty ekranu, jeśli są dołączone.

Dla Windowsa

Sprawdź konfigurację systemu Windows i wybierz jedno z poniższych łączy, aby zainstalować AWS CLI MSI -

  • Windows 64-bitowy - instalacja AWS CLI MSI dla Windows ( 64-bitowy )

  • Dla Windows 32 bit - instalacja MSI AWS CLI dla Windows (32)

Po wybraniu odpowiedniego łącza i kliknięciu go, możesz znaleźć okno, jak pokazano tutaj -

Następnie ustaw Environment path in windows jak pokazano na zrzutach ekranu poniżej -

Po zakończeniu możesz użyć następującego polecenia w wierszu polecenia, aby sprawdzić, czy aws cli jest zainstalowany -

aws --version

Wyświetla szczegóły wersji aws-cli, jak pokazano na poniższym zrzucie ekranu -

Dla systemu Linux / Mac

Do instalacji w systemie Linux i Mac potrzebujesz Pythona 2.6.3 lub nowszej wersji. Następnie użyj następujących poleceń do dalszych procesów instalacji -

$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" $ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws

Teraz musimy skonfigurować ustawienia AWS. W tym celu możesz użyć następującego polecenia -

aws configure

W tym celu wymaga takich szczegółów jak -

  • Identyfikator klucza dostępu AWS
  • Tajny klucz dostępu AWS
  • Domyślna nazwa regionu
  • Domyślne dane wyjściowe z formatu

Możesz uzyskać te szczegóły z konsoli aws. Przejdź do swojej nazwy konta w prawym górnym rogu, jak pokazano -

Teraz kliknij My Security Credentialsi wybierz użytkowników z lewej strony. Dodaj użytkownika ze szczegółami zgodnie z pytaniem.

Dodaj użytkownika i uzyskaj klucz dostępu i tajny klucz. Aby zobaczyć nowy klucz dostępu, wybierzShow. Twoje dane logowania będą wyglądać tak, jak pokazano poniżej -

Access key ID − AOSAIOSFOCDD7Example

Secret access key − aJuirCVtnROUN/K7MDENG/bPxRfiCYExampleKEY

Polecenia referencyjne dla AWS CLIS

Poniższa tabela zawiera odniesienia do poleceń, z którymi można pracować aws cli.

Nazwa polecenia aws cli Opis poleceń
create-function create-function --function-name <value> --runtime <value> --role <value> --handler <value> [--code <value>] [--description <value>] [--timeout < wartość>] [--memory-size <wartość>] [--environment <wartość>] [--kms-key-arn <wartość>] [--tags <wartość>] [--zip-file <wartość> ] [--cli-input-json <wartość>]
list-functions list-functions [--master-region <value>] [--function-version <value>] [--max-items <value>] [--cli-input-json <value>] [--starting- token <wartość>] [--page-size <wartość>] [--generate-cli-skeleton <wartość>]
get-function get-function - function-name <wartość> [--qualifier <wartość>] [--cli-input-json <wartość>] [--generate-cli-skeleton <wartość>]
get-function-configuration konfiguracja-funkcji-get - nazwa-funkcji <wartość> [--qualifier <wartość>] [--cli-input-json <wartość>] [--generate-cli-skeleton <wartość>]
get-account-settings get-account-settings [--cli-input-json <wartość>] [--generate-cli-skeleton <wartość>]
update-function-configuration aktualizacja-konfiguracja-funkcji - nazwa-funkcji <wartość> [--role <wartość>] [--handler <wartość>] [--description <wartość>] [--timeout <wartość>] [--memory- size <wartość>] [--vpc-config <wartość>] [--environment <wartość>] [--runtime <wartość>] [--dead-letter-config <wartość>] [--kms-key- arn <wartość>] [--tracing-config <wartość>] [--revision-id <wartość>] [--cli-input-json <wartość>] [--generate-cli-skeleton <wartość>]
update-function-code update-function-code - function-name <value> [--zip-file <value>] [--s3-bucket <value>] [--s3-key <value>] [--s3-object- wersja <wartość>] [--publish | --no-opublikuj] [--dry-run | --no-dry-run] [--revision-id <wartość>] [- cli-input-json <wartość>] [- wygeneruj-cli-skeleton <wartość>]
delete-function delete-function - function-name <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>]

Omówmy teraz szczegółowo te polecenia jeden po drugim.

funkcja tworzenia

Ten interfejs API utworzy nową funkcję lambda. Kod należy podać w formacie zip. Jeśli funkcja, która ma zostać utworzona, już istnieje, interfejs API zakończy się niepowodzeniem. Zwróć uwagę, że w nazwie funkcji rozróżniana jest wielkość liter.

Polecenia zawarte

Lista poleceń, których możesz użyć z funkcją create jest podana tutaj -

create-function 
--function-name <value>
--runtime <value>
--role <value>
--handler <value>
[--code <value>] 
[--description <value>] 
[--timeout <value>] 
[--memory-size <value>] 
[--environment <value>] 
[--kms-key-arn <value>] 
[--tags <value>] 
[--zip-file <value>] 
[--cli-input-json <value>]

Opcje w zestawie

Różne opcje, których można używać z powyższymi funkcjami, są następujące -

--function-name (string)- To ma nazwę funkcji. Nazwa może składać się ze znaków 64-bitowych.

--runtime(string)- Tutaj musisz określić środowisko wykonawcze, tj. Wybór języka. Szczegóły dotyczące środowiska uruchomieniowego podano poniżej -

Dostępne opcje runtime
Python v3.6 python3.6
Python v2.7 python2.7
NodeJS v6.10 nodejs6.10
NodeJS v8.10 nodejs8.10
Jawa java8
C # 1 dotnetcore1.0
C # 2 dotnetcore2.0
Iść go1.x

--role(string)- Będzie to nazwa polityki lambda, tj. Rola, jaką ma zostać nadana funkcji lambda w celu uzyskania dostępu do innych usług. Będzie miał uprawnienia zgodnie z określoną rolą.

--handler (string) - To jest nazwa procedury obsługi, od której rozpocznie się wykonywanie kodu lambda.

  • W przypadku nodejs nazwa handlera to nazwa modułu, który eksportujemy.
  • W przypadku języka Java jest to nazwa_klasy paczki :: handler lub nazwa_klasy pakietu
  • W przypadku Pythona funkcja obsługi to nazwa pliku.

--code (structure) −AWS Kod lambda

--description (string) - opis funkcji AWS Lambda

--timeout (integer)- timeout będzie określał czas, w którym funkcja lambda musi zakończyć wykonywanie. Wartość domyślna to 3 s.

--memory-size (integer)- To jest pamięć przekazana funkcji lambda aws. AWS przydzieli ilość procesora i alokacji pamięci na podstawie podanej pamięci.

--environment (structure) - jest to obiekt ze szczegółami środowiska wymaganymi w funkcji lambda aws.

e.g : Variables = {Name1 = string, Name2 = string}

--kms-key-arn (string)- to jest nazwa zasobu amazon (ARN) używana do szyfrowania zmiennych środowiskowych. Jeśli nie zostanie podany, szyfrowanie przyjmie ustawienia domyślne.

--zip-file (blob) - ścieżka do pliku zip, który zawiera szczegóły kodu.

--cli-input-json (string): Wykonuje operację usługi na podstawie podanego ciągu JSON. Ciąg JSON jest zgodny z formatem dostarczonym przez --generate-cli-skeleton. Jeśli w wierszu poleceń zostaną podane inne argumenty, wartości interfejsu wiersza polecenia zastąpią wartości podane w formacie JSON.

Teraz stwórzmy prostą funkcję AWS Lambda używając środowiska uruchomieniowego jako nodejs i dodajmy kilka console.logs do wydrukowania.

Rozważ przykładowy kod, aby zrozumieć to samo -

exports.handler = async (event) => {
   console.log("Using aws cli");
   return 'Hello from Lambda from aws cli!'
};

Teraz spakuj plik i zapisz go jako awscli.zip.

Zdobywanie ARN

Do roli użyjmy arnz istniejącej roli, którą stworzyliśmy. Aby uzyskać ARN, musisz wykonać kroki, jak pokazano tutaj. Obserwuj odpowiednie zrzuty ekranu, jeśli są dołączone -

Krok 1

Przejdź do uprawnień i wybierz żądaną rolę Roles. Szczegóły ARN dla roli są wyświetlane, jak pokazano poniżej. Posługiwać sięRole ARN z create-function w aws cli.

Zwróć uwagę, że rola arn to: arn: aws: iam :: 625297745038: role / lambdaapipolicy

Polecenie z wartościami dla create-function wygląda następująco -

aws lambda create-function 
--function-name "awslambdausingcli" 
--runtime "nodejs8.10" 
--role "arn:aws:iam::625297745038:role/lambdaapipolicy" 
--handler "awscli.handler" 
--timeout 5 
--memory-size 256 
--zip-file "fileb://awscli.zip"

Teraz, jeśli uruchomisz polecenie w aws cli, możesz znaleźć dane wyjściowe, jak pokazano poniżej -

W konsoli AWS funkcja Lambda jest wyświetlana, jak pokazano poniżej -

Szczegóły funkcji są pokazane tutaj -

Szczegóły konfiguracji podano poniżej -

Możesz przetestować funkcję i sprawdzić wyjście, jak pokazano -

Tutaj pokazane jest odpowiednie wyjście dziennika -

funkcje-listowe

Ten interfejs API zawiera listę funkcji utworzonych do tej pory w AWS Lambda.

Polecenia zawarte

Poniżej przedstawiono polecenia skojarzone z tym interfejsem API -

list-functions
[--master-region <value>]
[--function-version <value>]
[--max-items <value>]
[--cli-input-json <value>]

Opcje w funkcjach list

Poniżej przedstawiono różne opcje, których możesz użyć w ramach tego interfejsu API funkcji listy -

--master-region(string)- opcjonalnie. Region, z którego funkcje mają być wyświetlane.

--function-version(string)- opcjonalnie. To da wersję funkcji.

--max-items(integer)- opcjonalnie. To da pozycje zgodnie z określoną wartością.

--cli-input-json(string)- opcjonalnie. Wykona operację na podstawie dostarczonego pliku json.

Polecenie z wartościami list-functions wygląda następująco -

aws lambda list-functions --max-items 3

Polecenie wyświetla szczegóły w następujący sposób -

funkcja get

Ten interfejs API zawiera szczegółowe informacje o funkcjach, a także link do adresu URL, który ma przesłany plik zip za pomocą funkcji tworzenia. Adres URL ze szczegółami kodu pocztowego będzie ważny tylko przez 10 minut.

Polecenia zawarte

Poniżej znajdują się polecenia powiązane z tym interfejsem API -

get-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

Opcje w zestawie

--function-name- Nazwa funkcji AWS Lambda. Możesz także określić nazwę zasobu Amazon funkcji.

--qualifier(string)- Opcjonalnie. Wersja funkcji może służyć do uzyskania szczegółów funkcji.

Polecenie z wartościami funkcji get to -

aws lambda get-function --function-name awslambdausingcli

Szczegóły wyświetlania poleceń są następujące -

Podaje adres URL, na który został przesłany kod pocztowy. W powyższym przypadku adres URL to -

https://prod-04-2014-
tasks.s3.amazonaws.com/snapshots/625297745038/awslambdausingcli-97048f8d-4a08
-4ed9-99d9-acb00d2063d2?versionId=d04HKvPu9S2zz8pzjbW6Rmf5o5fxnc_r&X-Amz-Security
-Token=FQoDYXdzEKT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDCpTmGvtwKToPBiWcyK3A96UcJEnwvYDhMbbxu
%2Bg2gffK2ocfnlEeiCHak8QqqE1RFpbKrdks9NzxP9gNbagL4M9RValxJ1a9PUY%2FOdAekscRHOiX00MVAxUlI8
2pKryhdOwLJWSj0uRzqvOxCcBwJenHrSNPeG6lMa2ZDo0qZFEUDONSaTg4nuSnJK1f6t3pMAKu4vF9wPvf92G%2BU
60rUxwleggigISmD9l1IlZse3%2BVF1JlNuN%2F5d85v0y2Q%2F%2BO515CybcZpn91sHPYG8JMJ00LsrkQ2Ww4VU
9Zz5c5QYH4JYPj0CyEgSz9b%2FMceMPpOoPUAMjctb%2FEwQqcShZeqAr9%2Fcd2ZI%2BXl2%2Bs4ri0ucgPvQQvs
eGIIiZbX3GqdwR2jb1nylrAEIfiuFMoSWfcFYoYtuL0MZnjGR9jy2GNkp6MB%2BlHHr7%2BnuFRUzU26rgDYmdE1w
Rb3%2B21Jm49WGDa9opRLvUxFaux57Or70haib2FuKzN6Gf3Vzzk5KPdWsYUpaLyf%2B1ovEytOZhB1JEXuCs%2FG
IlOXS88yxT%2BpOKmyxweiezpGgI%2FAkSAQTbSRsYQKIOFyIJNHzplwrJKhy28vy60numIBIo9Zqq2AU%3D
&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20180527T112426Z&X-Amz-
SignedHeaders=host&X-Amz-Expires=600&X-Amz-
Credential=ASIAICSQHLSBWFP37U4Q%2F20180527%2Fus-
east-1%2Fs3%2Faws4_request&X-Amz-Signature=
8b97e7d6d7da13313068e027894d2c875be5e50a0c5a62550f55307985bdc1aa

konfiguracja funkcji pobierania

To da szczegóły konfiguracji funkcji AWS Lambda.

Poniżej przedstawiono polecenia używane wraz z tym interfejsem API -

get-function-configuration
--function-name <value>
[--qualifier <value>]

The following are the options used with

--function-name (string) −nazwa funkcji lambda aws. Możesz także określić nazwę zasobu Amazon funkcji.

--qualifier(string) − Opcjonalnie.Wersja funkcji może służyć do uzyskania szczegółów funkcji.

Polecenie z wartościami funkcji get to -

aws lambda get-function-configuration --function-name awslambdausingcli

Polecenie wyświetla szczegóły w następujący sposób -

pobierz ustawienia konta

Ten interfejs API zawiera ustawienia kont.

Zaangażowane polecenia

Polecenie, którego możesz użyć z tym interfejsem API, to -

get-account-settings
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

Zaangażowane opcje

W tym interfejsie API możesz użyć następujących opcji -

--cli-input-json(string) − Wykonuje usługę na podstawie podanego ciągu JSON.

--generate-cli-skeleton(string) − Drukuje dane wyjściowe json bez wysyłania żądania API.

Możesz użyć następującego polecenia, aby uzyskać ustawienia konta -

aws lambda get-account-settings

Możesz zobaczyć następujące dane wyjściowe po wykonaniu polecenia podanego powyżej -

konfiguracja funkcji aktualizacji

Ten interfejs API pomaga zaktualizować szczegóły konfiguracji dla utworzonej funkcji AWS Lambda. Możesz zmienić pamięć, limit czasu, program obsługi, rolę, środowisko wykonawcze, opis itp.

Zaangażowane polecenia

Poniżej przedstawiono polecenia związane z interfejsem API aktualizacji-funkcji-konfiguracji -

update-function-configuration
--function-name <value>
[--role <value>]
[--handler <value>]
[--description <value>]
[--timeout <value>]
[--memory-size <value>]
[--environment <value>]
[--runtime <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

Zaangażowane opcje

Poniżej przedstawiono opcje związane z interfejsem API aktualizacji-funkcji-konfiguracji -

--function-name − nazwa funkcji lambda aws

--role (string) −opcjonalny. Należy zaktualizować ARN roli.

--handler (string) −opcjonalny. Szczegóły obsługi funkcji lambda aws.

--description(string) −opcjonalny. Opis funkcji.

--timeout(integer) −opcjonalny. Czas potrzebny do zakończenia działania funkcji aws lambda.

--memory-size(integer) −opcjonalny. To jest pamięć przekazana funkcji lambda aws. AWS przydzieli ilość procesora i alokacji pamięci na podstawie podanej pamięci.

--environment (structure) −opcjonalny. Jest to obiekt ze szczegółami środowiska wymaganymi w funkcji lambda aws.

e.g: Variables = {Name1 = string, Name2 = string}

--runtime(string) − Tutaj musisz określić środowisko wykonawcze, tj. Wybór języka.

Szczegóły dotyczące czasu działania przedstawiono w poniższej tabeli -

Dostępne opcje runtime
Python v3.6 python3.6
Python v2.7 python2.7
NodeJS v6.10 nodejs6.10
NodeJS v8.10 nodejs8.10
Jawa java8
C # 1 dotnetcore1.0
C # 2 dotnetcore2.0
Iść go1.x

--cli-input-json (string) −opcjonalny. Spowoduje to wykonanie operacji na interfejsie API zgodnie z podanym ciągiem json.

--generate-cli-skeleton (string) −opcjonalny. Spowoduje to wyświetlenie szkieletu JSON wszystkich szczegółów bez wykonywania interfejsu API. Wyjście może służyć jako wejście do--cli-input-json.

Teraz zmieńmy pamięć i limit czasu funkcji AWS Lambda, którą utworzyliśmy wcześniej. Postępuj zgodnie z instrukcjami podanymi poniżej i obserwuj odpowiednie zrzuty ekranu dołączone w tym celu -

Krok 1

Pamięć i limit czasu przed wprowadzeniem zmiany są następujące -

Krok 2

Teraz z update-function-configuration, zmieńmy pamięć i limit czasu na 320MB i limit czasu na 10s. W tym celu użyj następującego polecenia z wartościami -

aws lambda update-function-configuration --function-name “awslambdusingcli” 
--timeout 10 --memory-size 320

Krok 3

Następnie możesz zobaczyć następujące dane wyjściowe jako wyświetlacz -

Krok 4

Wyświetlacz w konsoli AWS po użyciu update-function-configuration wygląda następująco -

Kod funkcji aktualizacji

Ten interfejs API zaktualizuje kod dla istniejącej funkcji AWS Lambda.

Zaangażowane polecenia

update-function-code
--function-name <value>
[--zip-file <value>]
[--s3-bucket <value>]
[--s3-key <value>]
[--s3-object-version <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

Zaangażowane opcje

Poniżej przedstawiono opcje związane z interfejsem API kodu funkcji aktualizacji -

--function-name(string) − nazwa funkcji lambda aws

--zip-file (blob) −opcjonalny. Ścieżka do pliku ZIP zawierającego kod do zaktualizowania.

--s3-bucket(string) −opcjonalny. Nazwa zasobnika S3 z przesłanym plikiem ZIP z kodem.

--s3-key(string) −opcjonalny. Nazwa klucza obiektu AWS s3, który ma zostać przesłany.

--s3-object-version (string) −opcjonalny. Wersja obiektu AWS s3.

--cli-input-json (string) −opcjonalny. Spowoduje to wykonanie operacji na interfejsie API zgodnie z podanym ciągiem json.

--generate-cli-skeleton (string) −opcjonalny. Spowoduje to wyświetlenie szkieletu JSON wszystkich szczegółów bez wykonywania interfejsu API. Dane wyjściowe mogą służyć jako dane wejściowe do --cli-input-json.

Zaktualizowany kod jest taki, jak pokazano poniżej -

exports.handler = async (event, context) => {
   console.log("Using aws cli");
   console.log()
   return 'Hello from Lambda from aws cli!'
};

Możesz użyć następujących command with values for this purpose -

aws lambda update-function-code --function-name "awslambdausingcli" 
--zip-file "fileb://awscli.zip"

Odpowiednie wyjście jest pokazane tutaj -

Wyświetlacz z konsoli AWS jest taki, jak pokazano tutaj -

Odpowiednie dane wyjściowe dziennika są pokazane poniżej -

funkcja usuwania

Plik delete aws cli api usunie podaną funkcję.

Polecenia zawarte

Szczegóły polecenia dla tego samego podano tutaj -

delete-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

Opcje w zestawie

Opcje zawarte w tym interfejsie API są podane poniżej -

--function-name(string) − przyjmie to nazwę funkcji lambda lub arn funkcji lambda aws.

--qualifier (string) −To jest opcjonalne. Tutaj możesz określić wersję aws lambda, która ma zostać usunięta.

-- cli-input-json(string) −Wykonuje operację usługi na podstawie podanego ciągu JSON. Ciąg JSON jest zgodny z formatem dostarczonym przez --generate-cli-skeleton. Jeśli w wierszu poleceń zostaną podane inne argumenty, wartości interfejsu wiersza polecenia zastąpią wartości podane w formacie JSON.

--generate-cli-skeleton(string) − wypisuje szkielet json na standardowe wyjście bez wysyłania żądania API.

aws lambda delete-function --function-name "lambdatestcli"

Teraz zwróć uwagę, że funkcja nie będzie widoczna na liście funkcji AWS Lambda -

AWS Lambda można tworzyć i wdrażać przy użyciu platformy bezserwerowej. Pozwala tworzyć wyzwalacze AWS Lambda, a także wdrażać je, tworząc wymagane role. Framework bezserwerowy pozwala na łatwiejszą obsługę dużych projektów. Wymagane zdarzenia i zasoby są zapisywane w jednym miejscu, a zaledwie kilka poleceń pomaga we wdrożeniu pełnej funkcjonalności na konsoli AWS.

W tym rozdziale dowiesz się szczegółowo, jak rozpocząć korzystanie z bezserwerowej platformy AWS.

Zainstaluj Serverless Framework przy użyciu narzędzia npm install

Na początek musisz najpierw zainstalować nodejs. Możesz sprawdzić nodejs w następujący sposób -

Będziesz musiał użyć następującego polecenia, aby zainstalować bezserwerowe przy użyciu pakietu npm -

npm install -g serverless

Po zakończeniu npm wykonaj polecenie serverless, które wyświetli listę poleceń, które mają zostać użyte do utworzenia i wdrożenia funkcji AWS Lambda. Obserwuj zrzuty ekranu podane poniżej -

Możesz także użyć sls zamiast serverless. sls to skrócona komenda dla serverless.

Jeśli potrzebujesz pomocy w sprawie polecenia sls, możesz użyć następującego polecenia -

sls create --help

Aby utworzyć framework bezserwerowy, musisz wykonać kroki podane poniżej -

Krok 1

Aby zacząć korzystać z frameworka bezserwerowego, musimy dodać poświadczenia. W ten sposób możesz najpierw użytkownika w konsoli AWS w następujący sposób -

Krok 2

Kliknij Next:Permissionsprzycisk, aby dodać uprawnienia. Będziesz musiał dołączyć istniejące zasady lub dostęp administratora do tego użytkownika.

Krok 3

Kliknij Create Useraby dodać użytkownika. Wyświetli klucz dostępu i tajny klucz, których potrzebujemy do skonfigurowania struktury bezserwerowej -

Skonfiguruj AWS Serverless Framework

Zobaczmy, jak skonfigurować bezserwerową platformę AWS. W tym celu możesz użyć następującego polecenia -

sls config credentials --provider aws --key accesskey --secret secretkey

Zwróć uwagę, że szczegóły wprowadzonych poświadczeń, czyli plik access key i secret key są przechowywane w file /aws/credentials.

Najpierw utwórz folder, w którym chcesz przechowywać pliki projektu.

Następnie zaczniemy pracę w aws-serverless teczka.

Utwórz AWS Lambda przy użyciu Serverless Framework

Teraz stwórzmy funkcję Lambda we frameworku bezserwerowym, korzystając z kroków podanych poniżej -

Krok 1

Poniżej znajdują się szczegóły dotyczące serwera bezserwerowego create polecenie -

Krok 2

Teraz musimy przypisać szablon, który wygląda następująco -

AWS-nodejs, aws-nodejs-typescript, aws-nodejs-ecma-script, aws-python, aws-python3, aws-groovy-gradle etc.

Krok 3

Wykorzystamy aws-nodejstemplate, aby stworzyć nasz pierwszy projekt przy użyciu platformy serverless. Polecenie w tym samym celu jest pokazane tutaj -

sls create --template aws-nodejs

Zauważ, że to polecenie tworzy szablon dla szablonu aws-nodejs.

Krok 4

Teraz otwórz folder utworzony w IDE. Tutaj używamy kodu Visual Studio, a struktura folderów jest następująca -

Krok 5

Utworzono 2 pliki: handler.js i Serverless.yml

Szczegóły podstawowych funkcji AWS Lambda są pokazane w handler.js w następujący sposób -

'use strict';

module.exports.hello = (event, context, callback) => {
   const response = {
      statusCode: 200,
      body: JSON.stringify({
         message: 'Go Serverless v1.0! Your function executed successfully!',
         input: event,
      }),
   };
   callback(null, response);

   // Use this code if you don't use the http event with the LAMBDA-PROXY integration
   // callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};

Ten plik Serverless.yml zawiera szczegóły konfiguracji platformy bezserwerowej, jak pokazano poniżej -

# Welcome to Serverless!
#
# This file is the main config file for your service.
# It's very minimal at this point and uses default values.
# You can always add more config options for more control.
# We've included some commented out config Examples here.
# Just uncomment any of them to get that config option.
#
# For full config options, check the docs:
#    docs.serverless.com
#
# Happy Coding!
service: aws-nodejs # NOTE: update this with your service name

# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"

provider:
 name: aws
 runtime: nodejs6.10

# you can overwrite defaults here
#  stage: dev
#  region: us-east-1

# you can add statements to the Lambda function's IAM Role here
#  iamRoleStatements:
#    - Effect: "Allow"
#      Action:
#        - "s3:ListBucket"
#      Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ]  }
#    - Effect: "Allow"
#      Action:
#        - "s3:PutObject"
#      Resource:
#        Fn::Join:
#          - ""
#          - - "arn:aws:s3:::"
#            - "Ref" : "ServerlessDeploymentBucket"
#            - "/*"

# you can define service wide environment variables here
#  environment:
#    variable1: value1

# you can add packaging information here
#package:
#  include:
#    - include-me.js
#    - include-me-dir/**
#  exclude:
#    - exclude-me.js
#    - exclude-me-dir/**

functions:
 hello:
   handler: handler.hello

#    The following are a few example events you can configure
#    NOTE: Please make sure to change your handler code to work with those events
#    Check the event documentation for details
#    events:
#      - http:
#          path: users/create
#          method: get
#      - s3: ${env:BUCKET}
#      - schedule: rate(10 minutes)
#      - sns: greeter-topic
#      - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000
#      - alexaSkill: amzn1.ask.skill.xx-xx-xx-xx
#      - alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx
#      - iot:
#          sql: "SELECT * FROM 'some_topic'"
#      - cloudwatchEvent:
#          event:
#            Example:
#              - "aws.ec2"
#            detail-type:
#              - "EC2 Instance State-change Notification"
#            detail:
#              state:
#                - pending
#      - cloudwatchLog: '/aws/lambda/hello'
#      - cognitoUserPool:
#          pool: MyUserPool
#          trigger: PreSignUp

#    Define function environment variables here
#    environment:
#      variable2: value2

# you can add CloudFormation resource templates here
#resources:
#  resources:
#    NewResource:
#      Type: AWS::S3::Bucket
#      Properties:
#        BucketName: my-new-bucket
#  Outputs:
#     NewOutput:
#       Description: "Description for the output"
#       Value: "Some output value"

Teraz musimy dodać zmiany w pliku serverless.yml zgodnie z naszymi wymaganiami. Możesz użyć poleceń podanych poniżej -

Możesz użyć następującego polecenia dla Service -

service: aws-nodejs # NOTE: update this with your service name

Teraz zmień usługę tutaj i dodaj nazwę nadaną do naszego folderu, jak pokazano -

service: aws-serverless # NOTE: update this with your service name

Dane dostawcy są takie, jak pokazano -

provider:
   name: aws
   runtime: nodejs6.10

Dostawcą jest aws a runtime to nodejs6.10. Musimy dodaćregion w którym będziemy pracować i stage, to jest dev or prodśrodowisko dla projektu. Oto zaktualizowane dane dostawcy: dostawca -

name: aws
runtime: nodejs6.10
# you can overwrite defaults here
stage: prod
region: us-east-1

Rola uprawnień

Plik iam role, czyli kod zezwolenia na pracę z Lambda jest pokazany tutaj w .yml plik -

#  iamRoleStatements:
#    - Effect: "Allow"
#      Action:
#        - "s3:ListBucket"
#      Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ]  }
#    - Effect: "Allow"
#      Action:
#        - "s3:PutObject"
#      Resource:
#        Fn::Join:
#          - ""
#          - - "arn:aws:s3:::"
#            - "Ref" : "ServerlessDeploymentBucket"
#            - "/*"

Zauważ, że musimy podać szczegóły roli, czyli pozwolenie wymagane w przypadku innych usług AWS, w powyższej sekcji.

AWS Lambda Handler Szczegóły

Nazwa funkcji eksportu w handler.jswitam. Zatem program obsługi to nazwa pliku, po której następuje nazwa eksportu.

functions:
   hello:
      handler: handler.hello

Szczegóły zasobu o dodanej usłudze s3, jak pokazano poniżej tutaj -

# you can add CloudFormation resource templates here
#resources:
#  resources:
#    NewResource:
#      Type: AWS::S3::Bucket
#      Properties:
#        BucketName: my-new-bucket
#  Outputs:
#     NewOutput:
#       Description: "Description for the output"
#       Value: "Some output value"

Wdróż AWS Lambda przy użyciu Serverless Framework

Wdróżmy powyższą funkcję lambda na konsoli AWS. W tym celu możesz skorzystać z następujących kroków -

Krok 1

Najpierw będziesz musiał użyć następującego polecenia -

sls deploy

Krok 2

Teraz powinieneś zobaczyć funkcję w konsoli AWS, jak pokazano. Szczegóły bezserwerowego AWS są rejestrowane w formacji chmury AWS. W tym celu przejdź do usługi AWS i wybierzCloudFormation. Szczegóły AWS Lambda są wyświetlane w następujący sposób -

Zwróć uwagę, że podana nazwa to nazwa projektu, po której następuje używany etap.

Krok 3

Tworzy rolę iam dla AWS Lambda i grupę logów dla AWS Cloudwatch. Zostanie utworzony zasobnik S3 zawierający szczegóły kodu i szczegóły konfiguracji.

Jest to tworzone przez polecenie sls deploy. Nie musisz określać roli iam, zamiast tego jest ona tworzona domyślnie podczasdeploy etap.

Krok 4

Szczegółowy przepływ zdarzeń jest wyświetlany poniżej w usłudze tworzenia chmur.

Kod Lambda AWS

Kod AWS Lambda i ustawienia jego wykonania pokazano na zrzucie ekranu podanym poniżej -

Podczas testowania funkcji Lambda można znaleźć następujące dane wyjściowe -

Wyjście dziennika dla powyższej funkcji jest pokazane tutaj -

Możemy również przetestować funkcję AWS Lambda za pomocą polecenia serverless, jak pokazano poniżej -

sls invoke --function hello

Tutaj pokazano składnię polecenia invoke -

sls invoke --function hello

To wywołanie polecenia wyzwala funkcję AWS Lambda i wyświetla dane wyjściowe w wierszu polecenia, jak pokazano poniżej -

Możesz również przetestować funkcję Lambda przed wdrożeniem i polecenie tego samego, używając następującego polecenia -

sls invoke local --function hello

Należy pamiętać, że nie zawsze jest możliwe testowanie lokalnie, ponieważ zasobów takich jak S3 iDynanoDB nie można symulować w środowisku lokalnym. Lokalnie można przetestować tylko podstawowe wywołania funkcji.

Korzystanie z API Gateway i AWS Lambda z Serverless Framework

Zobaczmy, jak stworzyć nowy projekt do pracy z Lambda i bramą API. W tym celu możesz użyć następującego polecenia -

sls create --template aws-nodejs

Teraz otwarte aws-apiprojekt w kodzie wizualnym. Widać, że plikhandler.js i serverless.ymlutworzone pliki. Zróbmy zmiany w tym, aby dodać bramę API.

Będziesz musiał wprowadzić następujące zmiany w serverless.yml -

Teraz szczegóły zdarzeń dodane do aktywacji bramy API z AWS Lambda -

Dodano tutaj nową rzecz o nazwie events. Określiliśmy wydarzenie jakohttp, wraz z jego ścieżką i metodą.

Ścieżka jest punktem końcowym, którego użyjemy podczas tworzenia ścieżki bramy interfejsu API i używanej metody GET.

Zauważ, że przewodnik jest handler.hello, a hello to nazwa eksportu z handler.js.

Pamiętaj, że nie musisz tutaj wdrażać bramy API, ponieważ wykona to platforma bezserwerowa.

Teraz uruchomimy sls deploy polecenie, aby utworzyć funkcję AWS Lambda z wyzwalaczem jako api gateway.

sls deploy

Zwróć uwagę, że szczegóły wdrażania są wymienione powyżej. DajeGeturl z punktem końcowym jako szczegółami ścieżki. Scena jestprodwięc to samo jest używane w adresie URL. Nazwa funkcji toaws-api-prod-hello.

Uderzmy w adres URL i zobaczmy wynik. Poniżej możesz zobaczyć odpowiedź, którą otrzymujemy z adresu URL pobierania bramy API -

{"message":"Go Serverless v1.0! Your function executed 
successfully!","input":{"resource":"/first-api","path":"/first-api","httpMethod":
"GET","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,
image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate, br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":
"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":
"false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":
"false","CloudFront-Viewer-Country":"IN","Host":"nvbhfdojfg.execute-api.us-east-1.
amazonaws.com","upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0 
(Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
 Chrome/66.0.3359.181 Safari/537.36","Via":"2.0 707912794802dbb4825c79b7d8626a5d.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"j70MMqkWFp6kmvuauzp_nvTbI-WwKIQmm2Jl5hzSoN6gkdvX11hh-g==",
 "X-Amzn-Trace-Id":"Root=1-5b13f9ef-5b012e36b7f40b5013a326fc","X-Forwarded-For":"157.33.133.217, 54.182.242.73","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},
 "queryStringParameters":null,"pathParameters":null,"stageVariables":null,
 "requestContext":{"resourceId":"pes5sy","resourcePath":"/first-api","httpMethod":
 "GET","extendedRequestId":"H6P9fE-MoAMFdIg=","requestTime":"03/Jun/2018:14:23:
 43 +0000","path":"/prod/first-api","accountId":"625297745038","protocol":"HTTP/1.1",
 "stage":"prod","requestTimeEpoch":1528035823928,"requestId":"b865dbd6-6739-11e8-b135
 -a30269a8ec58","identity":{"cognitoIdentityPoolId":null,"accountId":null,
 "cognitoIdentityId":null,"caller":null,"SourceIp":"157.33.133.217","accessKey":null,
 "cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,
 "userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like
 Gecko) Chrome/66.0.3359.181 Safari/537.36","user":null},"apiId":"nvbhfdojfg"},"body":null,
 "isBase64Encoded":false}}

Szczegóły wydarzenia są również dostępne w danych wyjściowych po kliknięciu adresu URL. Wartość httpMethod to GET, a queryStringParameters mają wartość null, ponieważ w ciągu zapytania nie ma nic. Szczegóły wydarzenia są przekazywaneinput które określiliśmy w module obsługi AWS Lambda -

Dane wyjściowe, które otrzymujemy z bramy API, to tylko pliki body szczegóły, takie jak message i input. Odpowiedź jest całkowicie kontrolowana przez bramę API i sposób wyświetlania jej jako danych wyjściowych.

Teraz przekażmy dane wejściowe do adresu URL GET w ciągu zapytania i zobaczmy ekran -

Następnie możesz zobaczyć wyjście querystring, jak pokazano poniżej -

{"message":"Go Serverless v1.0! Your function executed 
successfully!","input":{"resource":"/first-api","path":"/first-api","httpMethod":
"GET","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,
image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate, 
br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":"https",
"CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false",
"CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false",
"CloudFront-Viewer-Country":"IN","Host":"nvbhfdojfg.execute-api.us-east-1.amazonaws.com",
"upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64)
 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36","Via":"2.0 
 8b1d3263c2fbd0a2c270b174d7aa3d61.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"JIBZw3I-blKbnpHP8LYXPVolCgdW5KmEukZS4at9mi4vrWBMI-UKNw==",
 "X-Amzn-Trace-Id":"Root=1-5b13ff90-7d6e38d4c0e4a5d4e6184f30","X-Forwarded-For":
 "157.33.133.217, 54.182.242.127","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"queryString
 Parameters":{"displaymessage":"Hello"},"pathParameters":null,"stageVariables":null,
 "requestContext":{"resourceId":"pes5sy","resourcePath":"/first-api","httpMethod":
 "GET","extendedRequestId":"H6TeiG34oAMFguA=","requestTime":"03/Jun/2018:14:47:44 +0000","path":"/prod/first-api","accountId":"625297745038","protocol":"HTTP/1.1",
"stage":"prod","requestTimeEpoch":1528037264252,"requestId":"12e5dca3-
673d-11e8-8966-69fcf43bd4db","identity":{"cognitoIdentityPoolId":null,"accountId":null,
"cognitoIdentityId":null,"caller":null,"exmpleIp":"157.33.133.217","accessKey":null,
"cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,
"userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like
 Gecko) Chrome/66.0.3359.181 Safari/537.36","user":null},"apiId":"nvbhfdojfg"},"body":
 null,"isBase64Encoded":false}}

Zmieńmy funkcję AWS Lambda, aby wyświetlała tylko szczegóły zapytania, jak pokazano poniżej -

'use strict';
module.exports.hello = (event, context, callback) => {
   const response = {
      statusCode: 200,
      body: JSON.stringify({
         message:(event.queryStringParameters &&     event.queryStringParameters.displaymessage!="") ? event.queryStringParameters.displaymessage : 'Go Serverless v1.0! Your function executed successfully!'
      }),
   };
   callback(null, response);
   // Use this code if you don't use the http event with the LAMBDA-PROXY integration
   // callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};

Zauważ, że zmieniliśmy wiadomość w oparciu o kwerendę display message. Spowoduje to ponowne wdrożenie funkcji i sprawdzenie danych wyjściowych. Wyświetla szczegóły obecne w komunikacie wyświetlania zmiennej ciągu zapytania, jak pokazano poniżej.

Dodajmy teraz post do zdarzeń utworzonych, jak pokazano poniżej -

Teraz zastosuj wprowadzone zmiany, a zobaczysz następujące dane wyjściowe polecenia wdrożenia -

Pamiętaj, że testowanie adresu URL posta bezpośrednio w przeglądarce nie da szczegółów. Powinieneś przetestować adres URL posta w formaciepostman.

Po listonosza idź do https://www.getpostman.com/apps. Pobierz aplikację zgodnie ze swoim systemem operacyjnym. Po zainstalowaniu powinieneś móc przetestować swój adres URL posta, jak pokazano poniżej -

Spowoduje to wyświetlenie wiadomości, którą dodaliśmy w funkcji Lambda.

W tym rozdziale wyjaśniono szczegółowo proces wykonywania i wywoływania funkcji Lambda oraz kroki z tym związane.

Model wykonania AWS Lambda

Wykonanie AWS zależy od szczegółów konfiguracji dodanych dla funkcji AWS Lambda. Po utworzeniu funkcji istnieje plikmemory i time allotted, który jest używany do wykonywania funkcji AWS Lambda.

Za pomocą szczegółów konfiguracji AWS Lambda tworzy kontekst wykonania. Kontekst wykonania to tymczasowe środowisko uruchomieniowe, które jest przygotowane z wszelkimi zewnętrznymi zależnościami, takimi jak połączenie z bazą danych, punkty końcowe http, biblioteki stron trzecich itp., Jeśli takie istnieją.

Kiedy funkcja AWS Lambda jest wywoływana po raz pierwszy lub jeśli funkcja lambda jest aktualizowana, dodaje się niewielkie opóźnienie ze względu na konfigurację kontekstu wykonania. Jednak kolejne wywołania są szybsze w porównaniu do pierwszego. AWS Lambda próbuje ponownie użyć kontekstu wykonania, jeśli funkcja Lambda jest wywoływana w krótszym czasie.

Ponowne użycie kontekstu wykonania ma następujące konsekwencje -

  • Jeśli istnieje połączenie z bazą danych w celu wykonania Lambda, połączenie jest utrzymywane do ponownego wykorzystania. Zatem kod Lambda musi być taki, że połączenie musi być najpierw sprawdzone - jeśli istnieje i zostanie ponownie użyte; w przeciwnym razie będziemy musieli nawiązać nowe połączenie.

  • Kontekst wykonania zachowuje miejsce na dysku 500 MB w formacie /tmpinformator. Wymagane dane są przechowywane w tym katalogu. Możesz dodatkowo sprawdzić kod, aby sprawdzić, czy dane istnieją.

  • Jeśli wywołania zwrotne lub niektóre procesy w tle nie są kompletne w momencie wywołania funkcji Lambda, wykonanie rozpocznie się po ponownym wywołaniu funkcji lambda. Jeśli nie potrzebujesz, aby coś takiego się wydarzyło, upewnij się, że wszystkie procesy zostały poprawnie zakończone po zakończeniu wykonywania funkcji.

Powinieneś użyć kontekstu wykonania i danych przechowywanych w katalogu tmp. Będziesz musiał dodać niezbędne kontrole w kodzie, aby sprawdzić, czy wymagane dane istnieją przed utworzeniem nowych nowych. Pozwoli to zaoszczędzić czas podczas wykonywania i przyspieszyć.

Wywołanie funkcji AWS Lambda

Możemy wywołać AWS ręcznie za pomocą aws cli. Widzieliśmy już, jak tworzyć i wdrażać AWS Lambda przy użyciucli. Tutaj najpierw utworzymy funkcję przy użyciuaws cli i przywołaj to samo.

Tworzenie funkcji AWS Lambda przy użyciu interfejsu AWS CLI

Możesz użyć następujących poleceń do tworzenia funkcji AWS Lambda za pomocą aws cli -

Commands

create-function 
--function-name <value>
--runtime <value>
--role <value>
--handler <value>
[--code <value>] 
[--description <value>] 
[--timeout <value>] 
[--memory-size <value>] 
[--environment <value>] 
[--kms-key-arn <value>] 
[--tags <value>] 
[--zip-file <value>] 
[--cli-input-json <value>]

Command with values

aws lambda create-function 
--function-name "lambdainvoke" 
--runtime "nodejs8.10" 
--role "arn:aws:iam::625297745038:role/lambdaapipolicy" 
--handler "index.handler" 
--timeout 5 
--memory-size 256 
--zip-file "fileb://C:\nodeproject\index.zip"

Wyjście jest jak pokazano poniżej -

Funkcja utworzona w konsoli AWS jest pokazana poniżej -

Teraz możesz wywołać funkcję za pomocą polecenia:invoke

--function-name <value>
[--invocation-type <value>]
[--log-type <value>]
[--client-context <value>]
[--payload <value>]
[--qualifier <value>]
outfile <value>

Options

--function-name − Podaj nazwę funkcji, którą chcesz wywołać.

--invocation-type(string) − domyślnie typem wywołania jest requestresponse. Dostępne wartości do użycia z typem wywołania toRequestResponse, Event i DryRun.

  • Typ wywołania zdarzenia ma być używany w odpowiedzi asynchronicznej.

  • DryRun jest używany, gdy chcesz zweryfikować funkcję Lambda bez konieczności jej wykonywania.

--log-type − To będzie Tailjeśli typ wywołania to RequestResponse. Daje ostatnie dane dziennika zakodowane w formacie base64 4KB. Możliwe wartości toTail i None.

--client-context −Możesz przekazać dane klienta do funkcji Lambda. Kontekst klienta musi być w formacie json i zakodowany w formacie base64. Maksymalny rozmiar pliku to 3583 bajty.

--payload − JSON do funkcji lambda.

--qualifier −Możesz określić wersję funkcji Lambda lub nazwę aliasu. Jeśli przekażesz wersję funkcji, api użyje kwalifikowanej funkcji arn do wywołania funkcji Lambda. Jeśli określisz nazwę aliasu, interfejs API użyje aliasu ARN do wywołania funkcji Lambda.

outfile − To jest nazwa pliku, w którym zawartość zostanie zapisana.

Command with values

aws lambda invoke --function-name "lambdainvoke" --log-type 
Tail C:\nodeproject\outputfile.txt

Możesz użyć opcji ładunku, aby wysłać fikcyjne zdarzenie do funkcji lambda w formacie json, jak pokazano poniżej.

Powiązany kod AWS Lambda jest następujący -

exports.handler = async (event, callback) => {
   console.log("Hello => "+ event.name);
   console.log("Address =>"+ event.addr);
   callback(null, 'Hello '+event.name +" and address is "+ event.addr);
};

Zwróć uwagę, że w kodzie mamy konsolę event.name i event.addr. Teraz użyjmy opcji payload w aws cli, aby wysłać zdarzenie z nazwą i adresem w następujący sposób -

aws lambda invoke --function-name "lambdainvoke" --log-type 
Tail --payload file://C:\clioutput\input.txt C:\clioutput\outputfile.txt

Thenpayload przyjmuje dane wejściowe jako ścieżkę pliku, która ma dane wejściowe json, jak pokazano -

{"name":"Roy Singh", "addr":"Mumbai"}

Odpowiednie wyjście jest pokazane poniżej -

Dane wyjściowe są przechowywane w pliku C:\clioutput\outputfile.txt w następujący sposób -

"Hello Roy Singh and address is Mumbai"

Przykładowe wydarzenia

Możesz przetestować funkcję AWS Lambda, przekazując przykładowe zdarzenie. Ta sekcja zawiera przykładowe zdarzenia dla usług AWS. Możesz użyćinvokepolecenie, aby przetestować dane wyjściowe po uruchomieniu za pomocą dowolnej usługi. Przestrzegaj kodów podanych poniżej dla odpowiednich przykładowych zdarzeń -

Amazon S3 Put Sample Event

{
  "Records": [{
      "eventVersion": "2.0",
      "eventTime": "1970-01-01T00:00:00.000Z",
      "requestParameters": {
         "SourceIPAddress": "127.0.0.1"
      },
      "s3": {
         "configurationId": "testConfigRule",
         "object": {
            "eTag": "0123456789abcdef0123456789abcdef",
            "sequencer": "0A1B2C3D4E5F678901",
            "key": "HappyFace.jpg",
            "size": 1024
         },
         "bucket": { 
            "arn": bucketarn,
            "name": "Sourcebucket",
            "ownerIdentity": {
               "principalId": "EXAMPLE"
            }
         },
         "s3SchemaVersion": "1.0"
      },
      "responseElements": {
         "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
         "x-amz-request-id": "EXAMPLE123456789"
      },
      "awsRegion": "us-east-1",
      "eventName": "ObjectCreated:Put",
      "userIdentity": {
         "principalId": "EXAMPLE"
      },
      "eventSource": "aws:s3"
   }]
}

Aby uzyskać details of the file from the s3 put event, możesz użyć następującego polecenia -

event.Records[0].s3.object.key   //will display the name of the file

Do get the bucket name, możesz użyć następującego polecenia -

event.Records[0].s3.bucket.name  //will give the name of the bucket.

Do see the EventName, możesz użyć następującego polecenia -

event.Records[0].eventName    // will display the eventname

Amazon S3 Usuń przykładowe zdarzenie

{
   "Records": [{
      "eventVersion": "2.0",
      "eventTime": "1970-01-01T00:00:00.000Z",
      "requestParameters": {
         "SourceIPAddress": "127.0.0.1"
      },
      "s3": {
         "configurationId": "testConfigRule",
         "object": {
            "sequencer": "0A1B2C3D4E5F678901",
            "key": "HappyFace.jpg"
         },
         "bucket": {
            "arn": bucketarn,
            "name": "Sourcebucket",
            "ownerIdentity": {
               "principalId": "EXAMPLE"
            }
         },
        "s3SchemaVersion": "1.0"
      },
      "responseElements": {
         "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
         "x-amz-request-id": "EXAMPLE123456789"
      },
      "awsRegion": "us-east-1",
      "eventName": "ObjectRemoved:Delete",
      "userIdentity": {
         "principalId": "EXAMPLE"
      },
      "eventSource": "aws:s3"
   }]
}

Amazon DynamoDB

Amazon DynamoDB może być zdarzeniem w AWS Lambda, gdy zmiany są dokonywane w tabeli DynamoDB. Możemy wykonywać operacje takie jak dodawanie wpisów, aktualizowanie i usuwanie rekordów z tabeli DynamodDB.

Przykładowe zdarzenie dodawania, wstawiania i usuwania zdarzenia DynamoDB jest pokazane tutaj -

{
  "Records": [{
      "eventID": "1",
      "eventVersion": "1.0",
      "dynamodb": {
         "Keys": {
            "Id": {
               "N": "101"
            }
         },
         "NewImage": {
            "Message": {
               "S": "New item!"
            },
            "Id": {
               "N": "101"
            }
         },
         "StreamViewType": "NEW_AND_OLD_IMAGES",
         "SequenceNumber": "111",
         "SizeBytes": 26
      },
      "awsRegion": "us-west-2",
      "eventName": "INSERT",
      "eventSourceARN": eventSourcearn,
      "eventSource": "aws:dynamodb"
   },
   {
      "eventID": "2",
      "eventVersion": "1.0",
      "dynamodb": {
         "OldImage": {
            "Message": {
               "S": "New item!"
            },
            "Id": {
               "N": "101"
            }
         },
        "SequenceNumber": "222",
        "Keys": {
            "Id": {
               "N": "101"
            }
         },
        "SizeBytes": 59,
        "NewImage": {
            "Message": {
               "S": "This item has changed"
            },
            "Id": {
				   "N": "101"
            }
         },
         "StreamViewType": "NEW_AND_OLD_IMAGES"
      },
      "awsRegion": "us-west-2",
      "eventName": "MODIFY",
      "eventSourceARN": Sourcearn,
      "eventSource": "aws:dynamodb"
   },
   {      
   "eventID": "3",
      "eventVersion": "1.0",
      "dynamodb": {
         "Keys": {
            "Id": {
               "N": "101"
            }
         },
         "SizeBytes": 38,
         "SequenceNumber": "333",
         "OldImage": {
            "Message": {
               "S": "This item has changed"
            },
            "Id": {
               "N": "101"
            }
         },
         "StreamViewType": "NEW_AND_OLD_IMAGES"
      },      "awsRegion": "us-west-2",
      "eventName": "REMOVE",
      "eventSourceARN": Sourcearn,
      "eventSource": "aws:dynamodb"    
   }]
}

Amazon Simple Notification Service

AWS Lambda może być pomocna w przetwarzaniu powiadomienia utworzonego w Simple Notification Service (SNS). Zawsze, gdy w SNS pojawia się komunikat, funkcja Lambda może zostać wyzwolona zdarzeniem SNS, które zawiera szczegóły komunikatów. Te komunikaty mogą być przetwarzane wewnątrz funkcji Lambda i mogą być wysyłane dalej do innych usług zgodnie z wymaganiami.

Po wprowadzeniu wiadomości SNS uruchomi funkcję Lambda. Jeśli jakikolwiek błąd spróbuje wywołać funkcję Lambda, SNS spróbuje ponownie wywołać funkcję lambda maksymalnie trzy razy.

Przykładowe wydarzenie Amazon SNS

Przykładowe zdarzenie, które ma wszystkie szczegóły dostępne w funkcji AWS Lambda do przeprowadzenia dalszego procesu, pokazano poniżej -

{
  "Records": [{
      "EventVersion": "1.0",
      "EventSubscriptionArn": eventsubscriptionarn,
      "EventSource": "aws:sns",
      "Sns": {
         "SignatureVersion": "1",
         "Timestamp": "1970-01-01T00:00:00.000Z",
         "Signature": "EXAMPLE",
         "SigningCertUrl": "EXAMPLE",
         "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
         "Message": "Hello from SNS!",
         "MessageAttributes": {
            "Test": {
               "Type": "String",
               "Value": "TestString"
            },
            "TestBinary": {
               "Type": "Binary",
               "Value": "TestBinary"
            }
         },
         "Type": "Notification",
         "UnsubscribeUrl": "EXAMPLE",
         "TopicArn": topicarn,
         "Subject": "TestInvoke"
      }
   }]
}

Amazon Simple Mail Service

Usługa Amazon Simple Mail Service może służyć do wysyłania i odbierania wiadomości. Funkcję AWS Lambda można wywołać w Simple Mail Service po odebraniu wiadomości.

Odbieranie przykładowego wydarzenia e-mail Amazon SES

Szczegóły zdarzenia SES podczas używania wewnątrz AWS Lambda pokazano poniżej -

{
  "Records": [{
      "eventVersion": "1.0",
      "ses": {
         "mail": {
            "commonHeaders": {
               "from": [
                  "Jane Doe <[email protected]>"
               ],
            "to": [
               "[email protected]"
            ],
            "returnPath": "[email protected]",
            "messageId": "<0123456789Source.com>",
            "date": "Wed, 7 Oct 2015 12:34:56 -0700",
            "subject": "Test Subject"
         },
         "example": "[email protected]",
         "timestamp": "1970-01-01T00:00:00.000Z",
         "destination": [
            "[email protected]"
         ],
         "headers": [{
            "name": "Return-Path",
            "value": "<[email protected]>"
         },
         {
            "name": "Received",
            "value": "from mailer.example.com (mailer.example.com [203.0.113.1]) by inbound-smtp.us-west-2.amazonaws.com with SMTP id o3vrnil0e2ic for [email protected]; Wed, 07 Oct 2015 12:34:56 +0000 (UTC)"
         },
         {
            "name": "DKIM-Signature",
            "value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=example; h=mime-version:from:date:message-id:subject:to:content-type; bh=jX3F0bCAI7sIbkHyy3mLYO28ieDQz2R0P8HwQkklFj4=; b=sQwJ+LMe9RjkesGu+vqU56asvMhrLRRYrWCbV"
         },
         {
            "name": "MIME-Version",
            "value": "1.0"
         },
         {
            "name": "From",
            "value": "Jane Doe <[email protected]>"
         },
         {
            "name": "Date",
            "value": "Wed, 7 Oct 2015 12:34:56 -0700"
         },
         {
            "name": "Message-ID",
            "value": "<0123456789example.com>"
         },
         {
            "name": "Subject",
            "value": "Test Subject"
         },
         {
            "name": "To",
            "value": "[email protected]"
         },
         {
            "name": "Content-Type",
            "value": "text/plain; charset=UTF-8"
         }],
         "headersTruncated": false,
         "messageId": "o3vrnil0e2ic28tr"
      },
      "receipt": {
         "recipients": [
            "[email protected]"
         ],
         "timestamp": "1970-01-01T00:00:00.000Z",
         "spamVerdict": {
            "status": "PASS"
         },
         "dkimVerdict": {
            "status": "PASS"
         },
         "processingTimeMillis": 574,
         "action": {
            "type": "Lambda",
            "invocationType": "Event",
            "functionArn": "arn:aws:lambda:us-west-2:012345678912:function:example"
         },
         "spfVerdict": {
            "status": "PASS"
         },
         "virusVerdict": {
            "status": "PASS"
         }
      }
   },
   "eventexample": "aws:ses"
   }]
}

Dzienniki Amazon Cloudwatch

AWS Lambda można wyzwolić z dzienników Amazon CloudWatch przy użyciu rozszerzenia CloudWatch Logs Subscriptions. Subskrypcje CloudWatch Logs zawierają dane w czasie rzeczywistym o logach, które mogą być przetwarzane i analizowane w AWS Lambda lub mogą być użyte do załadowania do innych systemów.

Przykładowe zdarzenie Amazon CloudWatch Logs

{
   "awslogs": {
      "data": "H4sIAAAAAAAAAHWPwQqCQBCGX0Xm7EFtK+smZBEUgXoLCdMhFtKV3akI8d0bLYmibvPPN3wz00CJxmQnTO41whwW
      QRIctmEcB6sQbFC3CjW3XW8kxpOpP+OC22d1Wml1qZkQGtoMsScxaczKN3plG8zlaHIta5KqWsozoTYw3/djzwhpL
      wivWFGHGpAFe7DL68JlBUk+l7KSN7tCOEJ4M3/qOI49vMHj+zCKdlFqLaU2ZHV2a4Ct/an0/ivdX8oYc1UVX860fQ
      DQiMdxRQEAAA=="
   }
}

Amazon API Gateway

Funkcję AWS Lambda można wywołać na httpsurl. Można to zrobić dalejGET, POST, PUT. Po wywołaniu adresu URL https uruchamiana jest również funkcja AWS Lambda, a dane przekazywane do https za pomocą funkcji get / post mogą zostać udostępnione wewnątrz AWS Lambda w celu ich wstawienia do DynamoDB lub wysłania poczty itp.

Zdarzenie żądania API Gateway Proxy

{
   "path": "/test/hello",
   "headers": {
      "Accept":  "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
      "Accept-Encoding": "gzip, deflate, lzma, sdch, br",
      "Accept-Language": "en-US,en;q=0.8",
      "CloudFront-Forwarded-Proto": "https",
      "CloudFront-Is-Desktop-Viewer": "true",
      "CloudFront-Is-Mobile-Viewer": "false",
      "CloudFront-Is-SmartTV-Viewer": "false",
      "CloudFront-Is-Tablet-Viewer": "false",
      "CloudFront-Viewer-Country": "US",
      "Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com",
      "Upgrade-Insecure-Requests": "1",
      "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
      "Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)",
      "X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==",
      "X-Forwarded-For": "192.168.100.1, 192.168.1.1",
      "X-Forwarded-Port": "443",
      "X-Forwarded-Proto": "https"
   },
   "pathParameters": {
      "proxy": "hello"
   },
   "requestContext": {
      "accountId": "123456789012",
      "reexampleId": "us4z18",
      "stage": "test",
      "requestId": "41b45ea3-70b5-11e6-b7bd-69b5aaebc7d9",
	   "identity": {
         "cognitoIdentityPoolId": "",
         "accountId": "",
         "cognitoIdentityId": "",
         "caller": "",
         "apiKey": "",
         "exampleIp": "192.168.100.1",
         "cognitoAuthenticationType": "",
         "cognitoAuthenticationProvider": "",
         "userArn": "",
         "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
         "user": ""
      },
      "reexamplePath": "/{proxy+}",
      "httpMethod": "GET",
      "apiId": "wt6mne2s9k"
   },
   "reexample": "/{proxy+}",
   "httpMethod": "GET",
   "queryStringParameters": {
      "name": "me"
   },
   "stageVariables": {
      "stageVarName": "stageVarValue"
   }
}

Zdarzenie odpowiedzi serwera proxy bramy interfejsu API

{
   "statusCode": 200,
   "headers": {
      "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
      "Accept-Encoding": "gzip, deflate, lzma, sdch, br",
      "Accept-Language": "en-US,en;q=0.8",
      "CloudFront-Forwarded-Proto": "https",
      "CloudFront-Is-Desktop-Viewer": "true",
      "CloudFront-Is-Mobile-Viewer": "false",
      "CloudFront-Is-SmartTV-Viewer": "false",
      "CloudFront-Is-Tablet-Viewer": "false",
      "CloudFront-Viewer-Country": "US",
      "Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com",
      "Upgrade-Insecure-Requests": "1",
      "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
      "Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)",
      "X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==",
      "X-Forwarded-For": "192.168.100.1, 192.168.1.1",
      "X-Forwarded-Port": "443",
      "X-Forwarded-Proto": "https"
   },
   "body": "Hello World"
}

Usunięcie funkcji AWS Lambda spowoduje usunięcie AWS Lambda z konsoli AWS. Istnieją 2 sposoby usunięcia funkcji AWS Lambda.

  • Korzystanie z konsoli AWS.
  • Korzystanie z polecenia AWS CLI

W tym rozdziale szczegółowo omówiono te dwa sposoby.

Korzystanie z konsoli AWS

Aby usunąć funkcję Lambda za pomocą konsoli AWS, wykonaj kroki podane poniżej -

Krok 1

Zaloguj się do konsoli AWS i przejdź do serwisu AWS Lambda. Możesz zauważyć, że dotychczas utworzone funkcje lambda AWS są wymienione w konsoli AWS, jak pokazano poniżej -

Z listy wynika, że ​​do tej pory utworzono 23 funkcje AWS Lambda. Możesz je przeglądać za pomocą paginacji podanej na górze lub przeszukiwać AWS Lambda za pomocą pola wyszukiwania.

Krok 2

Zauważ, że na każdej funkcji AWS Lambda znajduje się przycisk opcji. Wybierz funkcję, którą chcesz usunąć. Obserwuj zrzut ekranu pokazany poniżej -

Krok 3

Po wybraniu funkcji AWS Lambda plik Actionmenu rozwijane, które było wcześniej wyszarzone, jest teraz podświetlone. Teraz otwórz pole kombi i wyświetli opcje, jak pokazano -

Krok 4

Wybierz Deleteprzycisk, aby usunąć funkcję AWS Lambda. Po kliknięciuDelete, wyświetla komunikat w następujący sposób -

Krok 5

Przeczytaj uważnie wiadomość, a później kliknij Delete przycisk, aby trwale usunąć funkcję lambda AWS.

Note- Usunięcie aws lambda nie spowoduje usunięcia powiązanej roli. Aby usunąć rolę, musisz przejść do uprawnień i usunąć tę rolę.

Krok 6

Lista dotychczas utworzonych ról znajduje się poniżej. Zwróć uwagę, że istnieje plikCreate role przycisk i Delete role przycisk.

Kliknij pole wyboru obok roli, którą chcesz usunąć. Możesz także wybrać wiele ról do usunięcia naraz.

Krok 7

Po kliknięciu przycisku Usuń zobaczysz komunikat potwierdzający, jak pokazano poniżej -

Teraz przeczytaj uważnie wymienione szczegóły, a później kliknij Yes, delete przycisk.

Korzystanie z polecenia AWS CLI

Najpierw utwórzmy funkcję Lambda za pomocą aws cli i usuńmy ją za pomocą tego samego polecenia. W tym celu wykonaj kroki podane poniżej -

Krok 1

Polecenie z wartościami funkcji tworzenia jest następujące -

aws lambda create-function 
--function-name "lambdatestcli" 
--runtime "nodejs8.10" 
--role "arn:aws:iam::625297745038:role/lambdaapipolicy" 
--handler "index.handler" 
--timeout 5 
--memory-size 256 
--zip-file "fileb://C:\demotest\index.zip"

Odpowiednie wyjście jest pokazane tutaj -

Krok 2

Utworzona funkcja AWS Lambda to lambdatestcli. Użyliśmy istniejącej roli arn do stworzenia funkcji lambda.

Następnie możesz znaleźć tę funkcję wyświetlaną w konsoli AWS, jak pokazano poniżej -

Krok 3

Teraz wywołajmy funkcję, aby przetestować dane wyjściowe za pomocą pokazanego polecenia -

aws lambda invoke --function-name "lambdatestcli" --log-type Tail 
C:\demotest\outputfile.txt

To polecenie da ci dane wyjściowe, jak pokazano -

Krok 4

Możesz obserwować logi z Cloudwatch dla funkcji lambda lambdatestcli

Krok 5

Przejdźmy teraz do faktycznej części usuwania funkcji AWS. Delete aws cli apiusunie podaną funkcję. Szczegóły polecenia używanego w tym celu podano poniżej -

Command

delete-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

Options

--function-name(string) - Przyjmie nazwę funkcji Lambda lub arn funkcji AWS Lambda.

--qualifier (string)- To jest opcjonalne. Tutaj możesz określić wersję AWS Lambda, która ma zostać usunięta.

-- cli-input-json(string)- Wykonuje operację usługi na podstawie dostarczonego ciągu JSON. Ciąg JSON jest zgodny z podanym formatemby --generate-cli-skeleton. Jeśli w wierszu poleceń zostaną podane inne argumenty, wartości interfejsu wiersza polecenia zastąpią wartości podane w formacie JSON.

--generate-cli-skeleton(string) - drukuje szkielet json na standardowe wyjście bez wysyłania żądania API.

Command with values

aws lambda delete-function --function-name "lambdatestcli"

Odpowiednie wyjście pokazano poniżej -

Krok 6

Jeśli sprawdzisz teraz, możesz zauważyć, że funkcja nie będzie widoczna na liście funkcji AWS Lambda, jak pokazano na zrzucie ekranu poniżej -

Praca z Amazon API Gateway

Funkcję AWS Lambda można wywołać na HTTPSurl. Można to zrobić w GET, POST, PUT. Kiedy URL HTTPS jest wywoływany, funkcja AWS Lambda może również zostać wyzwolona, ​​a dane przekazywane do HTTPS za pomocąget/post można udostępnić w AWS Lambda do wstawienia w DynamoDB lub do wysyłania poczty itp.

W tym rozdziale szczegółowo omówiono różne procesy związane z pracą z AWS lambda i API Gateway.

Zaangażowane procesy

Poniżej przedstawiono procesy związane z pracą z AWS lambda i API Gateway -

  • Utwórz rolę IAM w celu uzyskania uprawnień
  • Utwórz funkcję lambda AWS
  • Utwórz bramę interfejsu API
  • Połącz funkcję lambda z bramą API
  • Przekazywanie danych do bramy API

Podstawowy diagram wyjaśniający działanie bramki API i AWS Lambda jest podany tutaj -

Te procesy są szczegółowo wyjaśnione w dalszej części tego rozdziału wraz z odpowiednimi zrzutami ekranu.

Utwórz rolę IAM w celu uzyskania uprawnień

Z usług Amazon, jak pokazano poniżej, wybierz IAM do tworzenia ról, które mają być używane przez funkcję Lambda.

Przejdź do IAM i wybierz Roles od lewej części bocznej, jak pokazano poniżej -

Kliknij Create role dla funkcji Lambda.

Wybierz Lambda i kliknij Permissionsna dnie. Wybierz uprawnienia wymagane dla API Gateway i Lambda.

Wyszukaj bramę API w wyszukiwaniu, a pojawi się lista wszystkich powiązanych uprawnień. Tutaj wybraliśmy pełny dostęp do bramy API, jak pokazano poniżej -

Teraz wyszukaj bramę API, a wyświetli listę wszystkich powiązanych uprawnień. Tutaj wybraliśmy pełny dostęp do bramy API, jak pokazano poniżej -

Musisz powtórzyć ten sam proces również dla zasad.

Gdy skończysz wybierać niezbędne zasady, kliknij Reviewna następny krok. Wprowadź nazwę roli według własnego wyboru, jak pokazano poniżej -

Wyświetla zasady przypisane do roli. KliknijCreate role i skończyliśmy z tworzeniem roli i możemy przejść do funkcji lambda.

Utwórz funkcję AWS Lambda

Przejdź do usług AWS i kliknij usługę lambda, aby utworzyć funkcję do połączenia jej z bramą API.

Ekran interfejsu użytkownika dla funkcji Lambda pokazano poniżej. KliknijCreate function przycisk, aby kontynuować tworzenie funkcji Lambda.

Wpisz nazwę funkcji i wybierz istniejącą rolę, którą utworzyliśmy powyżej.

Miga komunikat, że funkcja o nazwie lambdawithapigateway został pomyślnie utworzony.

Zwróć uwagę, że tutaj użyjemy nodejsruntime do napisania kodu. Kod AWS zhelloworld wiadomość jest taka, jak pokazano poniżej -

Kod AWS Lambda jest obecny w index.jsplik. Funkcja o nazwie handler ma parametry, a mianowicieevents, context i callback.

Funkcja wywołania zwrotnego ma w zasadzie błąd i komunikat o powodzeniu. Zauważ, że tutaj nie mamy żadnego kodu związanego z błędami, więc przekazywana jest wartość null, a komunikat o powodzeniu toHelloWorld from lambda.

Na koniec zapisz wprowadzone zmiany i przejdźmy do dodawania funkcji Lambda do bramki API.

Utwórz bramę interfejsu API

Zaloguj się na swoje konto AWS i otwórz API Gateway, jak pokazano poniżej -

Kliknij API Gateway, aby przejść do ekranu, na którym można utworzyć nową bramę API.

Kliknij Create API i dodaj szczegóły, jak pokazano poniżej -

Kliknij Create APIprzycisk po prawej stronie ekranu. Spowoduje to wyświetlenie nowo utworzonego interfejsu API po lewej stronie ekranu.

Kliknij Actions menu rozwijane, aby utworzyć nowy zasób dla interfejsu API.

Teraz utwórz nowy zasób, jak pokazano poniżej -

Wejdz do Resource Namejak pokazano niżej. Zobaczysz nazwę zasobu wprowadzoną w utworzonym adresie URL na końcu. KliknijCreate Resource a zobaczysz to na ekranie w następujący sposób -

Dodaj GET/POSTmetody do utworzonego zasobu, jak pokazano poniżej. Wybierz metodę zActions upuścić.

Kliknij GET metoda, aby dodać metodę do interfejsu API.

Następnym krokiem jest integracja, która zintegruje go z funkcją Lambda. Teraz dodaj do niego funkcję Lambda, jak pokazano poniżej -

Połącz funkcję Lambda z API Gateway

Wybierz utworzoną wcześniej funkcję lambda.

Zapisz zmiany i zobaczysz okno dialogowe z pytaniem o pozwolenie, jak pokazano poniżej -

Kliknij OKza pozwolenie. To są szczegóły wykonania między żądaniem HTTP bramy API a funkcją Lambda -

Teraz pozwól nam wdrożyć zmiany bramy interfejsu API. W tym celu musimy wybrać plikDeploy API od Actions lista rozwijana, jak pokazano poniżej -

Wybierz Deploy API. Zapyta o stan wdrożenia. WybierzNew Stage z listy rozwijanej Etap wdrażania i dodaj nazwę etapu jako Production.

Kliknij Deploy przycisk i przekieruje Cię do adresu URL, jak pokazano poniżej -

Wybierz GETmetoda z lewej strony, aby uzyskać adres URL. Otwórz adres URL w nowej zakładce, aby zobaczyć wiadomość z funkcji Lambda.

To jest podstawowy przykład pracy z AWS Lambda i AWS API Gateway. W powyższym przykładzie zakodowaliśmy wiadomość na stałe w funkcji Lambda.

Teraz weźmy szczegóły wiadomości z bramy interfejsu API. W przypadku gdy wywołanie HTTPS ma być wywołane z innej domeny, na przykład wywołanie AJAX do API, musimy włączyć CORS dla utworzonej bramy API.

Wybierz zasób utworzony dla API i kliknij Actions lista rozwijana -

Teraz, Enable CORS otworzy następujący ekran -

Możesz użyć kilku metod, aby WŁĄCZAĆ CORS. Access-Control-Allow-Origin jest oznaczony jako *, co oznacza, że ​​pozwoli na pobranie treści z bramki API z dowolnej domeny.

Możesz także określić nazwę domeny, na której chcesz pracować z interfejsem API. KliknijEnable CORS and replace existing CORS headers i wyświetli komunikat potwierdzający, jak pokazano poniżej -

Kliknij Yes, replace existing valuesprzycisk, aby go włączyć. PlikEnable CORS ekran wygląda jak poniżej -

Przekazywanie danych do API Gateway

Otwórz interfejs API utworzony w API Gateway displayhelloworld jak pokazano poniżej -

Kliknij Integration Request wysłać dane, jak pokazano poniżej -

Wybierać Body Mapping Templates i dodaj Content-Type na przykład jako application/json. Kliknij dodany typ zawartości i dodaj szczegóły w następujący sposób -

Teraz dodaj szablon w formacie JSON, jak pokazano poniżej -

Zauważ, że przyjęliśmy wiadomość jako parametr do pobierania danych z API Gateway i udostępniania ich AWS Lambda. Składnia umożliwiająca uzyskanie szczegółów jest taka, jak pokazano powyżej.

Teraz Wdróż interfejs API, aby udostępnić zmiany w adresie URL bramy interfejsu API. W tym celu musimy zmienić funkcję Lambda, aby wyświetlała dane na podstawie adresu URL API Gateway. Kod funkcji Lambda jest podany poniżej. Zauważ, że pobieramy wiadomość ze zdarzenia i przekazujemy ją do wywołania zwrotnego.

exports.handler = (event, context, callback) => {
   let message = event.message;
   callback(null, message);
};

Teraz zapisz zmiany w Lambdzie i kliknij adres URL, aby zobaczyć zmiany. Obserwuj zrzut ekranu podany poniżej -

Kliknij adres URL, jak pokazano poniżej -

https://rw2ek1xung.execute-api.us-east-
1.amazonaws.com/prod/hello?message=hello%20from%20api%20gateway

Zwróć uwagę, że tutaj przekazujemy wiadomość jako ciąg zapytania do adresu URL GET. Następnie możesz obserwować dane wyjściowe, jak pokazano poniżej -

Odczytuje szczegóły wysłane do wiadomości z adresu URL i wyświetla to samo w przeglądarce.

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. Zostawmy to na razie puste, ponieważ musimy wyzwolić 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);
};

Zwróć uwagę, ż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 -

Używanie funkcji Lambda z Amazon DynamoDB

DynamoDB może wyzwalać AWS Lambda, gdy dane zostaną dodane do tabel, zaktualizowane lub usunięte. W tym rozdziale będziemy pracować na prostym przykładzie, który doda elementy do tabeli DynamoDB i AWS Lambda, które odczytują dane i wyślą pocztę z dodanymi danymi.

Przybory

Aby korzystać z Amazon DB i AWS Lambda, musimy wykonać kroki, jak pokazano poniżej -

  • Utwórz tabelę w DynamoDB z kluczem podstawowym

  • Utwórz rolę, która będzie miała uprawnienia do pracy z DynamoDBand AWS Lambda.

  • Utwórz funkcję w AWS Lambda

  • AWS Lambda Trigger do wysyłania poczty

  • Dodaj dane w DynamoDB

Omówmy szczegółowo każdy z tych kroków.

Przykład

Będziemy pracować na następującym przykładzie, który pokazuje podstawową interakcję między DynamoDB i AWS Lambda. Ten przykład pomoże ci zrozumieć następujące operacje -

  • Tworzenie tabeli o nazwie klient w tabeli Dynamodb i jak wprowadzać dane do tej tabeli.

  • Uruchamianie funkcji AWS Lambda po wprowadzeniu danych i wysyłanie poczty za pomocą usługi Amazon SES.

Podstawowy schemat blokowy, który wyjaśnia przepływ przykładu, jest pokazany poniżej -

Utwórz tabelę w DynamoDB z kluczem podstawowym

Zaloguj się do konsoli AWS. Przejdź do AWS Services i wybierz DynamoDB, jak pokazano poniżej. Wybierz DynamoDB.

DynamoDB pokazuje opcje, jak pokazano poniżej -

Teraz kliknij Create tableaby utworzyć tabelę, jak pokazano. Nazwaliśmy tabelę jakocustomer z kluczem podstawowym dla tej tabeli jako cust_id. KliknijCreate przycisk, aby dodać tabelę do dynamodb.

Utworzona tabela jest taka, jak pokazano poniżej -

Do utworzonej tabeli możemy dodawać pozycje w następujący sposób -

Kliknij Items i kliknij Create item przycisk jak pokazano -

Tworzenie roli z uprawnieniami do pracy z DynamoDB i AWS Lambda

Aby utworzyć rolę, przejdź do usług AWS i kliknij IAM.

Stwórzmy politykę, która będzie używana tylko dla utworzonej wcześniej tabeli DynamoDB -

Teraz wybierz plik Service. Zwróć uwagę, że wybrana przez nas usługa toDynamoDB. DlaActions wzięliśmy wszystko Dynamodbakcje tj. dostęp do listy, odczytu i zapisu. Dlaresources, wybierzemy akcje typu zasobu tabeli. Kiedy go klikniesz, zobaczysz następujący ekran -

Teraz wybierz table i Add ARNdo niego, jak pokazano. DostaniemyARN szczegóły z customer table utworzone, jak pokazano poniżej -

Wchodzić arn szczegóły tutaj -

Kliknij Addaby zapisać zmiany. Raz zrobioneClick on Review policy. Wprowadź nazwę polisy, opis itp., Jak pokazano poniżej -

Kliknij create policyaby to zapisać. Dodaj politykę do tworzonej roli. WybierzRole z lewej strony i wprowadź szczegóły.

Zwróć uwagę, że dodane zasady są newpolicyfordynamdb, awslambdafullaccess, cloudwatchfullaccess i amazonsesfullaccess. Dodaj rolę i użyję jej podczas tworzenia funkcji AWS Lambda.

Utwórz funkcję w AWS Lambda

W ten sposób stworzyliśmy funkcję Lambda o nazwie newlambdafordynamodb jak pokazano.

Teraz dodajmy wyzwalacz DynamodDB do utworzonej AWS Lambda. Środowisko uruchomieniowe, którego będziemy używać, to Node.js.

Poniższe szczegóły można znaleźć w wyzwalaczu Dynamodb, który ma zostać skonfigurowany dla AWS Lambda -

Teraz wystarczy kliknąć Add aby dodać wyzwalacz do AWS Lambda.

Wyzwalacz AWS Lambda do wysyłania poczty

AWS Lambda zostanie wyzwolone, gdy dane zostaną wstawione do AWS Lambda. Parametr zdarzenia będzie zawierał dane dynamodb. Spowoduje to odczytanie danych z wydarzenia i wysłanie wiadomości e-mail.

Wysyłanie e-maila

Aby wysłać e-mail, musisz wykonać poniższe czynności -

Krok 1

Przejdź do usługi AWS i wybierz SES (prosta usługa e-mail). Potwierdź wiadomość e-mail, na którą musimy wysłać wiadomość e-mail, jak pokazano -

Krok 2

Naciśnij przycisk Verify a New Email Address aby dodać adres e-mail.

Krok 3

Wpisz adres e-mail, aby go zweryfikować. Adres e-mail otrzyma i aktywacyjny e-mail od Amazon, który należy kliknąć. Po zakończeniu aktywacji identyfikator e-mail jest weryfikowany i można go używać z usługami AWS.

Krok 4

Kod AWS Lambda, który odczytuje dane ze zdarzenia i wysyła e-mail jest podany poniżej -

var aws = require('aws-sdk');
var ses = new aws.SES({
   region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
   console.log(event);
   let tabledetails = JSON.parse(JSON.stringify(event.Records[0].dynamodb));
   console.log(tabledetails.NewImage.address.S);
   let customerid = tabledetails.NewImage.cust_id.S;
   let name = tabledetails.NewImage.name.S;
   let address = tabledetails.NewImage.address.S;
	
   var eParams = {
      Destination: {
         ToAddresses: ["[email protected]"]
      },
      Message: {
         Body: {
            Text: {
               Data: "The data added is as follows:\n CustomerId:"+customerid+"\n Name:"+name+"\nAddress:"+address
            }
         },
         Subject: {
            Data: "Data Inserted in Dynamodb table customer"
         }
      },
      Source: "[email protected]"
   };
   console.log('===SENDING EMAIL===');
   var email = ses.sendEmail(eParams, function(err, data) {
      if (err) console.log(err);
      else {
         console.log("===EMAIL SENT===");
         console.log("EMAIL CODE END");
         console.log('EMAIL: ', email);
         context.succeed(event);
         callback(null, "email is send");
      }
   });
}

Teraz zapisz funkcję Lambda i dane w tabeli DynamoDB.

Dodaj dane w DynamoDB

Użyj następującej sekwencji, aby dodać dane do DynamoDB.

Krok 1

Podejdź do stołu customer utworzony w Dynamodb.

Krok 2

Kliknij Create item.

Krok 3

Kliknij Save i sprawdź email id podany w AWS Lambda, aby zobaczyć, czy wiadomość została wysłana przez AWS Lambda.

Używanie funkcji Lambda z zaplanowanymi zdarzeniami

Przypuszcza się, że zaplanowane zdarzenia mają miejsce w regularnych odstępach czasu na podstawie zestawu reguł. Zaplanowane zdarzenia służą do wykonania funkcji Lambda po interwale zdefiniowanym w usługach Cloudwatch. Najlepiej nadają się do pracy z zadaniami cron wraz z AWS Lambda. W tym rozdziale wyjaśniono na prostym przykładzie, jak wysyłać pocztę co 5 minut przy użyciu zaplanowanych wydarzeń i AWS Lambda.

Przybory

Wymagania dotyczące korzystania z funkcji Lambda z zaplanowanymi zdarzeniami są następujące:

  • Zweryfikuj identyfikator e-mail za pomocą AWS SES
  • Utwórz rolę, aby korzystać z AWS SES, Cloudwatch i AWS Lambda
  • Utwórz funkcję Lambda, aby wysłać e-mail
  • Dodaj regułę dla zaplanowanych wydarzeń z AWS CloudWatch

Przykład

Przykład, który będziemy rozważać, doda zdarzenie CloudWatch do funkcji AWS Lambda. Cloudwatch uruchomi AWS Lambda na podstawie dołączonego do niego wzorca czasowego. Na przykład w poniższym przykładzie użyliśmy 5 minut jako wyzwalacza. Oznacza to, że co 5 minut AWS Lambda będzie wyzwalana, a AWS Lambda będzie wysyłać pocztę po każdym uruchomieniu.

Podstawowy schemat blokowy tego samego pokazano poniżej -

Zweryfikuj identyfikator e-mail za pomocą AWS SES

Zaloguj się do AWS i przejdź do usługi AWS SES, jak pokazano poniżej -

Teraz kliknij Simple Email Usługa, jak pokazano -

Kliknij Email Addresses po lewej stronie, jak pokazano -

Wyświetla przycisk Verify a New Email Address. Kliknij to.

Wchodzić Email Addresschcesz zweryfikować. KliknijVerify This Email Addressprzycisk. Otrzymasz pocztę z AWS na ten identyfikator e-mail z tematem: Amazon Web Services - żądanie weryfikacji adresu e-mail w regionie Wschodnie stany USA (Wirginia Północna)

Kliknij link podany w wiadomości, aby zweryfikować adres e-mail. Po zweryfikowaniu wyświetli identyfikator e-mail w następujący sposób -

Utwórz rolę, aby korzystać z AWS SES, Cloudwatch i AWS Lambda

Możesz także utworzyć rolę, która daje uprawnienia do korzystania z usług. W tym celu przejdź do IAM i wybierz Rola. Dodaj wymagane zasady i utwórz rolę. Zwróć uwagę, że utworzona tutaj rola toevents with lambda.

Utwórz funkcję Lambda, aby wysłać e-mail

Będziesz musiał postępować zgodnie z instrukcjami, aby utworzyć funkcję Lambda przy użyciu środowiska uruchomieniowego jako nodejs.

Teraz dodaj wyzwalacz do Lambda, jak pokazano -

Dodaj szczegóły do CloudWatch Events Trigger jak pokazano poniżej -

Pamiętaj, że zdarzenie będzie uruchamiane co 5 minut, zgodnie z utworzoną regułą.

Kod Lambda do wysłania wiadomości e-mail jest podany poniżej -

var aws = require('aws-sdk');
var ses = new aws.SES({
   region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
   var eParams = {
      Destination: {
         ToAddresses: ["[email protected]"]
      },
      Message: {
         Body: {
            Text: {
               Data: "this mail comes from aws lambda event scheduling"
            }
         },
         Subject: {
            Data: "Event scheduling from aws lambda"
         }
      },
      Source: "[email protected]"
   };
   console.log('===SENDING EMAIL===');
   var email = ses.sendEmail(eParams, function(err, data) {
      if (err) console.log(err);
      else {
         console.log("===EMAIL SENT===");
         console.log("EMAIL CODE END");
         console.log('EMAIL: ', email);
         context.succeed(event);
         callback(null, "email is send");
      }
   });
};

Teraz potrzebujemy usługi AWS SES. Możesz to dodać za pomocą kodu pokazanego w następujący sposób -

var aws = require('aws-sdk');
var ses = new aws.SES({
   region: 'us-east-1'
});

Aby wysłać pocztę z nodejs, stworzyliśmy eParams obiekt, który ma szczegóły, takie jak example mail, to mail id i the body with message w następujący sposób -

var eParams = {
   Destination: {
      ToAddresses: ["[email protected]"]
   },
   Message: {
      Body: {
         Text: {
            Data: "this mail comes from aws lambda event scheduling"
         }
      },
      Subject: {
         Data: "Event scheduling from aws lambda"
      }
   },
   Source: "[email protected]"
};

Kod Lambda do wysłania wiadomości e-mail jest następujący -

var email = ses.sendEmail(eParams, function(err, data) {
   if (err) console.log(err);
   else {
      console.log("===EMAIL SENT===");
      console.log("EMAIL CODE END");
      console.log('EMAIL: ', email);
      context.succeed(event);
      callback(null, "email is send");
   }
});

Teraz zapiszmy tę funkcję Lambda i sprawdźmy identyfikator e-mail dla wiadomości. Zrzut ekranu pokazany poniżej pokazuje, że poczta jest wysyłana z AWS Lambda co 5 minut.

Używanie funkcji Lambda z Amazon SNS

Amazon SNS to usługa służąca do powiadamiania push. W tym rozdziale wyjaśnimy działanie AWS Lambda i Amazon SNS na przykładzie, w którym wykonamy następujące czynności -

  • Utwórz temat w usłudze SNS i użyj AWS Lambda Dodaj tematy do CloudWatch

  • Wyślij wiadomość tekstową SNS na podany numer telefonu.

Przybory

Aby utworzyć temat w usłudze SNS i użyć AWS Lambda Dodaj tematy do CloudWatch, nie musimy wykonywać poniższych kroków -

  • Utwórz temat w SNS
  • Utwórz rolę w celu uzyskania uprawnień w IAM
  • Utwórz funkcję AWS Lambda
  • Opublikuj w temacie, aby aktywować wyzwalacz
  • Sprawdź szczegóły wiadomości w usłudze CloudWatch.

Aby wysłać SMS-a SNS na podany numer telefonu, musimy wykonać następujące czynności -

  • Dodaj kod w AWS Lambda, aby wysłać wiadomość na swój telefon.

Przykład

W tym przykładzie utworzymy temat w SNS. Po wprowadzeniu szczegółów w temacie do opublikowania uruchamiana jest AWS Lambda. Szczegóły tematu są rejestrowane w CloudWatch, a na telefon wysyłana jest wiadomość przez AWS Lambda.

Oto podstawowy schemat blokowy, który wyjaśnia to samo -

Utwórz temat w SNS

Będziesz musiał wykonać poniższe kroki, aby utworzyć temat w SNS -

Krok 1

Zaloguj się do konsoli AWS i przejdź do usługi SNS w Amazon, jak pokazano poniżej -

Krok 2

Kliknij Simple Notification Serwis i Create topic w tym.

Krok 3

Następnie musisz kliknąć Create new topic przycisk jak pokazano -

Krok 4

Wejdz do Topic name i Display name i kliknij Create topic. Na wyświetlaczu powinna pojawić się nazwa tematu w następujący sposób -

Utwórz rolę dla uprawnień w IAM

Aby stworzyć rolę do pracy z usługą AWS Lambda i SNS, musimy zalogować się do konsoli AWS. Następnie wybierz IAM z usług Amazon i kliknij rolę z lewej strony, jak pokazano poniżej.

Zwróć uwagę, że dodaliśmy zasady dotyczące SNS, Lambda i CloudWatch. Dodaj nazwę roli i kliknij przycisk Utwórz rolę, aby zakończyć proces tworzenia roli.

Utwórz funkcję AWS Lambda

W tej sekcji wyjaśnijmy, jak utworzyć funkcję AWS Lambda przy użyciu nodejs jako środowiska wykonawczego.

W tym celu zaloguj się do konsoli AWS i wybierz AWS Lambda z usług AWS. Dodaj nazwę funkcji, szczegóły roli itp. I utwórz funkcję AWS Lambda, jak pokazano.

Dodaj wyzwalacz SNS

Aby dodać wyzwalacz SNS, wprowadź szczegóły konfiguracji SNS, jak pokazano -

Następnie wybierz SNS topic i Add wyzwalacz funkcji AWS Lambda, jak pokazano -

Następnie dodaj kod lambda AWS podany poniżej -

exports.handler = function(event, context, callback) {
   console.log("AWS lambda and SNS trigger ");
   console.log(event);
   const sns = event.Records[0].Sns.Message;
   console.log(sns)
   callback(null, sns);
};

W powyższym kodzie event.Records[0].Sns.Messagepodaje dodane szczegóły wiadomości. Dodaliśmy dzienniki konsoli, aby zobaczyć je w CloudWatch. Teraz zapisz funkcję Lambda z wymaganą pamięcią i alokacją czasu.

Opublikuj w temacie, aby aktywować regułę

Przypomnij sobie, że utworzyliśmy już temat w SNS w kroku 1. Opublikujemy teraz w temacie i zobaczymy szczegóły w CloudWatch, które zostaną uruchomione przez AWS Lambda -

Opublikuj w temacie

Najpierw wybierz nazwę tematu, który chcesz opublikować. KliknijPublish to topic przycisk -

Wejdz do Subject i Message szczegóły, jak pokazano poniżej -

Możesz także wybrać JSON format wiadomości do wysłania JSONstyl. KliknijPublish the message na końcu ekranu.

Sprawdź szczegóły wiadomości w usłudze CloudWatch

Zaloguj się do konsoli AWS i otwórz usługę CloudWatch. Kliknij logi po lewej stronie i wybierz logi dla utworzonej funkcji AWS Lambda. Możesz znaleźć następujący ekran dla dzienników z komunikatami utworzonymi, jak pokazano powyżej -

Dodaj kod w AWS Lambda, aby wysłać wiadomość na swój telefon

Tutaj użyje wiadomości tekstowych SNS do wysłania wiadomości na telefon za pomocą AWS Lambda. Możesz użyć następującego kodu, aby zaktualizować kod AWS Lambda w następujący sposób -

const aws =  require("aws-sdk");
const sns = new aws.SNS({
   region:'us-east-1'
});
exports.handler = function(event, context, callback) {
   console.log("AWS lambda and SNS trigger ");
   console.log(event);
   const snsmessage = event.Records[0].Sns.Message;
   console.log(snsmessage);
   sns.publish({
      Message: snsmessage,
      PhoneNumber: '+911212121212'
   }, function (err, data) {
      if (err) {
         console.log(err);
         callback(err, null);
      } else {
         console.log(data);
         callback(null, data);
      }	
   });
};

Dodaliśmy AWS SDK i usługę SNS do wysyłania wiadomości. Wiadomość z wydarzenia pochodząca z SNS wysyłana jest jako SMS na podany numer telefonu.

Obserwuj następujący kod, na przykład -

sns.publish({
   Message: snsmessage,
   PhoneNumber: '+911212121212'
}, function (err, data) {
   if (err) {
      console.log(err);
      callback(err, null);
   } else {
      console.log(data);
      callback(null, data);
   }	
});

Wprowadź temat teraz, aby zobaczyć wiadomość w chmurze i numer telefonu podany powyżej.

Kliknij Publish messageopublikować wiadomość. Zobaczysz wiadomość pod numerem podanym w następujący sposób -

Używanie funkcji Lambda z CloudTrail

AWS CloudTrailto usługa dostępna w Amazon, która pomaga rejestrować wszystkie czynności wykonywane w konsoli AWS. Rejestruje wszystkie wywołania API i przechowuje historię, która może być później wykorzystana do debugowania. Zauważ, że nie możemy wyzwolić Lambda z CloudTrail. Zamiast tego CloudTrail przechowuje całą historię w postaci logów w wiadrze S3 i możemy wyzwalać AWS Lambda z S3. Gdy jakiekolwiek logi mają zostać przetworzone, AWS Lambda zostanie wyzwolony za każdym razem, gdy jakiekolwiek logi zostaną dodane do zasobnika S3.

Przybory

Zanim zaczniesz pracować z AWS CloudTrail, S3 i AWS Lambda, musisz wykonać następujące czynności -

  • Utwórz zasobnik S3 do przechowywania dzienników CloudTrail
  • Utwórz usługę SNS
  • Utwórz ślad w CloudTrail i przypisz zasobnik S3 i usługę SNS
  • Utwórz rolę IAM z uprawnieniami.
  • Utwórz funkcję lambda aws
  • Konfiguracja AWS Lambda

Przykład

Rozważmy przykład, który pokazuje działanie AWS CloudTrail, S3 i AWS Lambda. Tutaj utworzymy zasobnik w S3, który będzie przechowywać wszystkie dzienniki dla każdej interakcji wykonanej w konsoli AWS. Stwórzmy temat SNS i opublikujmy go. W przypadku tej akcji dzienniki zostaną wprowadzone jako plik w S3. Uruchomiona zostanie lambda AWS, która będzie wysyłać pocztę za pomocą usługi Amazon SES.

Schemat blokowy wyjaśniający ten proces jest przedstawiony poniżej -

Utwórz zasobnik S3 do przechowywania dzienników CloudTrail

Przejdź do konsoli AWS i kliknij usługę S3. KliknijCreate bucket i wprowadź nazwę zasobnika, w którym chcesz przechowywać dzienniki Cloudtrail, jak pokazano -

Zwróć uwagę, że tutaj stworzyliśmy wiadro S3 cloudtraillogsaws do przechowywania kłód.

Utwórz usługę SNS

Przejdź do konsoli AWS i kliknij Simple notification Service. Wybierz tematy z lewej strony i kliknij przycisk Utwórz nowy temat.

Stworzyliśmy temat o nazwie displaytrailopublikować temat. Jego szczegóły zostaną zapisane w utworzonym powyżej S3bucket.

Utwórz ślad w Cloudtrail i przypisz zasobnik S3 i usługę SNS

Przejdź do konsoli AWS i kliknij CloudTrail usługa z narzędzi zarządzania, jak pokazano -

Kliknij Trails od lewej strony, jak pokazano poniżej -

Kliknij Create Trailprzycisk. Wejdz doTrail name, Apply trail to all regions i wybierz Yes. Następnie dzienniki zostaną zastosowane dla całego regionu.

Dla Read/Write eventswybierz All. DodajS3 bucket i SNS topicszczegóły, jak pokazano poniżej. Możesz tutaj utworzyć nowy lub dodać istniejący.

Zwróć uwagę, że są dostępne opcje encrypt log files, enable log file validation, send sns notification for every log file deliveryitd. Użyłem tutaj wartości domyślnych. Możesz zezwolić na szyfrowanie plików i poprosi o klucz szyfrowania. Kliknij przycisk Utwórz szlak po dodaniu szczegółów.

Utwórz rolę IAM z uprawnieniami

Przejdź do konsoli AWS i wybierz IAM. Utwórz rolę z uprawnieniami dla S3, Lambda, CloudTrail i SES do wysyłania wiadomości e-mail. Utworzona rola jest taka, jak pokazano poniżej -

Utwórz funkcję AWS Lambda

Przejdź do usługi AWS i kliknij Lambdausługa. Dodaj nazwę funkcji, wybierz środowisko wykonawcze jakonodejsi wybierz rolę utworzoną dla funkcji lambda. Poniżej znajduje się utworzona funkcja lambda.

Konfiguracja AWS Lambda

Następnie musimy dodać S3 jako wyzwalacz dla utworzonej lambdy AWS.

Dodaj szczegóły zasobnika S3, aby dodać wyzwalacz, i dodaj następujący kod AWS Lambda -

const aws =  require("aws-sdk");
const sns = new aws.SNS({
region:'us-east-1'
});
var ses = new aws.SES({
   region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
   console.log("AWS lambda and SNS trigger ");
   console.log(event);
   const s3message = "Bucket Name:"+event.Records[0].s3.bucket.name+"\nLog details:"+event.Records[0].s3.object.key;
   console.log(s3message);
   var eParams = {
      Destination: {
         ToAddresses: ["[email protected]"]
      },
      Message: {
         Body: {
            Text: {
               Data:s3message
            }
         },
         Subject: {
            Data: "cloudtrail logs"
         }
      },
      Source: "[email protected]"
   };
   var email = ses.sendEmail(eParams, function(err, data) {
      if (err) console.log(err);
      else {
         console.log("===EMAIL SENT===");
         console.log("EMAIL CODE END");
         console.log('EMAIL: ', email);
         context.succeed(event);
         callback(null, "email is send");
      }
   });
};

Zauważ, że pobieramy wiadro S3 i rejestrujemy szczegóły zdarzenia i wysyłamy pocztę za pomocą usługi SES, jak pokazano powyżej.

Za każdym razem, gdy w konsoli AWS ma miejsce jakakolwiek czynność, logi zostaną przesłane do wiadra S3, a jednocześnie wyzwolona zostanie lambda AWS, a poczta zostanie wysłana na adres e-mail podany w kodzie.

Pamiętaj, że możesz przetwarzać dzienniki zgodnie ze swoimi potrzebami w AWS Lambda.

Używanie funkcji Lambda z Amazon Kinesis

AWS KinesisUsługa służy do przechwytywania / przechowywania danych śledzenia w czasie rzeczywistym pochodzących z kliknięć w witrynie, dzienników, kanałów mediów społecznościowych. Możemy spowodować, że AWS Lambda wykona dodatkowe przetwarzanie tych logów.

Przybory

Podstawowe wymagania, aby rozpocząć pracę z Kinesis i AWS Lambda, są następujące:

  • Utwórz rolę z wymaganymi uprawnieniami
  • Utwórz strumień danych w Kinesis
  • Utwórz funkcję AWS Lambda.
  • Dodaj kod do AWS Lambda
  • Dodaj dane do strumienia danych Kinesis

Przykład

Popracujmy na przykładzie, w którym uruchomimy AWS Lambda do przetwarzania strumienia danych z Kinesis i wyślemy pocztę z otrzymanymi danymi.

Poniżej przedstawiono prosty schemat blokowy wyjaśniający proces -

Utwórz rolę z wymaganymi uprawnieniami

Przejdź do konsoli AWS i utwórz rolę.

Utwórz strumień danych w kinezie

Przejdź do konsoli AWS i utwórz strumień danych w kinezie.

Jak pokazano, są 4 opcje. W tym przykładzie będziemy pracować nad Utwórz strumień danych.

Kliknij Create data stream. Wpisz nazwę w nazwie strumienia Kinesis podaną poniżej.

Wprowadź liczbę fragmentów dla strumienia danych.

Szczegóły odłamków są pokazane poniżej -

Wprowadź nazwę i kliknij Create Kinesis stream przycisk na dole.

Pamiętaj, że aktywacja strumienia może zająć trochę czasu.

Utwórz funkcję AWS Lambda

Przejdź do konsoli AWS i kliknij Lambda. Utwórz funkcję AWS Lambda, jak pokazano -

Kliknij Create functionna końcu ekranu. Dodaj Kinesis jako wyzwalacz do AWS Lambda.

Dodaj szczegóły konfiguracji do wyzwalacza Kinesis -

Dodaj wyzwalacz, a teraz dodaj kod do AWS Lambda.

Dodawanie kodu do AWS Lambda

W tym celu użyjemy nodejs jako czasu wykonywania. Wyślemy pocztę, gdy AWS Lambda zostanie wyzwolony przez strumień danych z kinezą.

const aws =  require("aws-sdk");
var ses = new aws.SES({
   region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
   let payload = "";
   event.Records.forEach(function(record) {
      // Kinesis data is base64 encoded so decode here
      payload = new Buffer(record.kinesis.data, 'base64').toString('ascii');
      console.log('Decoded payload:', payload);
   });
   var eParams = {
      Destination: {
         ToAddresses: ["[email protected]"]
      },
      Message: {
         Body: {
            Text: {
               Data:payload
            }
         },
         Subject: {
            Data: "Kinesis data stream"
         }
      },
      Source: "[email protected]"
   };    
   var email = ses.sendEmail(eParams, function(err, data) {
      if (err) console.log(err);
      else {
         console.log("===EMAIL SENT===");
         console.log("EMAIL CODE END");
         console.log('EMAIL: ', email);
         context.succeed(event);
         callback(null, "email is send");
      }
   });
};

Parametr zdarzenia zawiera dane wprowadzone w strumieniu danych kinesis. Powyższy kod lambda aws zostanie aktywowany po wprowadzeniu danych w strumieniu danych kineza.

Dodaj dane do strumienia danych Kinesis

Tutaj użyjemy interfejsu wiersza polecenia AWS, aby dodać strumień danych kinezy danych, jak pokazano poniżej. W tym celu możemy użyć następującego polecenia -

aws kinesis put-record --stream-name kinesisdemo  --data "hello world" --
partition-key "789675"

Następnie aktywowana jest AWS Lambda i wysyłana jest poczta.

Używanie funkcji Lambda z niestandardowymi aplikacjami użytkownika

Możemy użyć funkcji lambda AWS do przetwarzania wygenerowanych zdarzeń przez aplikację użytkownika na dwa sposoby -

  • Korzystanie z konsoli AWS
  • Korzystanie z AWS CLI

Korzystanie z konsoli AWS

Z konsoli AWS będziemy pracować ze zdarzeniami i AWS Lambda. W tym celu przejdź do konsoli AWS i utwórz funkcję lambda.

Następnie dodajmy kod dla AWS Lambda -

exports.handler = (event, context, callback) => {
   // TODO implement
   console.log("Hello => "+ event.name);
   console.log("Address =>"+ event.addr);
   callback(null, 'Hello '+event.name +" and address is "+ event.addr);
};

Zwróć uwagę, że w powyższym kodzie drukujemy nazwę i adres za pomocą zdarzenia.

Szczegóły wydarzenia zostaną podane za pomocą zdarzenia testowego utworzonego w następujący sposób -

Teraz zapisz wydarzenie i przetestuj je.

Odpowiednie dane wyjściowe dziennika są pokazane tutaj -

Korzystanie z AWS CLI

Możemy wywołać powyższą funkcję za pomocą interfejsu wiersza polecenia AWS w następujący sposób -

aws lambda invoke --function-name "lambdauserevent" --log-type Tail --
payload file://C:\clioutput\input.txt C:\clioutput\outputfile.txt

Szczegóły zdarzenia są przekazywane do ładunku, a dane wyjściowe są przechowywane w C:\clioutput\outputfile.txt. w następujący sposób -

input.txt

{"name":"Roy Singh", "addr":"Mumbai"}

Po wywołaniu Lambda za pomocą interfejsu wiersza polecenia AWS można zobaczyć następujące dane wyjściowe -

Podobnie, jeśli chcesz przetestować AWS Lambda dla dowolnej innej usługi AWS, możesz to zrobić za pomocą zdarzenia testowego w konsoli AWS i AWS CLI. Przykładowe wydarzenie dla usługi SNS pokazano poniżej -

{
   "Records": [{
      "EventVersion": "1.0",
      "EventSubscriptionArn": "arnid",
      "EventSource": "aws:sns",
      "Sns": {
         "SignatureVersion": "1",
         "Timestamp": "1970-01-01T00:00:00.000Z",
         "Signature": "EXAMPLE",
         "SigningCertUrl": "EXAMPLE",
         "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
         "Message": "Hello from SNS!",
         "MessageAttributes": {
            "Test": {
               "Type": "String",
               "Value": "TestString"
            },
            "TestBinary": {
               "Type": "Binary",
               "Value": "TestBinary"
            }
         },
         "Type": "Notification",
         "UnsubscribeUrl": "EXAMPLE",
         "TopicArn": "topicarn",
         "Subject": "TestInvoke"
      }
   }]
}

Dodajmy przykładowe zdarzenie pokazane powyżej i przetestujmy je, jak pokazano -

W AWS Lambda kod wypisze komunikat SNS, jak pokazano w przykładzie podanym poniżej -

exports.handler = (event, context, callback) => {
   // TODO implement
   console.log(event.Records[0].Sns.Message);
   callback(null, event.Records[0].Sns.Message);};

Wywołajmy to samo za pomocą interfejsu wiersza polecenia AWS. Zapiszmy zdarzenie w pliku i użyjmy go jako ładunku za pomocą pokazanego polecenia -

aws lambda invoke --function-name "lambdauserevent" --log-type Tail --
payload file://C:\clioutput\sns.txt C:\clioutput\snsoutput.txt

Korzystanie z AWS Lambda @ Edge z CloudFront

Lambda @ Edge to dodatek do usługi obliczeniowej AWS Lambda, która służy do dostosowywania treści dostarczanych przez Cloudfront.

Schemat blokowy pokazujący działanie AWS Lambda z Cloudfront z AWS jest pokazany poniżej -

Istnieją cztery sposoby wykorzystania AWS Lambda -

  • Viewer Request − Użytkownik końcowy wysyła żądanie o nazwie Viewer Request do CloudFront

  • Origin Request − CloudFront przekazuje żądanie do źródła

  • Origin Response − CloudFront otrzymuje odpowiedź od źródła

  • Viewer Response − CloudFront wysyła odpowiedź do widza

Możemy używać Lambda @ Edge do następujących celów -

  • Aby zmienić nagłówki na żądanie i czas odpowiedzi.

  • Dodaj szczegóły plików cookie do nagłówków. Przeprowadź testy AB w oparciu o żądanie i odpowiedź.

  • Przekieruj adres URL do innej witryny na podstawie szczegółów nagłówka.

  • Możemy pobrać agenta użytkownika z nagłówków i poznać szczegóły przeglądarki, systemu operacyjnego itp.

Przybory

Aby rozpocząć pracę z CloudFront i Lambda @ Edge, potrzebujemy:

  • Utwórz zasobnik pamięci S3 ze szczegółami pliku

  • Utwórz rolę, która pozwoli na pracę z CloudFront i Lambda @ Edge

  • Utwórz dystrybucję CloudFront

  • Utwórz funkcję lambda

  • Dodaj szczegóły funkcji lambda do Cloudfront

  • Sprawdź adres URL w przeglądarce

Będziemy pracować na przykładzie z CloudFront i Lambda @ Egde, w którym będziemy hostować stronę i zmieniać odpowiedź, gdy zostanie wykryta jako komputer i urządzenia.

Utwórz wiadro pamięci masowej S3 ze szczegółami pliku

Zaloguj się do konsoli AWS i utwórz zasobnik w S3 i dodaj . html plik, który chcesz wyświetlić.

Kliknij S3 i Create bucket jak pokazano poniżej -

Teraz kliknij Create bucket i dodaj szczegóły wiadra, jak pokazano poniżej -

Kliknij Create i prześlij do niego plik .html.

Utwórz rolę

Przejdź do konsoli AWS i kliknij IAM.

Teraz kliknij Roles -> Create role przycisk jak pokazano -

Wybierz uprawnienia dla S3, Lambda i Cloudfront. Dobrą praktyką jest tworzenie polityki zezwalającej tylko na wymaganą funkcję, przechowywanie z wykorzystaniem danych ARN.

W omówionym poniżej przykładzie pokazujemy plik Full Accesspozwolenie. Zasady dotyczące nazwy rolirole for cloudfrontjest dodawany, jak pokazano powyżej. Kliknij Utwórz rolę.

Wszystkie zasady wymagane dla lambda @ edge i cloudfront są pokazane powyżej. W tym miejscu należy wykonać dodatkowy krok, ponieważ w przypadku cloudfront adres URL będzie dostępny w całym regionie i wymaga relacji zaufania między usługami, z których korzystamy.

Teraz dla utworzonej roli kliknij Trust relationships karta, jak pokazano -

Kliknij Edit Trust Relationship jak pokazano poniżej -

Wyświetla dokument dotyczący zasad. Musimy dodać inne usługi wPrincipal -> Servicektórego planujemy użyć. Ostateczny dokument dotyczący zasad dotyczących relacji zaufania przedstawiono poniżej -

Kliknij Update Trust Policy aby zapisać zmiany.

Utwórz dystrybucję CloudFront

Przejdź do usługi CloudFront, jak pokazano poniżej -

Kliknij usługę CloudFront i kliknij Create Distribution -

Ustawienia pochodzenia, ustawienia zachowania i ustawienia dystrybucji

Przyjrzyjmy się kolejno tym ustawieniom -

Origin Settings

Różne parametry ustawień pochodzenia są wyjaśnione poniżej -

Origin Domain Name −To jest nazwa zasobnika S3, w którym zapisaliśmy pliki html. Możemy również przechowywać obrazy, jeśli takie istnieją, w wiadrze S3, tworząc wybrane przez nas foldery.

Origin Path −Tutaj musisz wprowadzić nazwę folderu, w którym przechowywane są pliki. Obecnie nie mamy tego folderu, więc na razie pozostawiamy go pustym.

Origin ID −Zostaje zapełniony po wybraniu nazwy domeny pochodzenia. Możesz zmienić identyfikator zgodnie z własnym wyborem.

Restrict Bucket Access − W tym wybierzemy opcję yes. Tutaj potrzebujemy zabezpieczenia dla wiadra S3, aby nikt nie miał dostępu do wiadra S3. W przypadku tej opcji dostępnych jest więcej opcji, takich jakOrigin Access Identity, Comment and Grant Read Permission on Bucket.

Origin Access Identity −Służyliśmy do tworzenia nowej opcji tożsamości. Możesz także wybrać istniejącą tożsamość. Tworzy to nową tożsamość, która jest używana przez CloudFront do odczytywania szczegółów z zasobnika S3.

Grand Read Permission on Bucket − W tym celu wybierz opcję Yes.

Origin Custom Headers − W tym miejscu nagłówki pozostaną puste, ponieważ nie potrzebujemy teraz szczegółów.

Następnie omówmy i wypełnijmy Behaviour Settings do dystrybucji Cloudront -

Teraz wybierz protokół - https lub http i opcję buforowania. Należy pamiętać, że domyślne buforowanie to 86400 lub 24 godziny. Możesz zmienić tę wartość zgodnie z wymaganiami.

Kliknij Object Caching(opcja dostosowywania), aby zmienić buforowanie. Możesz użyćsmooth streamingw przypadku, gdy na Twojej stronie są jakieś filmy. Tutaj pozostawiamy dostępną opcję domyślną. Po utworzeniu funkcji lambda zostaną dodane jej szczegóły.

Szczegóły dotyczące ustawień dystrybucji przedstawiono poniżej -

Różne parametry ustawień dystrybucji są wyjaśnione poniżej -

Price class −Zawiera szczegóły, takie jak pochodzenie ruchu użytkowników. Zauważ, że tutaj wybraliśmy domyślny -Use All Edge Locations.

AWS WAF Web ACL −Służy do wyboru zapory aplikacji internetowej. Tutaj ma opcję jakoNone. Najpierw musimy stworzyć firewall w AWS. Zapewnia bezpieczeństwo witryny.

Alternate Domain Names − Tutaj możesz określić nazwę domeny, jeśli masz.

SSL Certificate −Zawiera wszystkie szczegóły, które należy wybrać dla certyfikatu SSL. Zachowamy domyślne.

Default Root Object −Tutaj określimy nazwę pliku, który przesłaliśmy w S3. W tym celu potrzebujemy, aby zawartość z .html była wyświetlana domyślnie.

W pozostałej części zachowamy ustawienie domyślne.

Kliknij Create Distribution przycisk, aby dodać dystrybucję.

Zauważ, że dystrybucja zajmie trochę czasu, zanim stan zostanie pokazany jako wdrożona.

Utwórz funkcję AWS Lambda

Przejdź do konsoli AWS i utwórz funkcję Lambda.

W kodzie AWS Lambda weźmiemy nagłówki żądań i sprawdzimy agenta użytkownika. Jeśli klient użytkownika pochodzi z komputera stacjonarnego, zmienimy odpowiedź, aby wyświetlić komunikat jako“DESKTOP : Welcome to AWS Lambda with Cloudfront!” a jeśli urządzenie, wiadomość będzie“MOBILE DEVICES : Hello from Lambda@Edge!”

Odpowiedni kod AWS Lambda jest pokazany poniżej -

let content = `
<\!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="utf-8">
      <title>Simple Lambda@Edge Static Content Response</title>
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
   </head>
   
   <body>
      <h1>MOBILE DEVICES : Hello from Lambda@Edge!</h1>
   </body>
</html>
`;
let content1 = `
<\!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="utf-8">
      <title>Simple Lambda@Edge Static Content Response</title>
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
   </head>
   
   <body>
      <h1>DESKTOP : Welcome to AWS Lambda with Cloudfront!</h1>
   </body>
</html>
`;
exports.handler = (event, context, callback) => {
   let request = event.Records[0].cf.request;
   let finalrequest = JSON.stringify(request);
   let headers = request.headers;
   let useragent = JSON.stringify(headers["user-agent"][0].value);
   let str = "";
   if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i.test(useragent)) {
      str = content;
   } else {
      str = content1;
   }
   const response = {
      status: '200',
      statusDescription: 'OK',        
      body: str+useragent,
   };
   callback(null, response);
};

Teraz zapisz funkcję Lambda. Zwróć uwagę, że musimy opublikować funkcję Lambda, aby mogła być używana we wszystkich regionach. Aby opublikować, musimy wykonać następujące czynności -

Z listy rozwijanej Działania wybierz Publish new version jak pokazano poniżej -

Jeśli tak, kliknij Publish new version, wyświetla następujący ekran -

Teraz wprowadź opis wersji i kliknij Publish. ARN wyświetli wersję funkcji AWS Lambda utworzoną, jak pokazano poniżej -

Dodaj wyzwalacz CloudFront do nowej utworzonej wersji, jak pokazano poniżej -

Teraz dodaj szczegóły konfiguracji dla CloudFront. Zdarzenie CloudFront ma opcję dlaViewer request, Origin request, Origin response, i Viewer response.

Następnie wybierz utworzoną wcześniej dystrybucję CloudFront. Odevents, wybierzemy Viewer request. Na podstawie żądania przeglądarki zdecydowany zostanie komputer / urządzenie z klienta użytkownika, a odpowiedź zostanie zmieniona. Następnie dodaj szczegóły wyzwalacza.

Po dodaniu wyzwalacza musimy poczekać na wdrożenie dystrybucji z CloudFront.

Po zmianie statusu na Deployed, możemy przetestować adres URL CloudFront i sprawdzić nazwę domeny w przeglądarce.

Widok w przeglądarce na komputerze jest taki, jak pokazano poniżej. Tutaj wydrukowaliśmy klienta użytkownika ze zdarzenia viewer-request.

To jest wyświetlacz w urządzeniu mobilnym.

Dlatego w powyższym przykładzie użyliśmy Lambda @ Edge do zmiany odpowiedzi na komputerze stacjonarnym i urządzeniu mobilnym.

Monitorowanie i rozwiązywanie problemów za pomocą Cloudwatch

Funkcje stworzone w AWS Lambda są monitorowane przez Amazon CloudWatch. Pomaga w rejestrowaniu wszystkich żądań kierowanych do funkcji Lambda, gdy jest ona wyzwalana.

Weź pod uwagę, że następujący kod został przesłany do AWS Lambda z nazwą funkcji jako lambda and cloudwatch.

exports.handler = (event, context, callback) => {
   // TODO implement
   console.log("Lambda monitoring using amazon cloudwatch");    
   callback(null, 'Hello from Lambda');
};

Kiedy funkcja jest testowana lub uruchamiana, powinieneś zobaczyć wpis w Cloudwatch. W tym celu przejdź do usług AWS i kliknij CloudWatch.

Wybierz dzienniki z lewej strony.

Po kliknięciu Logs, ma Log Groupsfunkcji AWS Lambda utworzonej na Twoim koncie. Wybierz dowolną funkcję AWS Lambda i sprawdź szczegóły. Tutaj odnosimy się do funkcji Lambda o nazwie:lambdaandcloudwatch. Dzienniki dodane do funkcji Lambda są wyświetlane tutaj, jak pokazano poniżej -

Teraz dodajmy wyzwalacz S3 do funkcji Lambda i zobaczmy szczegóły dzienników w CloudWatch, jak pokazano poniżej -

Zaktualizujmy kod AWS Lambda, aby wyświetlić przesłany plik i nazwę zasobnika, jak pokazano w kodzie podanym poniżej -

exports.handler = (event, context, callback) => {
   // TODO implement
   console.log("Lambda monitoring using amazon cloudwatch");
   const bucket = event.Records[0].s3.bucket.name;
   const filename = event.Records[0].s3.object.key;
   const message = `File is uploaded in - ${bucket} -> ${filename}`;
   console.log(message);
   callback(null, 'Hello from Lambda');
};

Teraz dodaj plik s3storetestlambdaEventbucket jak pokazano -

Po załadowaniu pliku zostaną uruchomione funkcje AWS Lambda, a komunikaty dziennika konsoli z kodu Lambda zostaną wyświetlone w CloudWatch, jak pokazano poniżej -

Jeśli wystąpi jakikolwiek błąd, CloudWatch podaje szczegóły błędu, jak pokazano poniżej -

Zauważ, że błędnie odnieśliśmy się do nazwy zasobnika w kodzie AWS Lambda, jak pokazano -

exports.handler = (event, context, callback) => {
   // TODO implement
   console.log("Lambda monitoring using amazon cloudwatch");
   const bucket = event.Records[0].bucket.name;
   const filename = event.Records[0].s3.object.key;
   const message = `File is uploaded in - ${bucket} -> ${filename}`;
   console.log(message);
   callback(null, 'Hello from Lambda');
};

Odwołanie do nazwy zasobnika ze zdarzenia jest nieprawidłowe. Dlatego powinniśmy zobaczyć błąd wyświetlany w CloudWatch, jak pokazano poniżej -

CloudWatch Metrics

Szczegóły wykonania funkcji Lambda można zobaczyć w metrykach. KliknijMetrics wyświetlane po lewej stronie.

Szczegóły wykresu funkcji lambda lambdaandcloudwatch są jak pokazano poniżej -

Zawiera szczegółowe informacje, takie jak czas trwania, przez który funkcja Lambda jest wykonywana, ile razy jest wywoływana oraz błędy funkcji Lambda.

AWS Lambda - dodatkowy przykład

Do tej pory widzieliśmy działanie AWS Lambda z usługami AWS. Bazując na tej wiedzy stwórzmy prosty formularz rejestracyjny użytkownika i prześlijmy dane za pomocą bramki API do AWS Lambda. AWS Lambda pobierze dane ze zdarzenia lub wyzwalacza bramy API i doda te szczegóły do ​​tabeli DynamoDB.

Przykład

Rozważmy przykład i wykonaj na nim następujące funkcje -

  • Utwórz tabelę DynamoDB

  • Utwórz formularz rejestracji użytkownika

  • Utwórz AWS Lambda i bramkę API, aby wysłać wiadomość na telefon za pomocą usługi AWS SNS

  • Utwórz AWS Lambda i bramę API do danych formularza POST i wstaw do tabeli DynamoDb

  • Utwórz AWS Lambda i bramkę API do odczytu danych z tabeli Dynamodb

  • Końcowa praca z formularzem rejestracji użytkownika

Utwórz tabelę DynamoDB

Wprowadzone dane zostaną zapisane w tabeli DynamodDB. Będziemy używać bramy API do udostępniania danych wprowadzonych do AWS Lambda, a później AWS Lambda doda szczegóły w DynamoDB.

Możesz użyć poniższych szczegółów, aby utworzyć tabelę DynamodDB w konsoli AWS. Najpierw przejdź do usługi AWS i kliknijDynamoDB. KliknijTable aby utworzyć tabelę, jak pokazano poniżej -

Możesz użyć ARN do stworzenia zasad dla DynamoDB, które będą używane z AWS Lambda.

Przejdź do IAM i wybierz Policies. KliknijCreate policy, wybierz usługę jako DynamodDB, jak pokazano poniżej -

Kliknij All DynamoDBdziałania, jak pokazano powyżej. Wybierz zasób i wprowadź ARN dla tabeli, jak pokazano poniżej -

Teraz kliknij Add jak pokazano niżej.

Jeśli klikniesz Review policy na końcu ekranu, możesz zobaczyć następujące okno -

Wpisz nazwę polityki i kliknij Create policyna końcu strony. Teraz musimy stworzyć rolę, która będzie używana z Lambda. Potrzebujemy uprawnień do DynamoDB, APIGateway i Lambda.

Przejdź do usług AWS i wybierz IAM. Wybierz Role z lewej strony i dodaj wymagane role.

Wpisz nazwę roli i kliknij Create role. Utworzona rola toroleforlambdaexample.

Utwórz formularz rejestracji użytkownika

Oto wyświetlanie formularza rejestracji użytkownika, aby wprowadzić i odczytać dane z tabeli dynamodb.

Utwórz AWS Lambda i API Gateway, aby wysłać wiadomość OTP na telefon za pomocą usługi SNS

Jeśli widzisz formularz rejestracji użytkownika, jest tam przycisk validate phone. Użytkownik powinien wpisać numer telefonu i kliknąćvalidate phone przycisk, aby potwierdzić numer telefonu.

W tym celu -

Gdy użytkownik kliknie ten przycisk, wywoływana jest metoda wpisu bramy API, która zawiera dane telefonu, i wewnętrznie uruchamiana jest AWS Lambda.

Następnie AWS Lambda wysyłaOTP na numer telefonu podany za pomocą usługi AWS SNS.

Użytkownik otrzymuje OTP i musi wprowadzić ten numer OTP.

Pole tekstowe do wpisania hasła jednorazowego pojawi się po wprowadzeniu numeru telefonu i validate phone przycisk jest kliknięty.

OTP otrzymane od AWS Lambda i hasło jednorazowe wprowadzone przez użytkownika muszą być zgodne, aby umożliwić użytkownikowi przesłanie formularza rejestracyjnego użytkownika.

Prosty schemat blokowy, który wyjaśnia działanie weryfikacji telefonu, jest pokazany tutaj -

Utworzona funkcja AWS Lambda jest pokazana tutaj -

Odpowiedni kod AWS Lambda jest podany poniżej -

const aws =  require("aws-sdk");
const sns = new aws.SNS({
   region:'us-east-1'
});
exports.handler = function(event, context, callback) {
   let phoneno = event.mphone;
   let otp = Math.floor(100000 + Math.random() * 900000);
   let snsmessage = "Your otp is : "+otp;
   sns.publish({
      Message: snsmessage,
      PhoneNumber: "+91"+phoneno
   }, function (err, data) {
      if (err) {
         console.log(err);
         callback(err, null);
      } else {
         console.log(data);
         callback(null, otp);
      }	
   });
};

Zauważ, że używamy usługi SNS do wysyłania kodu OTP. Ten kod służy do weryfikacji numeru telefonu komórkowego wprowadzonego przez użytkownika w formularzu rejestracji użytkownika. Brama API utworzona dla powyższej weryfikacji telefonicznej jest następująca -

Podana funkcja Lambda to phonevalidationexample. Bierzemy tutaj szczegóły telefonu komórkowego do wykorzystania w AWS Lambda. Następnie AWS Lambda prześle kod OTP na podany numer telefonu komórkowego.

Utwórz AWS Lambda i API Gateway do danych formularza POST i wstaw do tabeli DynamoDB

W przypadku formularza rejestracji użytkownika wszystkie pola są obowiązkowe. Wykonywane jest wywołanie AJAX, w którym dane wprowadzone w formularzu są wysyłane do adresu URL bramy API.

Prosty schemat blokowy, który wyjaśnia działanie przycisku przesyłania, jest pokazany tutaj -

Po wypełnieniu formularza przycisk wysyłania wywoła bramkę API, która uruchomi AWS Lambda. AWS Lambda pobierze szczegóły formularza ze zdarzenia lub bramy API, a dane zostaną wstawione do tabeli DynamodDB.

Pozwól nam zrozumieć tworzenie API Gateway i AWS Lambda.

Najpierw przejdź do usług AWS i kliknij Lambda. Utworzona funkcja Lambda jest pokazana tutaj -

Teraz, aby utworzyć bramę API, przejdź do usługi AWS i wybierz API Gateway. KliknijCreate API przycisk pokazany poniżej.

Wejdz do API name i kliknij Create API przycisk, aby dodać API.

Teraz tworzony jest interfejs API o nazwie as registeruser. Wybierz API i kliknijActions lista rozwijana do utworzenia Resource.

Kliknij Create Resource. Teraz dodajmyPOSTmetoda. W tym celu kliknij zasoby utworzone po lewej stronie i odActions wybierz menu rozwijane create method. Spowoduje to wyświetlenie listy rozwijanej, jak pokazano poniżej -

Wybierz metodę POST i dodaj utworzoną powyżej funkcję Lambda.

Kliknij Saveprzycisk, aby dodać metodę. Wysłanie szczegółów formularza do funkcji Lambdalambdaexample musimy dodać Integration Request jak pokazano poniżej -

Aby opublikować szczegóły formularza, będziesz musiał kliknąć Integration Request. Wyświetli się poniżej szczegóły.

Kliknij Body Mapping Templates aby dodać pola formularza do wysłania.

Następnie kliknij Add mapping templatei wprowadź typ zawartości. Tutaj dodaliśmyapplication/jsonjako typ zawartości. Kliknij go i tutaj musisz wprowadzić pole w formacie json, jak pokazano poniżej -

Teraz kliknij Save i wdrożyć interfejs API, jak pokazano poniżej -

Oto API stworzone dla POST, które będzie używane w naszym pliku .html. Należy pamiętać, że musimy włączyć CORS dla utworzonego zasobu. Użyje adresu URL bramy interfejsu API, aby wykonać wywołanie Ajax, więc CORS musi być włączony.

Wybierz metody, dla których chcesz włączyć mechanizm CORS. KliknijEnable CORS and replace existing CORS headers.

Wyświetla ekran potwierdzenia w następujący sposób -

Kliknij Yes, replace existing values aby włączyć CORS.

Kod AWS Lambda dla POST API Gateway jest pokazany tutaj -

const aws =  require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
   region:'us-east-1'
});
exports.handler = function(event, context, callback) {
   console.log(event);
   console.log("Entering Data");
   var data = {
      TableName : "registeruser",
      Item : {
         first_name:event.fname,
         last_name:event.lname,
         emailid:event.emailid,	  
         mobile_no : event.mphone,
         otp:event.otp,
         username:event.uname,
         password:event.passwd,
         confirm_password:event.cpasswd
      }
   }
   docClient.put(data, function(err, value) {
      if (err) {
         console.log("Error");
         callback(err, null);
      } else {
         console.log("data added successfully");
         callback(null, value);
      }
   });
}

Parametr zdarzenia w module obsługi AWS Lambda będzie zawierał wszystkie szczegóły, które zostały dodane wcześniej w żądaniu integracji POST. Szczegóły ze zdarzenia są dodawane do tabeli DynamodDB, jak pokazano w kodzie.

Teraz musimy uzyskać szczegóły usługi z AWS-SDK, jak pokazano poniżej -

const aws =  require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
   region:'us-east-1'
});
var data = {
   TableName : "registeruser",
   Item : {
      first_name:event.fname,
      last_name:event.lname,	
      emailid:event.emailid,
      mobile_no : event.mphone,
      otp:event.otp,
      username:event.uname,
      password:event.passwd,
      confirm_password:event.cpasswd
   }
}
docClient.put(data, function(err, value) {
   if (err) {
		console.log("Error");
      callback(err, null);
   } else {
      console.log("data added successfully");
      callback(null, value);
   }
});

Utwórz AWS Lambda i API Gateway do odczytu danych z tabeli DynamodDB

Teraz stworzymy funkcję AWS Lambda do odczytu danych z tabeli DynamoDB. Uruchomimy APIGateway do funkcji AWS Lambda, która wyśle ​​dane do formularza html.

Utworzona funkcja AWS Lambda jest pokazana poniżej -

Odpowiedni kod AWS Lambda jest następujący -

const aws =  require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
   region:'us-east-1'
});
exports.handler = function(event, context, callback) {
   var readdata = {
      TableName : "registeruser",
      Limit : 10
   }
   docClient.scan(readdata, function(err, data) {
      if (err) {
         console.log("Error");
         callback(err, null);
      } else {
         console.log("Data is " + data);
         callback(null, data);
      }
   });
}

Tutaj dane są odczytywane z tabeli DynamoDB i przekazywane do wywołania zwrotnego. Teraz utworzymy APIGateway i dodamy funkcję AWS Lambda jako wyzwalacz.

Dodamy metodę get do utworzonego wcześniej API.

Dodano funkcję lambda lambdareaddataexample. KliknijSave aby zapisać metodę i wdrożyć interfejs API.

Końcowa praca z formularzem rejestracji użytkownika

Ostateczny wygląd formularza jest pokazany poniżej -

Teraz wprowadź szczegóły, jak pokazano powyżej. Zwróć uwagę, że przycisk przesyłania jest wyłączony. Zostanie włączony tylko wtedy, gdy wszystkie szczegóły zostaną wprowadzone, jak pokazano -

Teraz wprowadź numer telefonu komórkowego i kliknij validate phoneprzycisk. Wyświetli komunikat ostrzegawczy o treści“OTP is send to the mobile, please enter the OTP to continue”. Hasło jednorazowe wysłane na numer telefonu komórkowego wygląda następująco -

Wprowadź OTP i pozostałe szczegóły i prześlij formularz.

Dane w DynamoDB registeruser tabela po przesłaniu jest taka, jak pokazano tutaj -

Szczegóły kodu podano poniżej -

Example1.html

<html>
   <head>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <script type="text/javascript" src="formdet.js"></script>
      <style>
         input[type=text], input[type=password],button {
            width: 100%;
            padding: 5px 5px;
            margin: 5px 0;
            box-sizing: border-box;
         }
         #maincontainer {
            width: 80%;
            margin: auto;
            padding: 10px;
         }
         div#userregistration {
            width: 60%;
            float: left;
         }
         div#userdisplay {
            margin-left: 60%;   
         }
      </style>
   </head>
   
   <body>
      <div id="maincontainer">
         <div id="userregistration">
            <h1>User Registration Form</h1>
            <table border="0">
               <tr>
                  <td><b>First Name<span style="color:red;">*</span> : </b></td>
                  <td><input type="text" value="" name="fname" id="fname" /></td>
                  <td id="tdfname" style="display:none;"><span style="color:red;">Enter First Name</span></td>
               </tr>
               <tr>
                  <td><b>Last Name<span style="color:red;">*</span> : </b></td>
                  <td><input type="text" value="" name="lname" id="lname" /></td>
                  <td id="tdlname" style="display:none;"><span style="color:red;">Enter Last Name</span></td>
               </tr>
               <tr>
                  <td><b>Email Id<span style="color:red;">*</span> : </b></td>
                  <td><input type="text" value="" name="emailid" id="emailid" /></td>
                  <td id="tdemailid" style="display:none;"><span style="color:red;">Enter Email</span></td>
               </tr>
               <tr>
                  <td><b>Mobile No<span style="color:red;">*</span> : </b></td>
                  <td><input type="text" name="mphone" id="mphone"/></td>
                  <td id="tdmphone" style="display:none;"><span style="color:red;">Enter Mobile Number</span></td>
               </tr>   
               <tr>
                  <td></td>
                  <td><button id="validatephone">validate phone</button></td>	 
                  <td></td>
               </tr>
               <tr id="otpdiv" style="display:none;">
                  <td><b>Enter OTP<span style="color:red;">*</span>:</b></td>
                  <td><input type="text" value="" name="otp" id="otp" /></td>
                  <td id="tdotp" style="display:none;"><span style="color:red;">Enter OTP</span></td>
               </tr>
               <tr>
                  <td><b>Username<span style="color:red;">*</span>: </b></td>
                  <td><input type="text" value="" name="uname" id="uname"/></td>
                  <td id="tduname" style="display:none;"><span style="color:red;">Enter Username</span></td>
               </tr>
                  <tr><td><b>Password<span style="color:red;">*</span> :</b></td>
                  <td><input type="password" value="" name="passwd" id="passwd"/></td>
                  <td id="tdpasswd" style="display:none;"><span style="color:red;">Enter Password</span></td>
               </tr>
                  <tr><td><b>Confirm Password<span style="color:red;">*</span> :</b></td>
                  <td><input type="password" value="" name="cpasswd" id="cpasswd"/></td>
                  <td id="tdcpasswd" style="display:none;"><span style="color:red;">Enter Confirm Password</span></td>
               </tr>
               <tr>
                  <td></td>
                  <td><button name="submit" id="submit" style="display:;" disabled="true">Submit</button></td>
                  <td></td>
               </tr>
            </table>
         </div>
         
         <div id="userdisplay">
            <h1>User Display</h1>
            <table id="displaydetails" style="display:block;width:80%;padding:5px;margin:5px; border: 1px solid black;">
               <tr>
                  <td></td>
                  <td>FirstName</td>
                  <td>LastName</td>
                  <td>Mobile No</td>
                  <td>EmailID</td>
               </tr>
            </table>
         </div>
      </div>
   </body>
</html>

formdet.js

function validateform() {
   var sError="";
   if ($("#fname").val() === "") { $("#tdfname").css("display","");
      sError++;
   }
   if ($("#lname").val() === "") { $("#tdlname").css("display","");
      sError++;
   }
   if ($("#emailid").val() === "") { $("#tdemailid").css("display","");
      sError++;
   }
   if ($("#mphone").val() === "") { $("#tdmphone").css("display","");
      sError++;
   }
   if ($("#otp").val() === "") { $("#tdotp").css("display","");
      sError++;
   }
   if ($("#uname").val() === "") { $("#tduname").css("display","");
      sError++;
   }
   if ($("#passwd").val() === "") { $("#tdpasswd").css("display","");
      sError++;
   }
   if ($("#cpasswd").val() === "") { $("#tdcpasswd").css("display","");
      sError++;
   }
   if (sError === "") {
      return true;
   } else {
      return false;
   }
}
$("#fname").change(function() { if ($("#fname").val() !== "") {
      $("#tdfname").css("display","none"); } else { $("#tdfname").css("display","");			
   }
});
$("#lname").change(function() { if ($("#lname").val() !== "") {
      $("#tdlname").css("display","none"); } else { $("#tdlname").css("display","");			
   }
});
$("#emailid").change(function() { if ($("#emailid").val() !== "") {
      $("#tdemailid").css("display","none"); } else { $("#tdemailid").css("display","");			
   }
});
$("#mphone").change(function() { if ($("#mphone").val() !== "") {
      $("#tdmphone").css("display","none"); } else { $("#tdmphone").css("display","");			
   }
});
$("#otp").change(function() { if ($("#otp").val() !== "") {
      $("#tdotp").css("display","none"); } else { $("#tdotp").css("display","");			
   }
});
$("#uname").change(function() { if ($("#uname").val() !== "") {
      $("#tduname").css("display","none"); } else { $("#tduname").css("display","");			
   }
});
$("#passwd").change(function() { if ($("#passwd").val() !== "") {
      $("#tdpasswd").css("display","none"); } else { $("#tdpasswd").css("display","");			
   }
});
$("#cpasswd").change(function() { if ($("#cpasswd").val() !== "") {
      $("#tdcpasswd").css("display","none"); } else { $("#tdcpasswd").css("display","");			
   }
});

var posturl = "https://4rvwimysc1.execute-api.us-east-1.amazonaws.com/prod/adduser";
var phonevalidationurl = "https://wnvt01y6nc.execute-api.us-east-1.amazonaws.com/prod/validate";
var otpsend = "";
function getdata() {
   var a = 0;
   $.ajax({ type:'GET', url:posturl, success: function(data) { $("#displaydetails").html('');
         $("#displaydetails").css("display", ""); console.log(data); $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:gray;"><td>Name</td><td>Mobile No</td><td>EmailID</td></tr>');
         data.Items.forEach(function(registeruser) {
            var clr = (a%2 === 0) ? "#eee": "white";
            a++;
            $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:'+clr+'"><td>'+registeruser.first_name+'-'+registeruser.last_name+'</td><td>'+registeruser.mobile_no+'</td><td>'+registeruser.emailid+'</td></tr>'); }); }, error: function(err) { console.log(err); } }); } $(document).ready(function() {
   $("#otp").on("change", function() { var otpentered = $("#otp").val();
      if (otpsend == otpentered) {
         document.getElementById("submit").disabled = false;
      } else {
         alert("OTP is not valid.Please enter the valid one or validate phone again to continue!");
         document.getElementById("submit").disabled = true;
      }
   });
   $("#validatephone").on("click", function() { $.ajax({
         type:'POST',
         url:phonevalidationurl,
         data:JSON.stringify({
            "mphone":$("#mphone").val() }), success: function(data) { $("#otpdiv").css("display", "");
            alert("OTP is send to the mobile, please enter to continue");
            console.log(data);
            otpsend = data;
         },
         error : function(err) {
            $("#otpdiv").css("display", "none"); alert("Invalid mobile no."); } }); }); $("#submit").on("click", function() {
      if (validateform()) {
         $.ajax({ type:'POST', url:posturl, data:JSON.stringify({ "fname": $("#fname").val(),
               "lname": $("#lname").val(), "emailid":$("#emailid").val(),
               "mphone":$("#mphone").val(), "otp":$("#otp").val(),
               "uname":$("#uname").val(), "passwd":$("#passwd").val(),
               "cpasswd":$("#cpasswd").val()
            }),
            success: function(data) {
               alert("Data added successfully");
               console.log(data);
               getdata();
            }
         });
      }
   });
   getdata();
});

Do tej pory wykonaliśmy wywołanie AJAX do utworzonego API i opublikowaliśmy dane, jak pokazano powyżej.

Wywołanie AJAX w celu dodania danych do tabeli wygląda następująco:

var posturl = "https://4rvwimysc1.execute-api.us-east-1.amazonaws.com/prod/adduser";
$(document).ready(function() {
   $("#submit").on("click", function() { if (validateform()) { $.ajax({
            type:'POST',
            url:posturl,
            data:JSON.stringify({
               "fname": $("#fname").val(), "lname": $("#lname").val(),
               "emailid":$("#emailid").val(), "mphone":$("#mphone").val(),
               "otp":$("#otp").val(), "uname":$("#uname").val(),
               "passwd":$("#passwd").val(), "cpasswd":$("#cpasswd").val()
            }),
            success: function(data) {
               alert("Data added successfully");
               console.log(data);
               getdata();
            }
         });
      }
   });
});

Zauważ, że aby odczytać dane, wywoływana jest funkcja, której kod podano poniżej -

function getdata() {
   var a = 0;
   $.ajax({ type:'GET', url:posturl, success: function(data) { $("#displaydetails").html('');
         $("#displaydetails").css("display", ""); console.log(data); $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:gray;"><td>Name</td><td>Mobile No</td><td>EmailID</td></tr>');
         data.Items.forEach(function(registeruser) {
            var clr = (a%2 === 0) ? "#eee": "white";
            a++;
            $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:'+clr+'"><td>'+registeruser.first_name+'-'+registeruser.last_name+'</td><td>'+registeruser.mobile_no+'</td><td>'+registeruser.emailid+'</td></tr>');
         });
      },
      error: function(err) {
         console.log(err);
      }
   });
}

Po kliknięciu przycisku weryfikacji numeru telefonu komórkowego zostanie wywołany następujący kod i wyśle ​​numer telefonu komórkowego -

var phonevalidationurl = "https://wnvt01y6nc.execute-api.us-east-1.amazonaws.com/prod/validate";
var otpsend = "";
$("#validatephone").on("click", function() {
   $.ajax({ type:'POST', url:phonevalidationurl, data:JSON.stringify({ "mphone":$("#mphone").val()					
      }),
      success: function(data) {
         $("#otpdiv").css("display", ""); alert("OTP is send to the mobile, please enter the OTP to continue"); console.log(data); otpsend = data; }, error : function(err) { $("#otpdiv").css("display", "none");
         alert("Invalid mobile no.");
      }
   });
});

// Validate otp
$("#otp").on("change", function() { var otpentered = $("#otp").val();
   if (otpsend == otpentered) {
      document.getElementById("submit").disabled = false;
   } else {
      alert("OTP is not valid.Please enter the valid one or validate phone again to continue!");
      document.getElementById("submit").disabled = true;
   }
}