AWS Lambda - Funkcja w Javie

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 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. Zobacz zrzut ekranu podany poniżej, aby lepiej zrozumieć -

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 na temat tożsamości amazon cognito w przypadku używania 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. Zapoznaj się z przykładowym kodem podanym poniżej, aby lepiej zrozumieć -

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 kodu podanego powyżej 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, wynosi 24961, czyli w milisekundach. Zatem 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 do logowania danych. 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

Ta sekcja wyjaśnia, jak obsługiwać błędy 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 -