2016-12-20 5 views
6

मैं एस 3 पुट इवेंट अधिसूचना के लिए लैम्ब्डा फ़ंक्शन का उपयोग करने की कोशिश कर रहा हूं। एक बार जब मैं अपनी एस 3 बाल्टी में कोई नई JSON फ़ाइल डालता/जोड़ता हूं तो मेरा लैम्ब्डा फ़ंक्शन कॉल किया जाना चाहिए। मेरी चुनौती जावा में ऐसे लैम्ब्डा फ़ंक्शन को लागू करने के लिए पर्याप्त दस्तावेज नहीं है। मुझे मिले अधिकांश दस्तावेज़ Node.jsजावा में लैम्ब्डा फ़ंक्शन का उपयोग करके एडब्ल्यूएस एस 3 इवेंट अधिसूचना

मैं चाहता हूं कि, मेरा लैम्ब्डा फ़ंक्शन कॉल किया जाना चाहिए और उसके बाद उस लैम्ब्डा फ़ंक्शन के अंदर, मैं उस जेसन को जोड़ना चाहता हूं और फिर उस JSON को AWS ES सेवा में भेजना चाहता हूं।

लेकिन इसके लिए मुझे किन वर्गों का उपयोग करना चाहिए? किसी के बारे में इस बारे में कोई विचार है? एस 3 एबीडी ईएस सभी सेटअप और चल रहे हैं। स्वचालित रूप से जेनरेट लैम्ब्डा के लिए कोड `

@Override 
public Object handleRequest(S3Event input, Context context) { 
    context.getLogger().log("Input: " + input); 

    // TODO: implement your handler 
    return null; 
} 

है आगे क्या ??

+1

ठीक है, इसे आग लगाना! इसे सक्रिय करें और एक फ़ाइल अपलोड करें। आपको आवश्यक पहली "कक्षा" सिर्फ आपकी आंखों की है - लॉग इन इनपुट पर नज़र डालें। बाकी उसके बाद स्पष्ट हो जाना चाहिए। इनपुट एक [एस 3 घटना अधिसूचना] होना चाहिए (http://docs.aws.amazon.com/AmazonS3/latest/dev/notification-content-structure.html) आपको बस अपलोड की गई वस्तु के बारे में बता रहा है। –

उत्तर

0

अंत में, यहाँ S3 के लिए चरण हैं -> लैम्ब्डा -> ES एकीकरण का उपयोग कर जावा।

  1. अपने एस 3, लैम्बा और ईएस को एडब्ल्यूएस पर बनाया गया है। चरण here हैं।
  2. एस 3 में एक नई जोड़ा वस्तु लाने के लिए अपने लैम्ब्डा फ़ंक्शन में जावा कोड के नीचे उपयोग करें और इसे 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. उपयोग या तो डाकिया या नब्ज ES में वास्तविक सूचकांक & इसी मानचित्रण नहीं बना।

  4. एक बार हो गया, डाउनलोड करें और proxy.js अपनी मशीन पर चलाएं। आपकी मशीन से http://localhost:9200/_plugin/kibana/ यूआरएल चलाकर सुनिश्चित करें कि आपने ES सुरक्षा इस post

  5. स्थापना परीक्षण और Kibana में सुझाए गए चरणों बनाओ।

  6. सभी सेट है। आगे बढ़ें और किबाना में अपना डैशबोर्ड सेट करें। अपने एस 3 बाल्टी में नई वस्तुओं को जोड़कर इसका परीक्षण करें

4

लैम्ब्डा में एस 3 घटनाओं को संभालना किया जा सकता है, लेकिन आपको ध्यान रखना होगा, S3Event ऑब्जेक्ट केवल ऑब्जेक्ट के संदर्भ को स्थानांतरित करता है, न कि ऑब्जेक्ट स्वयं। वास्तविक वस्तु को प्राप्त करने के लिए आपको स्वयं को एडब्ल्यूएस एसडीके का आह्वान करना होगा। बल्कि कठिन हिस्सा ElasticSearch में इस वस्तु को सम्मिलित करने के

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; 
} 

अब: एक लैम्ब्डा समारोह के भीतर एक S3 वस्तु का निवेदन इस प्रकार दिखाई देगा। अफसोस की बात है कि एडब्ल्यूएस एसडीके इसके लिए कोई काम नहीं करता है। डिफ़ॉल्ट दृष्टिकोण एडब्ल्यूएस ईएस एंडपॉइंट के खिलाफ आरईएसटी कॉल करना होगा। लोचदार खोज उदाहरण को कॉल करने के साथ आगे बढ़ने के तरीके पर विभिन्न नमूने हैं।

कुछ लोगों को निम्नलिखित परियोजना के साथ जाने के लिए लग रहे हैं:

Jest - Elasticsearch Java Rest Client

+0

धन्यवाद जेन्स। मैंने आसान हिस्सा भी पूरा किया और मुश्किल से संघर्ष कर रहा था। ईएस को संदेश जोड़ने के लिए केवल जेस्ट का उपयोग करने का प्रयास कर रहा है। लेकिन किसी भी तरह ऐसा लगता है कि उस हिस्से में गुम है। खोज, इत्यादि जैसी सब कुछ दिखाया गया है। लेकिन दस्तावेज़ जोड़ें नहीं। नीचे पंक्ति मुझे त्रुटि दे रही है 'DocumentMapper documentMapper = new DocumentMapper.builder ("groupId", null, rootObjectMapperbuilder) .build (null); ' – NGR

+1

ईमानदार होने के लिए, मैंने कभी भी दस्तावेज़मैपर का उपयोग नहीं किया, क्योंकि इस चरण को केवल निष्पादित किया जाना है एक बार, मैं आमतौर पर किबाना जीयूआई के माध्यम से अपना मैपिंग उत्पन्न करता हूं। इसके अलावा, मैंने केवल इंडेक्स में दस्तावेज़ जोड़ने के लिए एपीआई का उपयोग किया था। –

+0

आपकी मदद जेन्स के लिए धन्यवाद। मैंने रीस्ट एपीआई के लिए अपाचे HTTP का उपयोग किया और पोस्टमैन का उपयोग करके, मेरी अनुक्रमणिका और मैपिंग बनाएं। यह काम कर रहा है। – NGR

संबंधित मुद्दे