本文介紹了在Java中使用Lambda函數(shù)的AWS S3事件通知的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我正在嘗試使用Lambda函數(shù)進行S3 PUT事件通知。一旦我將任何新的JSON文件放入/添加到S3存儲桶中,就應(yīng)該調(diào)用我的Lambda函數(shù)。
我面臨的挑戰(zhàn)是沒有足夠的文檔來用Java實現(xiàn)這樣的Lambda函數(shù)。我找到的大部分文檔都是Node.js的
我希望,應(yīng)該調(diào)用我的Lambda函數(shù),然后在Lambda函數(shù)內(nèi)部,我希望使用添加的JSON,然后將該JSON發(fā)送到AWS ES服務(wù)。
但是我應(yīng)該為此使用哪些所有類呢?有人知道這件事嗎?S3和ES均已安裝并運行。lambda的自動生成代碼是
`
@Override
public Object handleRequest(S3Event input, Context context) {
context.getLogger().log("Input: " + input);
// TODO: implement your handler
return null;
}
下一步是什么??
推薦答案
最后,以下是使用JAVA集成S3–>Lambda–>ES的步驟。
-
在AWS上創(chuàng)建您的S3、Lamba和ES。步驟為here。
在lambda函數(shù)中使用以下Java代碼獲取S3中新添加的對象并將其發(fā)送到ES服務(wù)。
public Object handleRequest(S3Event input, Context context) {
AmazonS3Client s3Client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());
for (S3EventNotificationRecord record : input.getRecords()) {
String s3Key = record.getS3().getObject().getKey();
String s3Bucket = record.getS3().getBucket().getName();
context.getLogger().log("found id: " + s3Bucket+" "+s3Key);
// retrieve s3 object
S3Object object = s3Client.getObject(new GetObjectRequest(s3Bucket, s3Key));
InputStream objectData = object.getObjectContent();
//Start putting your objects in AWS ES Service
String esInput = "Build your JSON string here using S3 objectData";
HttpClient httpClient = new DefaultHttpClient();
HttpPut putRequest = new HttpPut(AWS_ES_ENDPOINT + "/{Index_name}/{product_name}/{unique_id}" );
StringEntity input = new StringEntity(esInput);
input.setContentType("application/json");
putRequest.setEntity(input);
httpClient.execute(putRequest);
httpClient.getConnectionManager().shutdown();
}
return "success";}
使用Postman或Sense在ES中創(chuàng)建實際的索引&;對應(yīng)映射。
完成后,下載并在您的計算機上運行proxy.js。確保設(shè)置本post
中建議的ES安全步驟
通過從您的計算機運行http://localhost:9200/_plugin/kibana/URL測試安裝程序和Kibana。
全部設(shè)置完畢。去吧,把你的儀表盤放在基巴納。通過在S3存儲桶中添加新對象來測試它
這篇關(guān)于在Java中使用Lambda函數(shù)的AWS S3事件通知的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,