AWS लाम्बा में npm मॉड्यूल कैसे लोड करें?


147

मैंने वेब आधारित संपादक का उपयोग करके कई लैम्ब्डा फ़ंक्शन बनाए हैं। अब तक सब ठीक है। अब मैं उन मॉड्यूल (जैसे वादों के लिए क्यू) के साथ विस्तार करना शुरू करना चाहता हूं। मैं यह पता नहीं लगा सकता कि मॉड्यूल को लैम्ब्डा से बाहर कैसे निकाला जाए ताकि वे मेरे कार्यों से भस्म हो सकें।

मैं इस माध्यम से पढ़ा है, लेकिन यह एक EC2 की स्थापना और वहाँ से लंबोदा कार्यों को शामिल करने के लिए लगता है। फ़ंक्शन बनाते समय ज़िप को अपलोड करने के लिए एक तंत्र है, लेकिन यह स्थानीय स्तर पर विकसित कार्यों को भेजने में शामिल लगता है। चूंकि मैं वेब आधारित संपादक में काम कर रहा हूं जो एक अजीब कार्यप्रवाह की तरह लगता है।

मैं केवल अपने लैम्बडा कार्यों में उपयोग के लिए कुछ मॉड्यूल कैसे तैनात कर सकता हूं?


7
यह सब यहाँ डॉक्स में स्पष्ट किया गया है - डॉक्स.समेसन.कॉम
लेम्बडा

जवाबों:


196

आप किसी .zipफ़ाइल को अपलोड किए बिना एनपीएम मॉड्यूल को लोड नहीं कर सकते , लेकिन आप वास्तव में इस प्रक्रिया को दो त्वरित कमांड लाइनों तक ले जा सकते हैं।

ऐसे:

  1. अपनी लैम्ब्डा फंक्शन फाइल को अलग निर्देशिका में रखें। ऐसा इसलिए है क्योंकि आप npmस्थानीय स्तर पर लैंबडा के लिए पैकेज स्थापित करते हैं और आप लैम्ब्डा को जो भी अपलोड करेंगे, उसे अलग करने और परीक्षण करने में सक्षम होना चाहते हैं।

  2. npm install packageNameजब आप चरण # 1 में बनाए गए अपने अलग लैम्ब्डा निर्देशिका में हों, तो स्थानीय रूप से अपने एनपीएम पैकेजों को स्थापित करें ।

  3. सुनिश्चित करें कि आपका फ़ंक्शन स्थानीय रूप से चलने पर काम करता है: node lambdaFunc.js(आप export.handlerस्थानीय रूप से नोड के साथ चलने के लिए अपने कोड को अनुकूलित करने के लिए अपने कोड में दो पंक्तियों को टिप्पणी कर सकते हैं )।

  4. लैम्ब्डा की निर्देशिका पर जाएं और सामग्रियों को संपीड़ित करें , सुनिश्चित करें कि निर्देशिका को शामिल करें ।

    zip -r lambdaFunc.zip .
    
  5. यदि आपके पास aws-cliस्थापित है, जो मैं सुझाव देता हूं कि यदि आप अपने जीवन को आसान बनाना चाहते हैं, तो अब आप इस आदेश को दर्ज कर सकते हैं:

    aws lambda update-function-code --function-name lambdaFunc \
    --zip-file fileb://~/path/to/your/lambdaFunc.zip
    

    (मामले में लांबडाफंक के आसपास कोई उद्धरण नहीं, जैसा कि आप जानते हैं कि मैंने किया था)

  6. अब आप लैम्ब्डा कंसोल में टेस्ट पर क्लिक कर सकते हैं ।

  7. मैं उपरोक्त दोनों कमांड के लिए एक छोटा उपनाम जोड़ने का सुझाव देता हूं। यहाँ मैं लम्बे समय तक अद्यतन कमांड के लिए मेरा क्या है:

    alias up="aws lambda update-function-code --function-name lambdaFunc \
    --zip-file fileb://~/path/to/your/lambdaFunc.zip"
    

10
आपको स्पष्ट रूप से उस क्षेत्र को बताने की आवश्यकता हो सकती है जिसे आप लक्षित कर रहे हैं:aws lambda update-function-code --function-name lambdaFunc --region eu-west-1 --zip-file fileb://~/path/to/your/lambdaFunc.zip
ग्रीनस्टररॉक्स

2
हालांकि यह एक बहुत अधिक काम की तरह लगता है, इसके माध्यम से जाने के लिए, यह वास्तव में इन लंबो भावों के निर्माण का एक बेहतर तरीका है ... बहुत बहुत धन्यवाद!
माइक पेरेनॉउड

9
इन चरणों का उपयोग करते हुए मुझे --zip-file fileb://बनाम का उपयोग करना पड़ा--zip-file file://
मैक्लोविन

2
सुनिश्चित करें कि आप केवल निर्देशिका की सामग्री को ज़िप करते हैं , और यह कि आप इसे CLI से करते हैं (मैक के खोजक से 'सेक' कमांड का उपयोग नहीं करेंगे )।
यारिन

2
इस सुपर उपयोगी था .. कम से कम दो बातें मेरे लिए यह काम करने के लिए ... 1) यह था लापता थे --zip-file fileb:बजाय fileमेरे लिए। 2) MacOS पर यह 3 स्लैश के साथ लगता है जैसेfileb:///Users/wio/Documents
टोबि

30

लैम्ब्डा .zipमें एनपीएम मॉड्यूल शामिल करने के लिए एक फ़ाइल की आवश्यकता होती है । और आपको वास्तव में किसी भी चीज़ के लिए लम्बे वेब संपादक का उपयोग नहीं करना चाहिए- जैसा कि किसी भी उत्पादन कोड के साथ, आपको स्थानीय रूप से विकसित होना चाहिए, जीआईटी के लिए प्रतिबद्ध होना चाहिए, आदि।

मेरा बहाव:

1) मेरे लैम्ब्डा कार्य आमतौर पर एक बड़ी परियोजना के लिए सहायक उपयोगिताओं हैं, इसलिए मैं उन्हें घर देने के लिए एक / aws / lambdas निर्देशिका बनाता हूं।

2) प्रत्येक व्यक्तिगत लैम्ब्डा डायरेक्टरी में एक इंडेक्स.जेएस फाइल होती है जिसमें फंक्शन कोड होता है, एक पैकेजजसन फाइल डिपेंडेंसी निर्भरता, और एक / नोड_मॉड्यूल उपनिर्देशिका। (Package.json फ़ाइल का उपयोग लैम्ब्डा द्वारा नहीं किया गया है, यह सिर्फ इसलिए है ताकि हम स्थानीय रूप से npm installकमांड चला सकें ।)

package.json:

{
  "name": "my_lambda",
  "dependencies": {
    "svg2png": "^4.1.1"
  }
}

3) I .ignignore सभी node_modules निर्देशिका और .zip फ़ाइलों को बनाता है ताकि npm से उत्पन्न फाइलें संस्थापित हो और ज़िपिंग हमारे रेपो को अव्यवस्थित न करें।

.gitignore:

# Ignore node_modules
**/node_modules

# Ignore any zip files
*.zip

4) मैं npm installमॉड्यूल स्थापित करने के लिए निर्देशिका के भीतर से चलाता हूं , और फ़ंक्शन को स्थानीय रूप से विकसित / परीक्षण करता हूं ।

5) I। लैम्बडा डायरेक्टरी को .zip करें और कंसोल के माध्यम से अपलोड करें।

( महत्वपूर्ण: फ़ाइल को ज़िप करने के लिए फाइंडर से मैक की 'कंप्रेस' उपयोगिता का उपयोग न करें! आपको CLI से डायरेक्टरी के रूट से ज़िप को चलाना चाहिए- यहां देखें )

zip -r ../yourfilename.zip * 

ध्यान दें:

यदि आप अपने मैक पर स्थानीय रूप से नोड मॉड्यूल स्थापित करते हैं, तो आप समस्याओं में भाग सकते हैं, क्योंकि लैम्बडा के लिनक्स-आधारित वातावरण में तैनात होने पर कुछ प्लेटफ़ॉर्म-विशिष्ट मॉड्यूल विफल हो सकते हैं। (देखें https://stackoverflow.com/a/29994851/165673 )

समाधान एएमआई से लॉन्च किए गए ईसी 2 उदाहरण पर मॉड्यूल को संकलित करना है जो लैंबडा नोड.जेएस रनटाइम के साथ मेल खाता है जो आप उपयोग कर रहे हैं (लैंबडा रनटाइम की सूची और उनके संबंधित एएमआई देखें )।


Node.js में AWS लाम्बा तैनाती पैकेज भी देखें - AWS लाम्बा


16

अब आप इस मामले के लिए लैम्ब्डा लेयर्स का उपयोग कर सकते हैं। बस आपको आवश्यक पैकेज वाली एक परत जोड़ें और यह पूरी तरह से चलेगा।

इस पोस्ट का अनुसरण करें: https://medium.com/@anjanava.biswas/nodejs-runtime-environment-with-aws-lambda-layers-f3914613e20e


9

आशा है कि यह मदद करता है, Serverless फ्रेमवर्क के साथ आप कुछ इस तरह से कर सकते हैं:

  1. अपनी serverless.yml फ़ाइल में इन चीजों को जोड़ें:

plugins: - serverless-webpack custom: webpackIncludeModules: forceInclude: - <your package name> (for example: node-fetch) 2. फिर अपना लैम्ब्डा फ़ंक्शन बनाएं, इसे द्वारा परिनियोजित करें serverless deploy, जिसमें serverless.yml में शामिल पैकेज आपके लिए होगा।

सर्वर रहित के बारे में अधिक जानकारी के लिए: https://serverless.com/framework/docs/providers/aws/guide/quick-start/


आपको इसे स्थापित करने की आवश्यकता हैserverless plugin install --name pluginName
Liad Livnat

1

एनपीएम मॉड्यूल को आपके नोडज पैकेज के अंदर बंडल करना होगा और एडब्ल्यूएस लैंबडा लेयर्स को जिप के रूप में अपलोड करना होगा, फिर आपको नीचे दिए गए अपने मॉड्यूल / जेएस को संदर्भित करना होगा और इसके लिए उपलब्ध तरीकों का उपयोग करना होगा। const mymodule = आवश्यकता ('/ ऑप्ट / नोडज / MyLogger');

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.