Lambda 会抛出错误,具体取决于 zip 的创建方式



目前,我正在这样做:

gulp.task('newInstanceSetup', function() {
    return gulp.src('./**/*',{cwd:'./new_instance_setup'})
        .pipe(zip('archive.zip'))
        .pipe(lambda(newInstanceSetup_params, opts))
        .pipe(gulp.dest('.'));
});

这会导致代码由 AWS Lambda 执行时出错。

{
  "errorMessage": "Cannot find module 'async'",
  "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:5:9)",
    "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)"
  ]
}

如果我手动压缩并上传文件夹的内容(选择所有>右键单击> 7-zip>添加到存档...),它将创建一个适用于 Lambda 的存档。

如果我手动上传 gulp 进程创建的archive.zip,Lambda 将在执行代码时抛出错误。这让我相信错误出在大口大口的压缩过程中的某个地方。

如果我检查两个档案,文件大小不同,但内容乍一看是一样的。

zip来自大口大口的拉链

https://github.com/sindresorhus/gulp-zip/issues/64

发生这种情况是因为Windows和Linux之间的权限问题。在指定选项时向选项添加{nodir:true} gulp.src

我的代码变为:gulp.src('./**/*',{cwd:'./new_instance_setup',nodir:true})

最新更新