首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >上传的文件必须是一个非空的压缩(服务: AWSLambdaInternal;状态代码: 400;错误代码: InvalidParameterValueException;

问上传的文件必须是一个非空的压缩(服务: AWSLambdaInternal;状态代码: 400;错误代码: InvalidParameterValueException;
EN

Stack Overflow用户
提问于 2021-01-27 09:54:34
回答 4查看 18.8K关注 0票数 20

我有一个简单的Express/Node.js应用程序,它有以下没有子目录的文件(除了.serverless和node_modules)。

  • .serverless
  • node_modules
  • app.js
  • lambda.js
  • package.json
  • package-lock.json
  • serverless.yml

引发此错误发生错误: ApiLambdaFunction上载的文件必须是非空压缩(服务: AWSLambdaInternal;状态代码: 400;错误代码: InvalidParameterValueException;请求ID: 5779d4c3-beaa-4bc2-b525-c1e89a82635a;代理:null)。

当我访问代码上传到的.zip桶时,S3文件并不是空的。我看到了包含所有内容的.zip文件夹,但是serverless deploy操作从AWS中失败,引发了上述异常。如果能在这个问题上提供任何帮助,我们将不胜感激。谢谢!

下面是代码。

  • app.js
代码语言:javascript
复制
const express = require("express")
const app = express();

app.use(express.json());
app.use(express.urlencoded({extended: false}));

app.get("/", (req, res) => {
    res.status(200).send("Root endpoint")
})

app.post("/postReq", (req, res) => {
    res.status(200).send(req.body);
})

app.listen(8080, () => console.log("App started."))
  • lambda.js
代码语言:javascript
复制
'use strict'
const awsServerlessExpress = require('aws-serverless-express')
const app = require('./app')
const server = awsServerlessExpress.createServer(app)

exports.handler = (event, context) => { awsServerlessExpress.proxy(server, event, context) }
  • package.json
代码语言:javascript
复制
{
  "name": "my-lambda",
  "version": "1.0.0",
  "description": "Lambda Function",
  "main": "app.js",
  "scripts": {
    "start": "node app.js",
    "deploy": "serverless deploy"
  },
  "author": "Aseem Savio",
  "license": "ISC",
  "dependencies": {
    "aws-serverless-express": "^3.4.0",
    "express": "^4.17.1"
  }, 
  "devDependencies": {
    "serverless": "^2.21.1"
  }
}
  • serverless.yml
代码语言:javascript
复制
service: my-lambda-function

provider: 
  name: aws
  runtime: nodejs10.x
  memorySize: 512
  timeout: 15
  stage: production
  region: ap-south-1

functions:
  api:
    handler: lambda.handler
    events:
      - http: ANY {proxy+}
      - http: ANY /

以下是控制台日志。

代码语言:javascript
复制
aseemsavio@aseem-ubuntu:~/projects/Node.js/my-lambda$ npm run deploy

> my-lambda@1.0.0 deploy
> serverless deploy

Serverless: Configuration warning at 'functions.api.events[0].http': value 'ANY {proxy+}' does not satisfy pattern /^(?:\*|(GET|POST|PUT|PATCH|OPTIONS|HEAD|DELETE|ANY) (\/\S*))$/i
Serverless:  
Serverless: Learn more about configuration validation here: http://slss.io/configuration-validation
Serverless:  
Serverless: Deprecation warning: Starting with next major version, default value of provider.lambdaHashingVersion will be equal to "20201221"
            More Info: https://www.serverless.com/framework/docs/deprecations/#LAMBDA_HASHING_VERSION_V2
Serverless: Deprecation warning: Starting with next major version, API Gateway naming will be changed from "{stage}-{service}" to "{service}-{stage}".
            Set "provider.apiGateway.shouldStartNameWithService" to "true" to adapt to the new behavior now.
            More Info: https://www.serverless.com/framework/docs/deprecations/#AWS_API_GATEWAY_NAME_STARTING_WITH_SERVICE
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service my-lambda.zip file to S3 (917.12 KB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
................
Serverless: Operation failed!
Serverless: View the full error output: https://ap-south-1.console.aws.amazon.com/cloudformation/home?region=ap-south-1#/stack/detail?stackId=arn%3Aaws%3Acloudformation%3Aap-south-1%3A617584887932%3Astack%2Fmy-lambda-production%2F6d6f6ed0-607d-11eb-a05e-02c8952955f8
 
  Serverless Error ---------------------------------------
 
  An error occurred: ApiLambdaFunction - Uploaded file must be a non-empty zip (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: 5779d4c3-beaa-4bc2-b525-c1e89a82635a; Proxy: null).
 
  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Issues:        forum.serverless.com
 
  Your Environment Information ---------------------------
     Operating System:          linux
     Node Version:              15.6.0
     Framework Version:         2.21.1 (local)
     Plugin Version:            4.4.2
     SDK Version:               2.3.2
     Components Version:        3.5.1
 
npm ERR! code 1
npm ERR! path /home/aseemsavio/projects/Node.js/my-lambda
npm ERR! command failed
npm ERR! command sh -c serverless deploy

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/aseemsavio/.npm/_logs/2021-01-27T09_38_04_670Z-debug.log
aseemsavio@aseem-ubuntu:~/projects/Node.js/my-lambda$ 

调试文件的完整日志如下:

代码语言:javascript
复制
0 verbose cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'run', 'deploy' ]
1 info using npm@7.4.0
2 info using node@v15.6.0
3 timing config:load:defaults Completed in 1ms
4 timing config:load:file:/usr/local/lib/node_modules/npm/npmrc Completed in 0ms
5 timing config:load:builtin Completed in 0ms
6 timing config:load:cli Completed in 1ms
7 timing config:load:env Completed in 1ms
8 timing config:load:file:/home/aseemsavio/projects/Node.js/my-lambda/.npmrc Completed in 0ms
9 timing config:load:project Completed in 0ms
10 timing config:load:file:/home/aseemsavio/.npmrc Completed in 0ms
11 timing config:load:user Completed in 0ms
12 timing config:load:file:/usr/local/etc/npmrc Completed in 1ms
13 timing config:load:global Completed in 1ms
14 timing config:load:cafile Completed in 0ms
15 timing config:load:validate Completed in 0ms
16 timing config:load:setUserAgent Completed in 0ms
17 timing config:load:setEnvs Completed in 1ms
18 timing config:load Completed in 5ms
19 verbose npm-session 39866318e36c1c25
20 timing npm:load Completed in 11ms
21 timing command:run-script Completed in 49470ms
22 verbose stack Error: command failed
22 verbose stack     at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/@npmcli/promise-spawn/index.js:64:27)
22 verbose stack     at ChildProcess.emit (node:events:379:20)
22 verbose stack     at maybeClose (node:internal/child_process:1065:16)
22 verbose stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:296:5)
23 verbose pkgid my-lambda@1.0.0
24 verbose cwd /home/aseemsavio/projects/Node.js/my-lambda
25 verbose Linux 5.8.0-38-generic
26 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "deploy"
27 verbose node v15.6.0
28 verbose npm  v7.4.0
29 error code 1
30 error path /home/aseemsavio/projects/Node.js/my-lambda
31 error command failed
32 error command sh -c serverless deploy
33 verbose exit 1
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-02-05 19:08:10

此问题是由当前在节点15.6.0或更高版本上运行时在无服务器环境中使用的存档/节点-存档器依赖引起的。

正如许多建议的这里 将节点版本降级到当前的LTS版本( v14.15.4或v15.5.1 )一样,评论中提到的MX应该可以很好地工作。

许多人在CI/CD管道中构建捆绑包时都会遇到这个问题,因为他们使用的是节点对接映像。例如,在GitLab中,比如:

代码语言:javascript
复制
default:
    image: node:alpine

与node:alpine不同,该错误还应该发生在node:latest等。这些行应该更改为上面描述的特定工作版本,如下所示:

代码语言:javascript
复制
default:
    image: node:15.5.1
票数 31
EN

Stack Overflow用户

发布于 2021-11-07 15:59:27

只需将无服务器升级到最新版本:https://www.serverless.com/framework/docs/getting-started#upgrade

票数 4
EN

Stack Overflow用户

发布于 2022-08-24 00:04:43

今天节点lambda也有同样的问题。修正package.json中的全局更新SLS : webpack无服务器-webpack

修好了。这些软件包在3年内没有更新。是我的错。我也进入了AWS Lambda并更新到Node 16,但这并没有修复它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65916681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档