2015-12-10 6 views
6

मैं (आदि async, अनुरोध,) एक लैम्ब्डा कि मॉड्यूल का उपयोग करता हैएडब्ल्यूएस lambdas के साथ किसी भी 3 पार्टी मॉड्यूल

Unable to import module 'index': Error 
at Function.Module._resolveFilename (module.js:338:15) 
at Function.Module._load (module.js:280:25) 
at Module.require (module.js:364:17) 
at require (module.js:380:17) 
at Object.<anonymous> (/var/task/index.js:1:63) 
at Module._compile (module.js:456:26) 
at Object.Module._extensions..js (module.js:474:10) 
at Module.load (module.js:356:32) 
at Function.Module._load (module.js:312:12) 
at Module.require (module.js:364:17) 

नमूना कोड पर काम कर रहा हूँ का उपयोग करने में असमर्थ:

var 
    AWS = require('aws-sdk'), 
    util = require('util'), 
    request = require('request'); 

exports.handler = function(event, context) { 
    console.log('test'); 
    context.done(); 
}; 

यह काम करता है ठीक है (मुद्रित परीक्षण) जब तक कोई तृतीय पक्ष मॉड्यूल (aws-sdk के अलावा) की आवश्यकता होती है। जैसे ही मैं बस एक लाइन जोड़ता हूं जैसे:

require('request') // or async, config and so on 

यह उपरोक्त त्रुटि के साथ विफल रहता है। मैंने बिना किसी भाग्य के पूर्ण पथ को निर्दिष्ट करके इन मॉड्यूल को सीधे कॉल करने का प्रयास किया है। यह require पर कॉल करते समय गलत निर्देशिका को देखने जैसा है।

सांत्वना पैदावार में process.env डम्पिंग:

PATH: '/usr/local/bin:/usr/bin:/bin', 
LAMBDA_TASK_ROOT: '/var/task', 
LAMBDA_RUNTIME_DIR: '/var/runtime', 
AWS_REGION: 'us-west-2', 
AWS_DEFAULT_REGION: 'us-west-2', 
AWS_LAMBDA_LOG_GROUP_NAME: '/aws/lambda/Thumbnailer', 
AWS_LAMBDA_LOG_STREAM_NAME: '2015/12/10/[$LATEST]3f8ef236195448c88f206634bde6301b', 
AWS_LAMBDA_FUNCTION_NAME: 'Thumbnailer', 
AWS_LAMBDA_FUNCTION_MEMORY_SIZE: '512', 
AWS_LAMBDA_FUNCTION_VERSION: '$LATEST', 
NODE_PATH: '/var/runtime:/var/task:/var/runtime/node_modules', 

यहाँ module मैं बंद काम कर रहा था है - जाहिर है इस कुछ बिंदु पर काम करता था लेकिन मेरे लिए नहीं है।

विचार? मुझे लगता है कि मुझे यहां कुछ लैम्बास के लिए अद्वितीय कॉन्फ़िगरेशन याद आ रही है।

+0

आप अपने लैम्ब्डा तैनाती पैकेज का वर्णन कर सकते हैं? – James

+0

@ जेम्स - मैं फ़ाइलों को ज़िप करता हूं (फ़ोल्डर नहीं)। लैम्ब्डा ठीक चल रहा है, बस उस मॉड्यूल का उपयोग नहीं कर सकता। – cyberwombat

+0

खैर - मुझे कहना चाहिए कि यह त्रुटियों को फेंक नहीं देता है, लेकिन कुछ भी नहीं होता क्योंकि यह केवल कॉलबैक है, इसलिए शायद अन्य मुद्दा। – cyberwombat

उत्तर

9

ओएमजी दर्दनाक था ... यह पता चला है कि ओएसएक्स उपयोगकर्ता द्वारा केवल node_modules फ़ोल्डर को पठनीय बनाता है और एडब्ल्यूएस इसे पढ़ नहीं सकता है। node_modules फ़ोल्डर और दुनिया द्वारा पठनीय सामग्री बनाएं और यह काम करता है। मुझे यकीन नहीं है कि सभी ओएसएक्स सेटअप एक ही प्रतिक्रिया करते हैं। मैं nvm का उपयोग कर रहा हूं जो अपराधी हो सकता है।

अद्यतन। मैं सभी फ़ाइलों को 0666 पर सेट करता था लेकिन निष्पादन योग्य के साथ मुद्दों में भाग गया। यहां एक छोटी सी लिपि है जो चीजों को सही तरीके से संबोधित करेगी। यह सभी फ़ाइलों को 0666 पर सेट करेगा जब तक निष्पादन योग्य या कोई निर्देशिका 0777। (ऐसा न करने के निहितार्थ के लिए सावधान रहना है!) प्रोजेक्ट फ़ोल्डर के भीतर से इस चलाएँ:

यहाँ एक question से एक स्क्रिप्ट मैं तैनात है:

#!/bin/bash 
find . \ 
'(' -perm -0700 -exec chmod 0777 '{}' + ')' -o \ 
'(' -perm -0600 -exec chmod 0666 '{}' + ')' 
+1

मैंने अभी इस समस्या का अनुभव किया लेकिन अनुमतियां पहले से ही विश्व-पठनीय थीं। कारण या फिक्स पर कोई अन्य विचार? – ken

+2

@ken जेम्स द्वारा टिप्पणी देखें - सुनिश्चित करें कि आप एक फ़ोल्डर को ज़िप नहीं करते लेकिन व्यक्तिगत फाइलें हैं। – cyberwombat

+0

मैं सिर्फ नोड-लैम्ब्डा कोड देख रहा था और ऐसा लगता है कि यह कोड निर्देशिका में प्रत्येक फ़ाइल के माध्यम से पुनरावृत्त करता है और प्रत्येक को एक ज़िप में रखता है। असल में गैर-खिड़कियों के लिए यह देशी ज़िप पर खुलता है लेकिन एक ही परिणाम। एक कॉन्फ़िगरेशन विकल्प प्रतीत नहीं होता है लेकिन असल में मैंने सोचा होगा कि यह सही व्यवहार है। यही है ना – ken

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