2017-09-13 351 views
2

我想开发一个AWS lambda函数,当某个文件出现在特定的s3存储桶中时,会触发它。我试图从AWS Lambda documentation开始,使用aws-java-sdk-lambda 1.11.192,aws-java-sdk-s3 1.11.192。但是,不幸的是,这些示例使用RequestHandler,它在最新版本的jar中不推荐使用。AWS使用AWS的Lambda和S3集成Java Sdk

我的代码类似于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"; 
    } 

    } 
} 

当前版本的AWS SDK为拉姆达不含 -

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

我有什么办法?我怎样才能使用他们的SDK的更新版本来实现类似的功能。

回答

2

您不需要实现其辅助库中提供的接口RequestHandler。只要输入和输出参数可以正确序列化,任何方法都可以工作。

有关更多详细信息,请参阅此article

如果你想用自己的助手库,使用下面的依赖坐标:

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

而且对于S3事件帮手:

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

它并不位于内的主要aws-java-sdk而是具有其own存储库。