我使用Graal和Micronaut构建了一个原生java AWS Lambda函数,如下所述
将其部署到AWS Lambda(自定义运行时)后,我无法成功执行它。
AWS显示的错误是:
{
"errorType": "Runtime.ExitError",
"errorMessage": "RequestId: 9a231ad9-becc-49f7-832a-f9088f821fb2 Error: Runtime exited with error: exit status 1"
}
AWS日志输出为:
START RequestId: 9a231ad9-becc-49f7-832a-f9088f821fb2 Version: $LATEST
01:13:08.015 [main] INFO i.m.context.env.DefaultEnvironment - Established active environments: [ec2, cloud, function]
Error executing function (Use -x for more information): Error decoding JSON stream for type [request]: No content to map due to end-of-input
at [Source: (BufferedInputStream); line: 1, column: 0]
END RequestId: 9a231ad9-becc-49f7-832a-f9088f821fb2
REPORT RequestId: 9a231ad9-becc-49f7-832a-f9088f821fb2 Duration: 698.31 ms Billed Duration: 700 ms Memory Size: 512 MB Max Memory Used: 54 MB
RequestId: 9a231ad9-becc-49f7-832a-f9088f821fb2 Error: Runtime exited with error: exit status 1
Runtime.ExitError
但是当我使用本地测试它时
echo '{"value":"testing"}' | ./server
我得到了
01:35:56.675 [main] INFO i.m.context.env.DefaultEnvironment - Established active environments: [function]
{"value":"New value: testing"}
功能代码为:
@FunctionBean("user-data-function")
public class UserDataFunction implements Function<UserDataRequest, UserData> {
private static final Logger LOG = LoggerFactory.getLogger(UserDataFunction.class);
private final UserDataService userDataService;
public UserDataFunction(UserDataService userDataService) {
this.userDataService = userDataService;
}
@Override
public UserData apply(UserDataRequest request) {
if (LOG.isDebugEnabled()) {
LOG.debug("Request: {}", request.getValue());
}
return userDataService.get(request.getValue());
}
}
UserDataService是:
@Singleton
public class UserDataService {
public UserData get(String value) {
UserData userData = new UserData();
userData.setValue("New value: " + value);
return userData;
}
}
为了在AWS控制台上测试它,我配置了以下测试事件:
{ "value": "aws lambda test" }
注:我向AWS Lambda上传了一个zip文件,其中包含“服务器”和“引导”文件,以允许如前所述的“自定义运行时”。
我做错了什么?
提前谢谢。
Tiago Peixoto。
编辑:添加了AWS控制台上使用的lambda测试事件。
好的,我想出来了。我刚刚更改了这个引导文件
#!/bin/sh
set -euo pipefail
./server
到这个
#!/bin/sh
set -euo pipefail
# Processing
while true
do
HEADERS="$(mktemp)"
# Get an event
EVENT_DATA=$(curl -sS -LD "$HEADERS" -X GET "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/next")
REQUEST_ID=$(grep -Fi Lambda-Runtime-Aws-Request-Id "$HEADERS" | tr -d '[:space:]' | cut -d: -f2)
# Execute the handler function from the script
RESPONSE=$(echo "$EVENT_DATA" | ./server)
# Send the response
curl -X POST "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/$REQUEST_ID/response" -d "$RESPONSE"
done
如本文所述
此处提供的示例项目:https://github.com/codependent/micronaut-aws-lambda-proxy-graal 我在Amazon AWS上部署了一个Micronaut应用程序,作为Lambda函数。它被编译成GraalVM本机映像,并使用AWS Lambda自定义运行时运行。 如果应用程序不使用DynamoDB,它将运行平稳。当配置它并作为普通Java应用程序启
我有以下错误:"无法使用Gradle发行版'https://services.gradle.org/distributions/gradle-4.4-all.zip'执行构建。" 只有当我的gradle文件中有这样的内容时才会出现这种情况:“class path ' com . Android . tools . build:gradle:3 . 1 . 2 '” 如果我把它切换回:“类路径'网站
我试图使用Micronaut、GraalVM和Docker在Java中创建和部署AWS Lambda函数。我正在按照本教程使用GraalVM运行时创建AWS lambda。 我使用命令创建了java项目。然后在不改变代码或配置文件的情况下,尝试用GraalVM本机映像构建Docker映像。在docker build步骤中,当构建graalvm本机映像时,我会收到以下警告: 警告:正在中止独立映像生
当试图用Jenkins编译一个简单的Grails2.1应用程序时,我遇到了失败,原因如下: 执行脚本编译时出错:启动失败:/tmp/jenkins-grails/projects/eskridgebudget/scriptcache/_grailscompile_groovy.class(没有这样的文件或目录) 可能有关联,也可能没有关联。 我可以从命令行在同一个框上成功地构建同一个项目。 Gra
我正在尝试使用Spark stream库从kafka读取一个json字符串。该代码能够连接到kafka broker,但在解码消息时失败。代码的灵感来自 https://github.com/killrweather/killrweather/blob/master/killrweather-examples/src/main/scala/com/datastax/killrweather/kaf