Как загрузить нативные библиотеки в AWS Lambda? - PullRequest
0 голосов
/ 25 мая 2018

В моем проекте Java Server Server мне нужно вызвать собственную библиотеку для обработки изображений (libvips).Я использую Gradle для создания zip-файла и отправляю в папку lib все зависимости, включая нативные библиотеки:

task buildZip(type: Zip) {
archiveName = "${project.name}.zip"
from compileJava
from processResources
from('.') {
    include 'lib/**'
    include 'bin/**'
}
into('lib') {
    from configurations.runtime
}
}

В сгенерированном zip-файле, в папке lib есть все библиотеки(jars / native / etc).

После развертывания функции через serverless deploy я не могу загрузить библиотеку libvips.so, используя Native.loadLibrary("/var/task/lib/libvips.so", Object.class).Видимо в /var/task/lib/ находятся только зависимости java, а не нативные библиотеки.

Есть ли другой путь, в котором AWS хранит собственные библиотеки?

РЕДАКТИРОВАТЬ

Выдается исключение:

ava.lang.UnsatisfiedLinkError: Unable to load library '/var/task/lib/libvips.so': Native library (var/task/lib/libvips.so) not found in resource path ([file:/var/task/, file:/var/task/lib/aopalliance-repackaged-2.5.0-b42.jar, file:/var/task/lib/asm-all-repackaged-2.5.0-b42.jar, file:/var/task/lib/aws-java-sdk-core-1.11.336.jar, file:/var/task/lib/aws-java-sdk-kms-1.11.336.jar, file:/var/task/lib/aws-java-sdk-s3-1.11.336.jar, file:/var/task/lib/aws-lambda-java-core-1.1.0.jar,....

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Вам необходимо указать java.library.path свойство JVM.

Путем изменения параметров командной строки JVM

 JAVA_OPTS = $JAVA_OPS -Djava.library.path= /var/task/lib/ 
 java $JAVA_OPTS ...

Или изменить его непосредственно в своем коде

System.setProperty("java.library.path", "/var/task/lib/");
System.loadLibrary("libvips.so");

Также вы можете использовать библиотеку JNA .JNA предоставляет функциональные возможности для автоматической распаковки и загрузки собственных библиотекарей из архива JAR (ресурсов), добавленного в путь к классу JVM.Он включает в себя выбор правильных двоичных файлов операционной системы и архитектуры процессора.

0 голосов
/ 25 мая 2018

Не все нативные библиотеки присутствуют в лямбда-среде, вам нужно создать собственный пакет развертывания, используя либо докер, либо Ec2.

вот как вы это сделаете: https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example-deployment-pkg.html#with-s3-example-deployment-pkg-java

...