[英]AWS S3 Event notification using Lambda function in Java
我正在嘗試使用Lambda函數進行S3 Put事件通知。 一旦我在S3存儲桶中添加/添加任何新的JSON文件,就應該調用我的Lambda函數。 我遇到的挑戰是沒有足夠的文檔來實現Java中的這種Lambda函數。 我發現的大部分文檔都是針對Node.js的
我想要,我的Lambda函數應該被調用,然后在Lambda函數中,我想使用添加的json,然后將該JSON發送到AWS ES服務。
但是我應該為此使用哪些類? 有人對此有任何想法嗎? S3 abd ES全部設置並運行。 lambda的自動生成代碼是`
@Override
public Object handleRequest(S3Event input, Context context) {
context.getLogger().log("Input: " + input);
// TODO: implement your handler
return null;
}
接下來是什么??
可以在Lambda中處理S3事件,但必須記住,S3Event對象只傳輸對象的引用而不是對象本身。 要獲取實際對象,您必須自己調用AWS SDK。 在lambda函數中請求S3對象如下所示:
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();
//insert object into elasticsearch
}
return null;
}
現在是將此對象插入ElasticSearch的相當困難的部分。 遺憾的是,AWS SDK沒有為此提供任何功能。 默認方法是對AWS ES端點執行REST調用。 有關如何繼續調用ElasticSearch實例的各種示例。
有些人似乎選擇了以下項目:
最后,以下是使用Java進行S3 - > Lambda - > ES集成的步驟。
在lambda函數中使用以下Java代碼在S3中獲取新添加的對象並將其發送到ES服務。
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中創建實際索引和相應的映射。
通過從您的計算機運行http:// localhost:9200 / _plugin / kibana / URL來測試設置和Kibana。
一切都准備好了。 繼續在Kibana設置儀表板。 通過在S3存儲桶中添加新對象來測試它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.