2016-02-09 23 views
10

को पुनः प्राप्त करने में बेहद धीमा है। मेरे पास एक लैम्ब्डा फ़ंक्शन है जिसे प्रत्येक बार निष्पादित किए जाने पर S3 से फ़ाइल को पढ़ने की आवश्यकता होती है।
फ़ाइल बहुत छोटी है, लगभग 200 बाइट्स, एस 3 बाल्टी यूएस मानक क्षेत्र में है, लैम्ब्डा फ़ंक्शन हमारे पूर्व-1 क्षेत्र (इसलिए एक ही क्षेत्र) में है। फ़ाइल को पढ़ने के लिए इसमें 10 से 15 सेकंड लगते हैं, यह कितना धीमा है?एडब्ल्यूएस लैम्ब्डा समारोह एस 3 फ़ाइल

धन्यवाद।

संपादित करें: कुछ कोड

long start = System.nanoTime(); 
AmazonS3Client s3Client = new AmazonS3Client(); 
S3Object propertyFile = null; 
try { 
    propertyFile = s3Client.getObject(S3_BUCKET_NAME, S3_PROPERTY_FILE); 
} catch (Exception e) {...} 
try (InputStream in = propertyFile.getObjectContent()) { 
    PROPERTIES.load(in); 
} catch (Exception e) {...} 
LOGGER.debug("S3 access " + (System.nanoTime() - start)); 

संपादित करें # 2: ब्रूक्स 'सुझाव के बाद मुझे

AmazonS3Client s3Client = new AmazonS3Client(new InstanceProfileCredentialsProvider()); 

किया और मैं इस त्रुटि मिलती है:

Unable to load credentials from Amazon EC2 metadata service 

संपादित # 3:
लैम्ब्डा फ़ंक्शन को आवंटित स्मृति 256MB थी, जब मैं 1024 एमबी आवंटित करता था, यह टा केईएस 3-4 सेकंड जो अभी भी बहुत धीमी है (जब मैं अपने कंप्यूटर से स्थानीय रूप से परीक्षण करता हूं तो इसमें लगभग 1-2 सेकंड लगते हैं)।

+0

जो व्यक्ति मतदान करता है वह शायद कारण बता सकता है। –

+0

AmazonS3Client को तुरंत चालू करते समय InstanceProfileCredentialsProvider निर्दिष्ट करने का प्रयास करें। डिफ़ॉल्ट कन्स्ट्रक्टर को (इस क्रम में) पर्यावरण चर, सिस्टम गुण, क्रेडेंशियल्स फ़ाइल और फिर इंस्टेंस प्रोफाइल के माध्यम से प्राधिकरण का प्रयास करने की आवश्यकता है। तो, आपकी पसंदीदा प्राधिकरण विधि आखिरी है। मुझे नहीं लगता कि यह काफी समय लगेगा, हालांकि इसे एक शॉट दें और मुझे बताएं। – Brooks

+0

क्षमा करें, मुझे गलती हुई थी। मैंने सोचा था कि लैम्ब्डा कंटेनर इंस्टेंसप्रोफाइल के साथ भेज दिए गए हैं (मुझे पता नहीं लगा कि यह क्यों नहीं होगा)। ऐसा लगता है कि यह पर्यावरण चर (http://stackoverflow.com/questions/32275169/aws-lambda- कस्टम-triggers) में निर्दिष्ट प्रमाण पत्र के साथ जहाजों। AmazonS3Client को तुरंत चालू करते समय निर्दिष्ट करें (नया पर्यावरण VariableCredentialsProvider())। भले ही यह डिफ़ॉल्ट कन्स्ट्रक्टर का उपयोग करते समय चेक किए गए प्रमाण-पत्रों की सूची में पहला आइटम है, लेकिन यह कोशिश करने के लिए चोट नहीं पहुंचा सकता है। हमें बताऐ। – Brooks

उत्तर

1

क्या मेरा सुझाव है ProfileCredentialsProvider उपयोग करने के लिए और लैम्ब्डा समारोह फांसी के बीच S3 ग्राहक उदाहरण कैश करने के लिए है:

public class MyLambda { // No matter you implement standard AWS SDK interfaces or not 

    private final AmazonS3Client s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); 

    public String sayHello(Request request, Context context) { 
     S3Object s3Obj = s3Client.getObject(request.getBucket(), request.getKey()); 
     return S3Utils.getContent(s3Object); // Some util which retrieves object content 
    } 
} 

बात यह है कि यह S3 ग्राहक जो कनेक्शन पूल और अन्य प्रबंधन करता है स्थापित करने के लिए कुछ समय लगता है संसाधनों।

+0

'ProfileCredentialsProvider' आपके फ़ंक्शन को आपके द्वारा असाइन की गई भूमिका अनुमतियों के साथ काम करता है। – Nazar

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