Рубрики
Без рубрики

Что такое лямбда-слои и как их использовать с Java runtime?

При разработке бессерверных функций вам часто требуются дополнительные зависимости или библиотеки для fu… Помеченный aws, java, lambda, cloud.

При разработке бессерверных функций вам часто требуются дополнительные зависимости или библиотеки для работы функции. Для Лямбда-функций в 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, String>{

      public String handleRequest(Map event, Context context)
      {
        LambdaLogger logger = context.getLogger();
        String response = new String("200 OK");
        logger.log("ENVIRONMENT:"+System.getenv());
        // log execution details
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        logger.log("ENVIRONMENT VARIABLES: " + gson.toJson(System.getenv()));
        logger.log("CONTEXT: " + gson.toJson(context));
        // process event
        logger.log("EVENT: " + gson.toJson(event));
        logger.log("EVENT TYPE: " + event.getClass().toString());
        return response;
      }
    }

Выполните команду 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”