AWS Lambda Java处理程序Hello World

时间:2016-04-14 18:58:56

标签: java aws-lambda

我找到了新的信息。我想也许我已经为我的S3事件源实现了错误的界面。到目前为止,我还没有能够让它工作或理解应该实现哪个接口。 RequestHandler接口要求handleRequest方法返回一个值。有什么建议?

  

outputType - 如果您计划同步调用Lambda函数   (使用RequestResponse调用类型),您可以返回输出   使用任何支持的数据类型的函数。例如,   如果你使用Lambda函数作为移动应用程序后端,那么你就是   同步调用它。您的输出数据类型将被序列化   进入JSON。

     

如果您打算异步调用Lambda函数(使用   事件调用类型),outputType应为void。例如,如果   您将AWS Lambda与事件源(如Amazon S3,Amazon)一起使用   Kinesis和Amazon SNS,这些事件源调用Lambda   使用事件调用类型的函数。

我创建了一个基本的处理程序,但似乎错过了一个继续暗示我的关键步骤。

代码&错误如下:

package example;

import com.amazonaws.services.lambda.runtime.Context; 
import com.amazonaws.services.lambda.runtime.LambdaLogger; 
import com.amazonaws.services.lambda.runtime.RequestHandler; 
import com.amazonaws.services.s3.model.S3Event;

public class Hello implements RequestHandler<S3Event, Object> {
    public String handleRequest(S3Event input, Context context) {
        return "Hello";
    } 
}
  

{“errorMessage”:“在JSON解析期间发生错误”,
  “errorType”:“java.lang.RuntimeException”,“stackTrace”:[],
  “原因”:{          “errorMessage”:“com.fasterxml.jackson.databind.JsonMappingException:不能   反序列化com.amazonaws.services.s3.model.S3Event的实例   来源:START_OBJECT令牌\ n:   lambdainternal.util.NativeMemoryAsInputStream@566776ad;行:1,   栏:1“,          “errorType”:“java.io.UncheckedIOException”,          “堆栈跟踪”: [],          “原因”:{              “errorMessage”:“无法从START_OBJECT令牌中取消序列化com.amazonaws.services.s3.model.S3Event的实例\ n   来源:lambdainternal.util.NativeMemoryAsInputStream@566776ad;线:   1,栏:1“,              “errorType”:“com.fasterxml.jackson.databind.JsonMappingException”,              “堆栈跟踪”: [                  “com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)”,                  “com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:835)”,                  “com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:831)”,                  “com.fasterxml.jackson.databind.deser.std.EnumDeserializer._deserializeOther(EnumDeserializer.java:137)”,                  “com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:89)”,                  “com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:18)”,                  “com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1441)”,                 “com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1047)”]           }       }}

4 个答案:

答案 0 :(得分:0)

将方法handleRequest()的返回类型设为Object,然后返回&#34; Hello&#34;太

答案 1 :(得分:0)

您收到的错误消息

  

无法从START_OBJECT标记中反序列化com.amazonaws.services.s3.model.S3Event的实例

表示作为输入参数传递给Lambda函数的值不代表S3Event对象。

您是否在AWS控制台上测试Lambda函数,而不是触发真正的S3事件? 如果是这样,请转到 Lambda&gt;功能&gt;你的功能&gt;行动&gt;配置测试事件并从示例事件模板下拉列表中选择 S3 Put S3 Delete ,将正确的输入发送到您的函数为了测试。

答案 2 :(得分:0)

我认为你无法返回非对象回复。你可以这样做:

return new Gson().fromJson(jsonObject, Object.class);

注意:jsonObject是一个包含要返回的信息的json。

答案 3 :(得分:0)

检查您是否正在导入正确的S3Event类,即com.amazonaws.services.lambda.runtime.events.S3Event。

我遇到了同样的例外,发现我已经导入了com.amazonaws.services.s3.model.S3Event。