我目前正在学习 AWS Lambda 以及如何从其他服务触发它。我已经成功地使用 SNS 主题(在本教程的帮助下)发布一个 json,如下所示:
{
"name":"Bojack",
"lastName":"Horseman",
"job":"Horsin around"
}
并触发 Lambda 函数:
public class LambdaHandler implements RequestHandler<SNSEvent, MyResponse> {
public MyResponse handleRequest(SNSEvent request, Context context){
String input = request.getRecords().get(0).getSNS().getMessage();
MyRequest myRequest = new Gson().fromJson(input, MyRequest.class);
context.getLogger().log(MyRequest.toString());
// do some logic
return null;
}
}
效果很好!
但是,现在我正在尝试弄清楚如何添加也可以触发此功能的新服务。 例如 SQS 或 kinesis。 AFAIK 这些服务向 lambda 函数发送不同的 json 输入,我不确定如何接收它,因为我当前正在使用 SNSEvent
有没有一种方法可以接收通用事件并在处理程序内部确定发送该事件的服务是哪个服务?这样我就可以将其解析为特定事件并获取消息
我已经阅读了AWS Lambda 事件源映射,但我不确定这是否是正确的方法。我也不太明白
AWS 在
aws-lambda-java-events
库中发布了许多事件,其中包括 APIGatewayV2HTTPEvent
等通用事件。这些事件本质上为您提供了通用 bean 来处理事件 JSON。在此处查看该项目:https://github.com/aws/aws-lambda-java-libs/tree/main/aws-lambda-java-events
事件源映射基本上就是定义触发器时所做的事情,将源连接到 lambda。不幸的是,每个事件类型都有自己的格式,因此将其读取为纯 json 或类型化类无助于概括它。有人告诉我事件桥可以在这里提供帮助,但我还没有用它做任何事情。