如何在用Java编写的AWS Lambda中处理SNS消息?

Mar*_*rga 7 java amazon-web-services aws-lambda

我有几个lambda通过SNS一起工作.一个lambda接收请求并将数据发送到SNS.另一个lambda订阅了SNS.在JavaScript中很容易做,因为传入的消息只是一个JS对象.现在我将lambda重写为Java.我正在寻找在处理程序中使用的类型.

这就是lambda的样子.SNSMessage是该类型的占位符.

public class ArchiveRequestHandler implements RequestHandler<SNSMessage?, Void> {

    @Override public Void handleRequest(SNSMessage? input, Context context) {
        // do something with the message
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是示例消息的样子:

{
  "Records": [
    {
      "EventVersion": "1.0",
      "EventSubscriptionArn": "arn:aws:sns:EXAMPLE",
      "EventSource": "aws:sns",
      "Sns": {
        "SignatureVersion": "1",
        "Timestamp": "1970-01-01T00:00:00.000Z",
        "Signature": "EXAMPLE",
        "SigningCertUrl": "EXAMPLE",
        "MessageId": "1234567-ee98-5cb9-9903-4c221d41eb5e",
        "Message": "Hello from SNS!",
        "MessageAttributes": {
          "Test": {
            "Type": "String",
            "Value": "TestString"
          },
          "TestBinary": {
            "Type": "Binary",
            "Value": "TestBinary"
          }
        },
        "Type": "Notification",
        "UnsubscribeUrl": "EXAMPLE",
        "TopicArn": "arn:aws:sns:EXAMPLE",
        "Subject": "TestInvoke"
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

现在我确信我可以创建自己的类型来解析它,但我希望有更标准的方法来做到这一点.但是我没有在lambda和SNS SDK依赖项中找到任何看起来像这个对象的东西.

Mar*_*rga 9

感谢@dnault和@notionquest的评论,我发现这个对象是aws-lambda-java-events库的一部分.我添加了依赖:

compile 'com.amazonaws:aws-lambda-java-events:1.3.0'
Run Code Online (Sandbox Code Playgroud)

现在我可以这样做:

public class ArchiveRequestHandler implements RequestHandler<SNSEvent, Void> {

    @Override public Void handleRequest(SNSEvent input, Context context) {
        // do something with the message
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)