[英]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.