В этой главе мы подробно разберемся, как подробно создать простую лямбда-функцию AWS в Java.
Создание JAR-файла в Eclipse
Прежде чем приступить к созданию лямбда-функции в AWS, нам потребуется поддержка инструментария AWS для Eclipse. Любое руководство по его установке вы можете найти в главе « Настройка среды» данного руководства.
Как только вы закончите установку, следуйте инструкциям, приведенным здесь —
Шаг 1
Откройте Eclipse IDE и создайте новый проект с помощью AWS Lambda Java Project . Посмотрите на скриншот, приведенный ниже для лучшего понимания —
Шаг 2
Как только вы выберете Next , он перенаправит вас на экран, показанный ниже —
Шаг 3
Теперь код по умолчанию создается для пользовательского типа ввода. Как только вы нажмете кнопку Готово , проект будет создан, как показано ниже —
Шаг 4
Теперь щелкните правой кнопкой мыши свой проект и экспортируйте его. Выберите файл Java / JAR в мастере экспорта и нажмите « Далее» .
Шаг 5
Теперь, если вы нажмете « Далее» , вам будет предложено сохранить файл в папке назначения, который будет запрошен при нажатии «Далее».
После сохранения файла вернитесь в консоль AWS и создайте функцию AWS Lambda для 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
Обратите внимание, что из приведенного выше кода обработчик будет 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!"; } }
Приведенный выше код даст вам следующий вывод —
Вывод в CloudWatch будет таким, как показано ниже —
Обработка ошибок в 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 дают более подробную информацию об ошибке.
Вывод и соответствующий вывод лога кода, приведенного выше, будут такими, как показано на следующих скриншотах, приведенных ниже —