我想从s3事件和sns事件触发Lambda函数。
当前版本是这样的:
public class LambdaFunctionHandler implements RequestHandler<S3Event, Object> {
public Object handleRequest(S3Event input, Context context) {
context.getLogger().log("S3Event: " + input);
return null;
}
}
有没有办法处理这两种事件类型?
答案 0 :(得分:0)
作为其中一种方法而不是使用S3Event
类,您只需使用Map
并根据请求对象的视图决定做什么。
但更正确的方法如下。假设您有S3和SNS事件的通用逻辑,那么您正在使用这些请求中的一些公共属性。您可以创建自己的包含此公共属性的自定义基类,然后创建一个利用此基类的公共处理程序。另见:https://docs.aws.amazon.com/lambda/latest/dg/java-programming-model-req-resp.html
粗略地说它看起来像:
public class BaseCommonRequest {
private String someCommonProperty1;
// ...
}
public class BaseLambdaFunctionHandler implements RequestHandler<BaseCommonRequest, Object> {
public Object handleRequest(BaseCommonRequest input, Context context) {
context.getLogger().log("event: " + input);
return null;
}
}
答案 1 :(得分:0)
根据official documentation的建议,有低级处理程序。
public class Hello implements RequestStreamHandler{
public static void handler(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
int letter;
while((letter = inputStream.read()) != -1)
{
outputStream.write(Character.toUpperCase(letter));
}
}
}
通过使用这些处理程序,我可以将请求转换为S3Event和SNSEvent。有一个示例代码here。