Tôi đang sử dụng Gulp để nén tệp zip và sau đó tải tệp lên AWS Lambda. Tệp zip tải lên được thực hiện thủ công. Chỉ có quá trình nén được xử lý bởi Gulp.aws lambda nodejs - lỗi khi tải lên tệp zip được nén bởi GULP
Đây là gulpfile.js tôi
var gulp = require('gulp');
var zip = require('gulp-zip');
var del = require('del');
var install = require('gulp-install');
var runSequence = require('run-sequence');
var awsLambda = require("node-aws-lambda");
gulp.task('clean', function() {
return del(['./dist', './dist.zip']);
});
gulp.task('js', function() {
return gulp.src('index.js')
.pipe(gulp.dest('dist/'));
});
gulp.task('npm', function() {
return gulp.src('./package.json')
.pipe(gulp.dest('dist/'))
.pipe(install({production: true}));
});
gulp.task('zip', function() {
return gulp.src(['dist/**/*', '!dist/package.json'])
.pipe(zip('dist.zip'))
.pipe(gulp.dest('./'));
});
gulp.task('deploy', function(callback) {
return runSequence(
['clean'],
['js', 'npm'],
['zip'],
callback
);
});
Sau khi chạy nhiệm vụ triển khai, một dist.zip thư mục zip tên được tạo ra bao gồm một tập tin index.js và một thư mục node_modules. Thư mục node_modules chỉ chứa một thư viện lodash.
Đây là index.js
var _ = require('lodash');
console.log('Loading function');
exports.handler = (event, context, callback) => {
//console.log('Received event:', JSON.stringify(event, null, 2));
var b = _.chunk(['a', 'b', 'c', 'd', 'e'], 3);
console.log(b);
callback(null, event.key1); // Echo back the first key value
//callback('Something went wrong');
};
Sau khi sử dụng AWS lambda console để tải lên các thư mục dist.zip. Đã xảy ra lỗi khi không thể tìm thấy thư viện lodash
{
"errorMessage": "Cannot find module 'lodash'",
"errorType": "Error",
"stackTrace": [
"Function.Module._load (module.js:276:25)",
"Module.require (module.js:353:17)",
"require (internal/module.js:12:17)",
"Object.<anonymous> (/var/task/index.js:1:71)",
"Module._compile (module.js:409:26)",
"Object.Module._extensions..js (module.js:416:10)",
"Module.load (module.js:343:32)",
"Function.Module._load (module.js:300:12)",
"Module.require (module.js:353:17)"
]
}
Nhưng trong thư mục zip, có thư mục node_modules chứa lib lodash.
dist.zip
|---node_modules
|--- lodash
|---index.js
Khi tôi nén thư mục node_modules và tệp index.js theo cách thủ công, nó hoạt động tốt.
Có ai có ý tưởng gì sai? Có lẽ khi nén bằng cách sử dụng Gulp, có một cấu hình sai cho đường dẫn lib?
FWIW, tôi ở đây đang tìm câu trả lời cho cùng một vấn đề. Các tập tin zip từ gulp-zip là xấu bằng cách nào đó. Sự nghi ngờ của tôi là cách nó lưu trữ các đường dẫn tệp tương đối. Công cụ zip cục bộ của tôi (WinRar) lưu trữ các đường dẫn tệp tương đối theo mặc định và nếu tôi tải lên theo cách thủ công, nó sẽ chạy tốt. Nếu tôi cho phép gulp-zip xây dựng tệp zip và sau đó sử dụng CLI để tải lên (aws lambda update-function-code -zip-file) thì nó sẽ bị lỗi như bạn đã nói. Không có câu trả lời cho đến nay, nhưng một gulp-zip khác nhau có thể là những gì chúng tôi đang tìm kiếm. –