Учебники

AWS Lambda — функция в Java

В этой главе мы подробно разберемся, как подробно создать простую лямбда-функцию AWS в Java.

Создание JAR-файла в Eclipse

Прежде чем приступить к созданию лямбда-функции в AWS, нам потребуется поддержка инструментария AWS для Eclipse. Любое руководство по его установке вы можете найти в главе « Настройка среды» данного руководства.

Как только вы закончите установку, следуйте инструкциям, приведенным здесь —

Шаг 1

Откройте Eclipse IDE и создайте новый проект с помощью AWS Lambda Java Project . Посмотрите на скриншот, приведенный ниже для лучшего понимания —

Выбрать мастера

Шаг 2

Как только вы выберете Next , он перенаправит вас на экран, показанный ниже —

Лямбда Java проект

Шаг 3

Теперь код по умолчанию создается для пользовательского типа ввода. Как только вы нажмете кнопку Готово , проект будет создан, как показано ниже —

Пользовательский Тип

Шаг 4

Теперь щелкните правой кнопкой мыши свой проект и экспортируйте его. Выберите файл Java / JAR в мастере экспорта и нажмите « Далее» .

Мастер экспорта

Шаг 5

Теперь, если вы нажмете « Далее» , вам будет предложено сохранить файл в папке назначения, который будет запрошен при нажатии «Далее».

После сохранения файла вернитесь в консоль AWS и создайте функцию AWS Lambda для Java.

Консоль AWS для Java

Шаг 6

Теперь загрузите файл .jar, который мы создали с помощью кнопки « Загрузить» , как показано на скриншоте ниже.

Кнопка загрузки

Детали обработчика для Java

Обработчик — это имя пакета и имя класса . Посмотрите на следующий пример, чтобы понять обработчик в деталях —

пример

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!";
   }
}

Обратите внимание, что из приведенного выше кода обработчик будет com.amazonaws.lambda.demo.LambdaFunctionHandler

Теперь давайте проверим изменения и посмотрим на результат —

Лямбда-обработчик функций

Вывод обработчика лямбда-функции

Контекстный объект в Java

Взаимодействие с AWS Lambda выполняется с использованием контекста. Он предоставляет следующие методы для использования внутри Java —

Sr.No Контекстные методы и описание
1

getMemoryLimitInMB ()

это даст предел памяти, который вы указали при создании лямбда-функции.

2

getFunctionName ()

это даст имя лямбда-функции.

3

getFunctionVersion ()

это даст версию работающей лямбда-функции.

4

getInvokedFunctionArn ()

это даст ARN, используемый для вызова функции.

5

getAwsRequestId ()

это даст идентификатор запроса aws. Этот идентификатор создается для лямбда-функции и является уникальным. Идентификатор можно использовать с поддержкой aws, если у вас возникнут какие-либо проблемы.

6

getLogGroupName ()

это даст имя группы aws cloudwatch, связанной с созданной лямбда-функцией aws. Будет нулевым, если у пользователя iam нет прав на ведение журнала в облаке.

7

getClientContext ()

это даст подробную информацию о приложении и устройстве при использовании с AWS Mobile SDK. Он предоставит такие данные, как имя и код версии, идентификатор клиента, заголовок, имя пакета приложения. Это может быть ноль.

8

getIdentity ()

это даст подробную информацию о личности Amazon Cognito при использовании с AWS Mobile SDK. Это может быть ноль.

9

getRemainingTimeInMillis ()

это даст оставшееся время выполнения в миллисекундах, когда функция будет завершена после указанного времени ожидания.

10

getLogger ()

это даст лямбда-логгер, связанный с объектом контекста.

getMemoryLimitInMB ()

это даст предел памяти, который вы указали при создании лямбда-функции.

getFunctionName ()

это даст имя лямбда-функции.

getFunctionVersion ()

это даст версию работающей лямбда-функции.

getInvokedFunctionArn ()

это даст ARN, используемый для вызова функции.

getAwsRequestId ()

это даст идентификатор запроса aws. Этот идентификатор создается для лямбда-функции и является уникальным. Идентификатор можно использовать с поддержкой aws, если у вас возникнут какие-либо проблемы.

getLogGroupName ()

это даст имя группы aws cloudwatch, связанной с созданной лямбда-функцией aws. Будет нулевым, если у пользователя iam нет прав на ведение журнала в облаке.

getClientContext ()

это даст подробную информацию о приложении и устройстве при использовании с AWS Mobile SDK. Он предоставит такие данные, как имя и код версии, идентификатор клиента, заголовок, имя пакета приложения. Это может быть ноль.

getIdentity ()

это даст подробную информацию о личности Amazon Cognito при использовании с AWS Mobile SDK. Это может быть ноль.

getRemainingTimeInMillis ()

это даст оставшееся время выполнения в миллисекундах, когда функция будет завершена после указанного времени ожидания.

getLogger ()

это даст лямбда-логгер, связанный с объектом контекста.

Теперь давайте обновим приведенный выше код и проследим за выводом некоторых методов, перечисленных выше. Обратите внимание на пример кода, приведенный ниже для лучшего понимания —

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!";
   }
}

Как только вы запустите приведенный выше код, вы можете найти вывод, как показано ниже —

Контекстный объект

Журналы для контекста

Вы можете наблюдать следующий вывод, когда просматриваете вывод журнала:

Журналы для контекста

Объем памяти, выделенный для функции Lambda, составляет 512 МБ. Выделенное время составляет 25 секунд. Оставшееся время, как показано выше, составляет 24961, что составляет миллисекунды. Таким образом, 25000 — 24961, что равно 39 миллисекундам, используется для выполнения лямбда-функции. Обратите внимание, что имя группы Cloudwatch и идентификатор запроса также отображаются, как показано выше.

Обратите внимание, что мы использовали следующую команду для печати журналов в Java —

System.out.println (“log message”)

То же самое доступно в CloudWatch. Для этого перейдите в сервисы AWS, выберите CloudWatchservices и нажмите Журналы .

Теперь, если вы выберете лямбда-функцию, она отобразит дату логов, как показано ниже —

Журналы Дата Мудрый

Вход в Java

Вы также можете использовать Lambdalogger в Java для регистрации данных. Обратите внимание на следующий пример, который показывает то же самое —

пример

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!";
   }
}

Приведенный выше код даст вам следующий вывод —

Ведение журнала Java

Вывод в CloudWatch будет таким, как показано ниже —

Регистрация выходных данных Java

Обработка ошибок в Java для лямбда-функции

В этом разделе объясняется, как обрабатывать ошибки в Java для лямбда-функции. Обратите внимание на следующий код, который показывает то же самое —

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");
   } 
}

Обратите внимание, что сведения об ошибке отображаются в формате json с ошибкой ErrorMessage от AWS Lambda . Кроме того, ErrorType и stackTrace дают более подробную информацию об ошибке.

Вывод и соответствующий вывод лога кода, приведенного выше, будут такими, как показано на следующих скриншотах, приведенных ниже —

Обработка ошибок Java