#java #quarkus
#java #quarkus
Вопрос:
Я следил за https://quarkus.io/guides/amazon-lambda учебное пособие по запуску моего приложения Quarkus в лямбда-функции с помощью AWS.
До тех пор, пока следующая команда не будет работать нормально, я могу успешно вызывать свою лямбда-функцию в AWS:
sh target/manage.sh invoke
Но когда я пытаюсь установить исходный код с помощью следующей команды:
mvn clean install -Pnative -Dnative-image.docker-build=true
Я получаю следующую ошибку:
[ERROR] Failed to execute goal io.quarkus:quarkus-maven-plugin:1.7.3.Final:native-image (default) on project quarkus-lambda: Failed to generate native image: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[ERROR] [error]: Build step io.quarkus.deployment.pkg.steps.NativeImageBuildStep#build threw an exception: java.lang.RuntimeException: Failed to build native image
[ERROR] at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:389)
[ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[ERROR] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR] at java.base/java.lang.reflect.Method.invoke(Method.java:566)
[ERROR] at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:932)
[ERROR] at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
[ERROR] at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
[ERROR] at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2046)
[ERROR] at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1578)
[ERROR] at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452)
[ERROR] at java.base/java.lang.Thread.run(Thread.java:834)
[ERROR] at org.jboss.threads.JBossThread.run(JBossThread.java:479)
[ERROR] Caused by: java.lang.RuntimeException: Image generation failed. Exit code: 125
[ERROR] at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.imageGenerationFailed(NativeImageBuildStep.java:491)
[ERROR] at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:367)
[ERROR] ... 12 more
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
Я также попробовал следующую команду, и она работает нормально:
mvn package -Pnative
Это последний журнал при выполнении приведенной выше команды:
[quarkus-lambda-1.0-SNAPSHOT-runner:10879] (compile): 15,386.61 ms, 3.51 GB
[quarkus-lambda-1.0-SNAPSHOT-runner:10879] compile: 26,031.26 ms, 3.51 GB
[quarkus-lambda-1.0-SNAPSHOT-runner:10879] image: 2,312.47 ms, 3.51 GB
[quarkus-lambda-1.0-SNAPSHOT-runner:10879] write: 765.22 ms, 3.51 GB
[quarkus-lambda-1.0-SNAPSHOT-runner:10879] [total]: 60,426.97 ms, 3.51 GB
[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 63483ms
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:10 min
[INFO] Finished at: 2020-09-21T08:47:39 01:00
[INFO] ------------------------------------------------------------------------
Когда я пытаюсь создать свою лямбда-функцию изначально, она также успешно работает, как показано в следующем журнале:
target/manage.sh native create
Creating function
aws lambda create-function --function-name QuarkusLambdaNative --zip-file fileb:///Users/rafadelnero/Desktop/dev/java/work/quarkus-lambda/target/function.zip --handler io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler::handleRequest --runtime provided --role arn:aws:iam::661273428467:role/lambda-role --timeout 15 --memory-size 256 --environment 'Variables={DISABLE_SIGNAL_HANDLERS=true}'
{
"FunctionName": "QuarkusLambdaNative",
"LastModified": "2020-09-21T07:51:40.327 0000",
"RevisionId": "f703cd6d-60a7-409a-8c9b-f5ce47719f44",
"MemorySize": 256,
"Environment": {
"Variables": {
"DISABLE_SIGNAL_HANDLERS": "true"
}
},
"Version": "$LATEST",
"Role": "arn:aws:iam::661273428467:role/lambda-role",
"Timeout": 15,
"Runtime": "provided",
"TracingConfig": {
"Mode": "PassThrough"
},
"CodeSha256": "lNXMPlOuQt4id0 W8okeTm NlHvAUw8f7suQatSOXJ8=",
"Description": "",
"CodeSize": 8230977,
"FunctionArn": "arn:aws:lambda:eu-west-1:661273428467:function:QuarkusLambdaNative",
"Handler": "io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler::handleRequest"
}
Моя функция находится в AWS, но когда я пытаюсь ее вызвать, я получаю следующую ошибку:
target/manage.sh invoke
Invoking function
aws-cli/1.16.96 Python/2.7.16 Darwin/19.6.0 botocore/1.12.86
target/manage.sh: line 29: [: -ge: unary operator expected
aws lambda invoke response.txt --function-name QuarkusLambda --payload file://payload.json --log-type Tail --query LogResult --output text
base64 --decode
An error occurred (ResourceNotFoundException) when calling the Invoke operation: Function not found: arn:aws:lambda:eu-west-1:661273428467:function:QuarkusLambda
cat: response.txt: No such file or directory
У меня настроены следующие переменные:
GRAALVM_HOME=/Library/Java/JavaVirtualMachines/graalvm-ce-java11-20.2.0/Contents/Home
JAVA_HOME=/Users/rafadelnero/.jenv/versions/graalvm64-11.0.8
Моя версия для компьютера Mac следующая:
macOS Catalina 10.15.6
Есть идеи о том, что можно сделать для решения этой проблемы?
Комментарии:
1. Вероятно, функция не может быть вызвана, поскольку она была установлена как QuarkusLambdaNative и manage. sh пытается вызвать QuarkusLambda. Вы пробовали это с Quarkus 1.8.2.Final?
Ответ №1:
Спасибо, гребля! Ваше предложение было частью решения!
Чтобы заставить это работать, я выполнил два шага:
- Обновлена версия Quarkus до 1.8.2.Final в
pom
файле - Поскольку я использую Mac, необходимо использовать следующую команду:
mvn clean install -Dnative -Dquarkus.native.container-build=true
Затем я выполнил указанные шаги, как указано выше.
Еще один важный момент, который следует упомянуть, заключается в том, что в версии, которую я использовал до 1.7.3.Final
того, как команда mvn clean install -Dnative -Dquarkus.native.container-build=true
не работала, это немного усложнило устранение этой проблемы.