Проблема с созданием функции AWS Lambda с использованием Micronaut и GraalVM - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь создать и развернуть функцию AWS Lambda в Java, используя Micronaut, GraalVM и Docker.Я следую этому руководству , чтобы создать лямбда-версию AWS со средой выполнения GraalVM.

Я создал проект Java с помощью micronaut command $ mn create-app my-app --features aws-api-gateway-graal.И затем без каких-либо изменений в коде или конфигурационных файлах попробуйте создать образ Docker с собственным образом GraalVM.На этапе сборки Docker, когда создается собственный образ graalvm, я получаю следующие предупреждения:

Предупреждение: Отмена автономной сборки образа.Не допускаются экземпляры в куче образа для класса, который инициализируется или повторно инициализируется во время выполнения образа com.amazonaws.serverless.proxy.model.ContainerConfig.Попробуйте пометить этот класс для инициализации во время сборки с помощью --initialize-at-build-time = com.amazonaws.serverless.proxy.model.ContainerConfig

Detailed message:
Trace:     field io.micronaut.function.aws.proxy.AbstractLambdaContainerHandler.config

Предупреждение: используйте для печати -H: + ReportExceptionStackTraces для печатитрассировка стека лежащего в основе исключения *

Предупреждение. Образ 'server' - это резервный образ, для выполнения которого требуется JDK (используйте --no-fallback для подавления генерации резервного изображения).

После сборки я экспортирую образ докера с файлом начальной загрузки в файл function.zip, как написано в руководстве.Затем я загружаю файл function.zip в свою созданную лямбда-функцию AWS, и когда я пытаюсь протестировать функцию, я получаю эту ошибку:

{  "errorType": "Runtime.ExitError",
   "errorMessage": "RequestId: 888854d7-0e0e-42b4-a138-9a003c3455e1 Error: Runtime exited with error:
    exit status 1"
}

START RequestId: 888854d7-0e0e-42b4-a138-9a003c3455e1 Версия: $ LATEST
Ошибка: нет bin / java и нет переменной среды JAVA_HOME
END RequestId: 888854d7-0e0e-42b4-a138-9a003c3455e1
Идентификатор запроса: 888854d7-0e0e-42b4a138-9a003c3455e1 Продолжительность: 415,09 мс Расчетная продолжительность: 500 мс Объем памяти: 128 МБ Макс. используемая память: 16 МБ
RequestId: 888854d7-0e0e-42b4-a138-9a003c3455e1 Ошибка: время выполнения завершено с ошибкой: состояние выхода 1
Runtime.ExitError

Я не знаю, что не так.Я пока не нашел решения этой проблемы.

1 Ответ

0 голосов
/ 08 июля 2019

Этот класс вызывает статический метод defaultConfig класса ContainerConfig.

io.micronaut.function.aws.proxy.AbstractLambdaContainerHandler
com.amazonaws.serverless.proxy.internal.LambdaContainerHandler

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

Я совершенно новичок в GraalVM и пока не могу объяснить, в чем причина этого.

Мои native-image конфигурации.

native-image 
--delay-class-initialization-to-runtime=io.micronaut.function.aws.proxy.AbstractLambdaContainerHandler,com.amazonaws.serverless.proxy.internal.LambdaContainerHandler
--no-fallback
--no-server 
-cp build/libs/yourJarName.jar

Ресурсы: https://medium.com/graalvm/understanding-class-initialization-in-graalvm-native-image-generation-d765b7e4d6ed

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...