2017-08-27 71 views
12

मैं these tipsमैं सिर्फ 1.20.2

पालन करने के लिए और सिर्फ अपनी समारोह पुनर्वितरित, serverless.yml के रूप में बदल नहीं किया गया था चाहता था Serverless-ढांचे के साथ एक समारोह को तैनात नहीं कर सकते।

हालांकि, यह Serverless: Uploading function चरण पर बस लटकता है। हमेशा के लिए, हमेशा के लिए।

पूरे तैनाती (sls deploy के साथ) धीरे-धीरे काम करता है।

यह कैसे डिबग कर सकता है, क्योंकि स्पष्ट रूप से कोई त्रुटि संदेश नहीं है?

संपादित

जब मैं का उपयोग sls deploy अपने प्रोजेक्ट के बारे में 4 मिनट लगते हैं और 15s तैनात करने के लिए।

यह मेरे लिए काफी लंबा लगता है, इसलिए मैंने सोचा कि मैं sls deploy function -f myFunction का उपयोग करूंगा, जो बहुत तेज़ माना जाता है।

हालांकि, जब मैं sls deploy function -f myFunction का प्रयास करता हूं, तो यह हमेशा Serverless: Uploading function: myFunction पर हमेशा के लिए लटका लगता है।

मुझे नहीं पता कि इसे कैसे डिबग करना है।

ऐसा लगता है कि Serverless: Uploading function: myFunction --verbose के साथ 'वर्बोज़' का उपयोग करना कोई फर्क नहीं पड़ता है, लौटाए गए संदेश समान हैं।

मैं इंतजार करें और देखें कि, अंत में, समारोह तैनाती पूरा करता है की कोशिश करेंगे ...

ठीक है, मैं इंतजार कर रहे थे, और यह नहीं है: के बारे में 8 मिनट 30 के बाद मैं निम्न त्रुटि संदेश मिलता है:

Serverless Error --------------------------------------- Connection timed out after 120000ms Get Support -------------------------------------------- Docs: docs.serverless.com Bugs: github.com/serverless/serverless/issues Forums: forum.serverless.com Chat: gitter.im/serverless/serverless Your Environment Information ----------------------------- OS: linux Node Version: 7.10.0 Serverless Version: 1.20.2

एक और विषमता: जब फांसी, इसे पढ़ता है:

Serverless: Uploading function: myFunction (12.05 MB)...

लेकिन समारोह में ही केवल 3.2 kB है, और किसी भी संकुल शामिल नहीं है।

Serverless: Uploading service .zip file to S3 (12.05 MB)...

क्या मेरी समारोह के साथ गलत हो सकता है की तैनाती:

जब मैं sls deploy का उपयोग, आकार प्रदर्शित किया ही क्या है?

संपादित 2

रूप @dashmug संकेत दिया है, वहाँ serverless.yml में एक config मुद्दा है।

functions मेरे सर्वरलेस प्रोजेक्ट के डीआईआर में, मैं एक आम package.json और node_modules रखना चाहता हूं। फिर प्रत्येक समारोह आवश्यकतानुसार मॉड्यूल आयात कर सकता है।

मैंने the official guide का पालन करने का प्रयास किया।

मेरे serverless.yml इसलिए की तरह है:

functions: 
    myFunction: 
    package: 
     exclude: 
     - 'functions/node_modules/**' 
     - '!functions/node_modules/module1_I_want_to_include/**' 
     - '!functions/node_modules/module2_I_want_to_include/**' 

अब मैं sls deploy साथ, मिलती है:

Serverless: Uploading service .zip file to S3 (31.02 MB)...

और समारोह काम करता है :)

हालांकि, sls deploy function -f myFunction के साथ, मैं मिलता है:

Serverless: Uploading function: dispatch (1.65 MB)...

,210

यह एक उचित समय में अपलोड करता है, लेकिन समारोह अब निम्न त्रुटि देता है:

Unable to import module 'functions/myFunction': Error

+0

उत्तर देने के लिए उत्तर देने में पर्याप्त मदद नहीं है, लेकिन क्या मैं अत्यधिक [एपेक्स] (http://apex.run) पर स्विच करने की सलाह दे सकता हूं? मैं इसे लगभग एक साल तक इस्तेमाल कर रहा हूं और इसमें बहुत कम मुद्दे हैं और वे पूरी तरह से एक फीचर में हैकिंग से हैं जो मैं चाहता था। :) –

+0

ठीक है, धन्यवाद, मैं इसे एक शॉट – Manube

उत्तर

2

आप तैनाती कार्य करने के लिए --verbose तर्क पारित करके तैनाती प्रक्रिया को और अधिक वर्बोज़ बना सकते हैं।

या तो sls deploy --verbose या sls deploy -v चाल करेगा।

+0

धन्यवाद @ जस्टडान्युल दूंगा। मेरा मतलब यह है कि: पूरे प्रोजेक्ट को तैनात करने में कुछ समय लगता है, इसलिए मैंने सोचा कि मैं केवल उस फ़ंक्शन को अपलोड करूंगा जिसे मैंने अपडेट किया था। मैं इसे स्पष्ट बनाने के लिए प्रश्न संपादित करूँगा ... – Manube

4

चीजें मैं पर दिखेगा:

$ SLS_DEBUG=true sls deploy --verbose

और

$ SLS_DEBUG=true sls deploy function -f myFunction --verbose

  • अपने serverless कॉन्फिग की जाँच करें (:

    1. की तुलना क्या दोनों के बीच होता है की कोशिश करो पैक उम्र बढ़ने, आदि) अपनी परियोजना संरचना के खिलाफ। एक लाल झंडा यह है कि कार्य तैनाती सेवा तैनाती जितनी बड़ी है। यह एक गलत कॉन्फ़िगरेशन समस्या हो सकती है।

    2. पैकेज देखने के लिए serverless package का उपयोग करें ताकि यह देखने के लिए कि पैकेज कैसे ज़िपित हैं। यह कुछ सुराग प्रदान कर सकता है।

    3. क्या आप किसी भी प्लगइन का उपयोग कर रहे हैं जो आपके पैकेज के निर्माण के तरीके को बदल सकता है?

    4. कितने node_modules निर्देशिका आपके पास है? क्या आपके पास पूरी सेवा के लिए केवल एक है या प्रत्येक फंक्शन के लिए एक है?

  • +0

    1. इससे मदद नहीं मिली, क्योंकि 'फ़ंक्शन केवल' तैनाती केवल – Manube

    +0

    पर लटकती है 2. आप निश्चित रूप से कुछ पर हैं: यह शायद yaml – Manube

    +0

    में एक पैकेज कॉन्फ़िगरेशन समस्या है 3. हाँ, मैं दो बड़े पैकेज देख सकता था: जिसे 'serverless.zip' कहा जाता है, दूसरा 'myFunction.zip' – Manube

    2

    मैं यह समझने में सक्षम नहीं था कि क्यों कार्य तैनाती (सेवा परिनियोजन के विपरीत) लटका होगा। मैंने अपनी serverless.yml फ़ाइल को गलत कॉन्फ़िगर किया हो सकता है।

    लेकिन कोई बड़ा सौदा नहीं: मैं sls deploy function -myFunction के बिना कर सकता हूं।

    क्योंकि मेरी अपेक्षाएं गलत थीं। मैंने सोचा कि किसी फ़ंक्शन को तैनात करने से किसी सेवा को तैनात करने से तेज़ तरीका होगा, किसी भी तरह से node_modules निर्देशिका को पुन: नियोजित नहीं किया जा सकता है।

    लेकिन एडब्ल्यूएस में कोई आंशिक फ़ंक्शन परिनियोजन नहीं है: जब कोई फ़ंक्शन तैनात किया जाता है, तो फ़ंक्शन के लिए सभी आवश्यक नोड मॉड्यूल को तैनात किया जाना चाहिए।

    रूप serverless doc में विस्तार से बताया:

    The Framework packages up the targeted AWS Lambda Function into a zip file.

    The Framework fetches the hash of the already uploaded function .zip file and compares it to the local .zip file hash.

    The Framework terminates if both hashes are the same.

    That zip file is uploaded to your S3 bucket using the same name as the previous function, which the CloudFormation stack is pointing to.

    मैं था (भोलेपन से) आशा व्यक्त की कि केवल अद्यतन हैंडलर S3 पर अपलोड किया जाएगा। लेकिन चूंकि फ़ंक्शन को तैनाती से पहले पैक किया गया है, इसलिए इसके सभी मॉड्यूल और निर्भरताओं की आवश्यकता है।

    तो जिस तरह से मैं इसे देखता हूं, फ़ंक्शन परिनियोजन केवल समय बचाता है (सेवा परिनियोजन के विपरीत) केवल सेवा के कई कार्य होते हैं, और सेवा फ़ंक्शन कई सामान्य नोडजेज़ मॉड्यूल का उपयोग नहीं करते हैं। और अगर sls deploy function -f myFunction लटका नहीं करता है, वह यह है कि :)


    तो विकास की गति को बढ़ाने के लिए, चाल की तरह serverless offline

    serverless offline एक उपकरण के साथ ऑफ़लाइन अनुकरण का उपयोग है एक स्थानीय सर्वर प्रदान करता है, और लैम्ब्डा समारोह myFunction स्थानीय रूप से सुलभ हो जाता है, Postman में http://localhost:3000/myFunction या ब्राउज़र

    ज्यादातर मामलों में फोन करके, sls deploy, केवल एक बार कहा जा सकता है के बाद हैंडलर अच्छी तरह से ऑफ़लाइन परीक्षण किया गया है।

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