2016-04-19 5 views
1

Кто-нибудь успешно реализовал обработчик запросов на основе Java для событий S3?AWS Lambda S3Event deserialization

Мой класс:

package example; 

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

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

Сообщение об ошибке:

Произошла ошибка во время синтаксического анализа JSON: java.lang.RuntimeException java.lang.RuntimeException: Произошла ошибка во время синтаксического анализа JSON Вызванный: Java .io.UncheckedIOException: com.fasterxml.jackson.databind.JsonMappingException: не удается десериализовать экземпляр com.amazonaws.services.s3.model.S3изменить из токена START_OBJECT в [Источник: [email protected]; строка: 1, столбец: 1] Вызвано: com.fasterxml.jackson.databind.JsonMappingException: невозможно десериализовать экземпляр com.amazonaws.services.s3.model.S3изменить токен START_OBJECT в [Источник: lambdainternal.util.NativeMemoryAsInputStream @ 6108b2d7; строка: 1, столбец: 1] в 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)

+0

У вас есть функция Лямбда, настроенная для уведомления непосредственно из ведра S3? Если у вас SNS настроен «посередине», который может вызвать ошибку, которую вы видите, поскольку полезная нагрузка JSON не будет соответствовать. – JaredHatfield

ответ

6

Решение должно было принимать S3EventNotification. Желание, которое было освещено в документации AWS. Мне нравится концепция Lambda, но документации и примеров там мало.

public void mergeGLAU(S3EventNotification notification, Context context) { 
    try { 
     for (S3EventNotificationRecord record : notification.getRecords()) { 
      System.out.println(record.getEventSource()); 
      System.out.println(record.getEventName()); 
      System.out.println(record.getS3().getBucket().getName()); 
      System.out.println(record.getS3().getObject().getKey()); 
     } 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
}