2015-12-10 15 views
6

tôi đang làm việc trên lambda mà làm cho sử dụng các module (async, theo yêu cầu, vv) mãKhông thể sử dụng bất kỳ mô-đun bên thứ 3 với AWS Lambdas

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) 

mẫu:

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

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

Nó hoạt động tốt (in thử nghiệm) miễn là không có mô-đun bên thứ 3 (ngoài aws-sdk) được yêu cầu. Ngay sau khi tôi chỉ thêm một dòng như:

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

Lỗi này không thành công. Tôi đã cố gắng gọi các mô-đun này trực tiếp bằng cách xác định đường dẫn đầy đủ mà không có may mắn. Nó giống như việc nhìn vào thư mục sai khi gọi số require.

bán phá giá process.env trong giao diện điều khiển sản lượng:

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', 

Đây là module Tôi đã làm việc ra - rõ ràng này đã từng làm việc tại một số điểm nhưng không cho tôi.

Ý tưởng? Tôi cảm thấy rằng tôi thiếu một số cấu hình duy nhất cho lambdas ở đây.

+0

bạn có thể miêu tả gói triển khai lambda của bạn? – James

+0

@James - Tôi nén các tệp (không phải thư mục). Lambda dường như chạy tốt, không thể sử dụng mô-đun đó. – cyberwombat

+0

Vâng - Tôi nên nói nó không ném lỗi nhưng không có gì xảy ra kể từ khi nó chỉ gọi lại vì vậy có lẽ vấn đề khác. – cyberwombat

Trả lời

9

omg đã gây đau đớn ... Chỉ ra rằng OSX làm cho thư mục node_modules chỉ đọc được bởi người dùng và AWS không thể đọc nó. Làm cho nội dung và thư mục node_modules có thể đọc được trên thế giới và nó hoạt động. Tôi không chắc liệu tất cả các thiết lập OSX có phản ứng giống nhau hay không. Tôi đang sử dụng nvm có thể là thủ phạm.

Cập nhật. Tôi đã từng đặt tất cả các tệp thành 0666 nhưng gặp sự cố với tệp thi hành. Đây là một kịch bản nhỏ sẽ giải quyết mọi thứ một cách chính xác. Nó sẽ đặt tất cả các tệp thành 0666 trừ khi thực thi hoặc một thư mục trong trường hợp này là 0777. Chạy này từ bên trong thư mục dự án (hãy cẩn thận của những tác động của việc không làm như vậy!):

Dưới đây là một kịch bản từ một question tôi đã đăng:

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

Tôi chỉ gặp phải sự cố này nhưng quyền đã có thể đọc được trên thế giới. Bất kỳ ý tưởng khác về nguyên nhân hoặc sửa chữa? – ken

+2

@ken xem nhận xét của James - đảm bảo bạn không nén thư mục nhưng tệp riêng lẻ. – cyberwombat

+0

Tôi chỉ đang xem mã lambda nút và có vẻ như nó lặp qua từng tệp trong thư mục mã và đặt từng tệp vào một mã zip duy nhất. Trên thực tế cho không cửa sổ nó vỏ ra để nén bản địa nhưng kết quả tương tự. Có vẻ như không phải là một tùy chọn cấu hình nhưng thực sự tôi đã nghĩ rằng đây là hành vi đúng. Phải không? – ken

Các vấn đề liên quan