簡體   English   中英

使用Java中的Lambda函數的AWS S3事件通知

[英]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實例的各種示例。

有些人似乎選擇了以下項目:

Jest - Elasticsearch Java Rest Client

最后,以下是使用Java進行S3 - > Lambda - > ES集成的步驟。

  1. 在AWS上創建S3,Lamba和ES。 步驟在這里
  2. 在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";} 
  3. 使用Postman或Sense在ES中創建實際索引和相應的映射。

  4. 完成后,在您的計算機上下載並運行proxy.js . 在這建議一定要設置ES安全步驟

  5. 通過從您的計算機運行http:// localhost:9200 / _plugin / kibana / URL來測試設置和Kibana。

  6. 一切都准備好了。 繼續在Kibana設置儀表板。 通過在S3存儲桶中添加新對象來測試它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM