我找到了新的信息 . 我想也许我已经为我的S3事件源实现了错误的界面 . 到目前为止,我还没有能够让它工作或理解应该实现哪个接口 . RequestHandler接口要求handleRequest方法返回一个值 . 有什么建议?
outputType - 如果计划同步调用Lambda函数(使用RequestResponse调用类型),则可以使用任何支持的数据类型返回函数的输出 . 例如,如果使用Lambda函数作为移动应用程序后端,则同步调用它 . 您的输出数据类型将序列化为JSON . 如果计划异步调用Lambda函数(使用Event调用类型),则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”:[],“cause”:{“errorMessage”:“com.fasterxml.jackson . databind.JsonMappingException:无法在源代码中从START_OBJECT标记\ n中反序列化com.amazonaws.services.s3.model.S3Event的实例:lambdainternal.util.NativeMemoryAsInputStream@566776ad; line:1,column:1“,”errorType“: “java.io.UncheckedIOException”,“stackTrace”:[],“cause”:{“errorMessage”:“无法在源代码中反序列化START_OBJECT令牌中的com.amazonaws.services.s3.model.S3Event实例: lambdainternal.util.NativeMemoryAsInputStream@566776ad; line:1,column:1“,”errorType“:”com.fasterxml.jackson.databind.JsonMappingException“,”stackTrace“:[”com.fasterxml.jackson.databind.JsonMappingException.from (JsonMappingException.java:148)“,”com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:835)“,”com.fasterxml.jackson.databind.DeserializationC ontext.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 回答
您收到的错误消息
表示作为输入参数传递给Lambda函数的值不表示S3Event对象 .
您是否在AWS控制台上测试Lambda函数,而不是触发真正的S3事件?
如果是这样,请转到Lambda>函数> yourFunction>操作>配置测试事件,并从Sample事件模板下拉列表中选择 S3 Put 或 S3 Delete ,以将适当的输入发送到您的函数以进行测试 .
我认为你无法返回非对象响应 . 你可以这样做:
注意:jsonObject是一个包含要返回的信息的json .
检查您是否正在导入正确的S3Event类,即com.amazonaws.services.lambda.runtime.events.S3Event .
我得到了同样的例外,并且发现我已经导入了com.amazonaws.services.s3.model.S3Event .
将方法handleRequest()的返回类型设为Object,也可以返回“Hello” .