При разработке бессерверных функций вам часто требуются дополнительные зависимости или библиотеки для работы функции. Для Лямбда-функций в java вам нужны зависимости amazon от служб, используемых в функции. Затем вы заархивируете функцию и ее зависимости в fat jar и загружаете ее в лямбда-функцию. Если вы не знакомы с созданием лямбда-функции в java, то обратитесь к this post для быстрого начала.
Подход с толстой банкой работает отлично но если у вас есть несколько функций, которые используют одни и те же зависимости, то создание fat jar для каждой функции не является хорошим подходом, и обслуживание такого кода также затруднено. Изменение версии jar требует изменения каждой из отдельных лямбда-функций.
Более элегантным решением является использование лямбда-слоев.
Что такое Лямбда-слои?
Слой – это ZIP-архив, содержащий библиотеки, пользовательскую среду выполнения или другие зависимости. С помощью слоев вы можете использовать библиотеки в своей функции без необходимости включать их в свой пакет развертывания. Слои позволяют сохранить пакет развертывания небольшим, что упрощает разработку.
Слои извлекаются в каталог/opt в среде выполнения функции. Каждая среда выполнения ищет библиотеки в другом расположении в разделе/opt, в зависимости от языка.
Вы можете указать до 5 уровней в конфигурации вашей функции во время или после создания функции. Вы выбираете конкретную версию слоя для использования. Если вы хотите использовать другую версию позже, обновите конфигурацию вашей функции.
Давайте посмотрим на это в действии
Мы напишем базовую лямбда-функцию, которая будет просто печатать переменные среды лямбда и сведения о событии. Мы создадим 2 проекта maven. В первом проекте мы включаем amazon и другие важные зависимости. Этот проект будет служить нашим лямбда-слоем. Во втором проекте мы включаем наш первый проект в качестве зависимости и напишем лямбда-обработчик.
Создайте первый проект maven под названием Lambda-Layer-Base и обновите pom, как показано ниже: Этот проект содержит все общие зависимости, требуемые функциями. В нашем случае мы добавили lamdba-core
и gson
зависимость. Мы также добавили maven-shade-plugin
для создания fat jar.
4.0.0 net.rajanpanchal lambda-layer-base 1 Lambda-Layer-Base Lambda base 1.8 1.8 2.14.11 software.amazon.awssdk bom ${aws.java.sdk.version} pom import com.amazonaws aws-lambda-java-core 1.2.0 com.google.code.gson gson 2.8.6 org.apache.maven.plugins maven-compiler-plugin ${maven.compiler.source} ${maven.compiler.target} org.apache.maven.plugins maven-shade-plugin 3.2.4 package shade
Этот проект будет содержать только зависимости. Теперь выполните maven clean install
и он должен сгенерировать jar ( lambda-layer-base-1.jar
) в целевой папке.
Создайте другой проект maven и обновите pom нижеприведенным содержимым. Мы включили наш первый проект в качестве зависимости ( lambda-layer-base
). Также обратите внимание, что мы больше не используем плагин maven shade, так как не хотим, чтобы зависимости включались в jar.
4.0.0 net.rajanpanchal lambda-java-demo 1 jar Lambda-Layers-Demo HelloWorld Lambda Layers Demo 1.8 1.8 2.14.11 net.rajanpanchal lambda-layer-base 1 org.apache.maven.plugins maven-compiler-plugin ${maven.compiler.source} ${maven.compiler.target}
Добавьте файл класса в src/main/java, который будет содержать лямбда-логику. Здесь мы просто регистрируем кое-какие материалы.
package net.rajanpanchal.handlers; import java.util.Map; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class HelloWorldHandler implements RequestHandler
Выполните команду maven package
, чтобы создать jar для проекта. Банка ( lambda-java-demo-1.jar
) должен быть создан в целевой папке.
Создание Лямбда-слоя
Прежде чем мы перейдем к консоли для создания слоя, давайте завершим один важный шаг. Помните, что слои извлекаются в папку в каталоге/opt. Вам необходимо упаковать слой в структуру папок в соответствии с вашей средой выполнения. Для java вам необходимо упаковать jar в папку java/lib
. Окончательная структура папок во время выполнения lambda будет /opt/java/lib/<ваш jar>
. Итак, теперь создайте папки java/lib и скопируйте jar из первого проекта и заархивируйте папку. Теперь мы готовы загрузить jar в качестве лямбда-слоя.
Создание лямбда-функции
Теперь создайте лямбда-функцию и укажите слой, который мы только что создали. Кроме того, загрузите jar из второго проекта в качестве кода нашей функции.
Добавление слоев в функцию
Загрузите jar-файл с кодом функции и обновите настройки среды выполнения
Создайте тестовое событие и выполните тест.
исходный код:
Вывод
Лямбда-слой делает вашу разработку простой и безошибочной. Это уменьшает размер пакета развертывания функций. Вы можете использовать один и тот же слой в нескольких функциях.
Если вам понравился этот пост, не стесняйтесь делиться и подписываться на меня Твиттер следите за обновлениями!
Оригинал: “https://dev.to/rajanpanchal/what-is-lambda-layers-and-how-to-use-it-with-java-runtime-21di”