Serverless scheduled java 函数应该实现什么接口?
What interface should a Serverless scheduled java function implement?
我正在尝试使用无服务器编写 Java AWS Lambda。虽然由 HTTP 端点触发的我的 Lambdas 部署并正常工作,但我在预定的尝试中失败了:
配置如下:
来自 serverless.yml
functions:
timedHandler:
handler: com.serverless.TimedHandler
events:
- schedule:
rate(1 minute)
如果我尝试像这样实现 RequestHandler:
public class TimedHandler implements RequestHandler<Request, Response> {
private static final Logger LOG = LogManager.getLogger(Handler.class);
@Override
public Response handleRequest(Request request, Context context) {
LOG.info("Started up");
return null;
}
日志抱怨:
An error occurred during JSON parsing: java.lang.RuntimeException java.lang.RuntimeException: An error occurred during JSON parsing
Caused by: java.io.UncheckedIOException: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.amazonaws.Request
我假设是因为预定事件没有传入 Request
对象,而是特定于预定触发器的东西。但是,如果我不实现接口(AWS 文档建议的接口很好),AWS 日志会抱怨
Class does not implement an appropriate handler interface: com.serverless.TimedHandler
我是否需要为传递适当参数的预定 lambda 实施特定的 AWS 接口?
原来他们应该实现RequestStreamHandler接口,例如:
public class TimedHandler implements RequestStreamHandler {
private static final Logger LOG = LogManager.getLogger(TimedHandler.class);
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
LOG.info("Started up");
return;
}
}
这现在成功运行并且没有抛出异常
我正在尝试使用无服务器编写 Java AWS Lambda。虽然由 HTTP 端点触发的我的 Lambdas 部署并正常工作,但我在预定的尝试中失败了:
配置如下:
来自 serverless.yml
functions:
timedHandler:
handler: com.serverless.TimedHandler
events:
- schedule:
rate(1 minute)
如果我尝试像这样实现 RequestHandler:
public class TimedHandler implements RequestHandler<Request, Response> {
private static final Logger LOG = LogManager.getLogger(Handler.class);
@Override
public Response handleRequest(Request request, Context context) {
LOG.info("Started up");
return null;
}
日志抱怨:
An error occurred during JSON parsing: java.lang.RuntimeException java.lang.RuntimeException: An error occurred during JSON parsing
Caused by: java.io.UncheckedIOException: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.amazonaws.Request
我假设是因为预定事件没有传入 Request
对象,而是特定于预定触发器的东西。但是,如果我不实现接口(AWS 文档建议的接口很好),AWS 日志会抱怨
Class does not implement an appropriate handler interface: com.serverless.TimedHandler
我是否需要为传递适当参数的预定 lambda 实施特定的 AWS 接口?
原来他们应该实现RequestStreamHandler接口,例如:
public class TimedHandler implements RequestStreamHandler {
private static final Logger LOG = LogManager.getLogger(TimedHandler.class);
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
LOG.info("Started up");
return;
}
}
这现在成功运行并且没有抛出异常