2017-09-13 350 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存儲庫。