2017-09-13 19 views
2

Ich versuche, eine AWS-Lambda-Funktion zu entwickeln, die ausgelöst wird, wenn eine Datei in einem bestimmten S3-Bucket angezeigt wird. Ich versuche, den Beispielen von AWS Lambda documentation zu folgen, mit aws-java-sdk-lambda 1.11.192, aws-java-sdk-s3 1.11.192. Aber leider verwenden diese Beispiele RequestHandler, das in der neuesten Version des Jar veraltet ist.AWS Lambda und S3 Integration mit AWS Java Sdk

Mein Code ist ähnlich this example

package example; 

import java.net.URLDecoder; 

import com.amazonaws.services.lambda.runtime.Context; 
import com.amazonaws.services.lambda.runtime.RequestHandler; 
import com.amazonaws.services.lambda.runtime.events.S3Event; 
import com.amazonaws.services.s3.AmazonS3; 
import com.amazonaws.services.s3.AmazonS3Client; 
import com.amazonaws.services.s3.event.S3EventNotification.S3EventNotificationRecord; 

public class S3GetTextBody implements RequestHandler<S3Event, String> { 

public String handleRequest(S3Event s3event, Context context) { 
    try { 
     S3EventNotificationRecord record = s3event.getRecords().get(0); 

     // Retrieve the bucket & key for the uploaded S3 object that 
     // caused this Lambda function to be triggered 
     String bkt = record.getS3().getBucket().getName(); 
     String key = record.getS3().getObject().getKey().replace('+', ' '); 
     key = URLDecoder.decode(key, "UTF-8"); 

     // Read the source file as text 
     AmazonS3 s3Client = new AmazonS3Client(); 
     String body = s3Client.getObjectAsString(bkt, key); 
     System.out.println("Body: " + body); 
     return "ok"; 
    } catch (Exception e) { 
     System.err.println("Exception: " + e); 
     return "error"; 
    } 

    } 
} 

Die aktuelle Version des aws sdk für Lambda enthält nicht -

import com.amazonaws.services.lambda.runtime.Context; 
import com.amazonaws.services.lambda.runtime.RequestHandler; 
import com.amazonaws.services.lambda.runtime.events.S3Event; 

Was meine Alternativen? Wie erreiche ich ähnliche Funktionalität mit den neueren Versionen ihrer SDK?

Antwort

2

Sie müssen die RequestHandler-Schnittstelle, die in ihrer Hilfsbibliothek bereitgestellt wird, nicht implementieren. Jede Methode funktioniert, vorausgesetzt, die Eingabe- und Ausgabeparameter können ordnungsgemäß serialisiert werden.

Weitere Einzelheiten finden Sie unter article.

Wenn Sie ihre Helfer Bibliothek verwenden möchten, verwenden Sie die folgende Abhängigkeit Koordinaten:

<groupId>com.amazonaws</groupId> 
<artifactId>aws-lambda-java-core</artifactId> 
<version>1.1.0</version> 

Und für die S3-Ereignis Helfer:

<groupId>com.amazonaws</groupId> 
<artifactId>aws-lambda-java-events</artifactId> 
<version>1.3.0</version> 

Es ist nicht in ihrem Haupt aws-java-sdk gelegen, sondern hat sein own Repository.