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;
    }

}

这现在成功运行并且没有抛出异常