【问题标题】:AWS Lambda Error: Could not unzip uploaded fileAWS Lambda 错误:无法解压缩上传的文件
【发布时间】:2018-11-27 12:06:47
【问题描述】:

我正在尝试使用 node.js 的 aws-sdk 包更新我的 lambda 函数中的代码。所以我编写了以下脚本来运行以部署代码

var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');
var lambda = new AWS.Lambda();

var params = {
    FunctionName: 'FunctionName',
    ZipFile: 'fileb://deploy_package.zip'
}

lambda.updateFunctionCode(params, function(err, data) {
    if (err) console.log(err, err.stack);
    else console.log(data);
});

问题是当我运行脚本时出现以下错误:

{ InvalidParameterValueException: Could not unzip uploaded file. Please check your file, then try to upload again.
    at Object.extractError (C:\Users\jaarnold\Desktop\AlexaSkills\circleCI\node_modules\aws-sdk\lib\protocol\json.js:48:27)
    at Request.extractError (C:\Users\jaarnold\Desktop\AlexaSkills\circleCI\node_modules\aws-sdk\lib\protocol\rest_json.js:52:8)
    at Request.callListeners (C:\Users\jaarnold\Desktop\AlexaSkills\circleCI\node_modules\aws-sdk\lib\sequential_executor.js:105:20)
    at Request.emit (C:\Users\jaarnold\Desktop\AlexaSkills\circleCI\node_modules\aws-sdk\lib\sequential_executor.js:77:10)
    at Request.emit (C:\Users\jaarnold\Desktop\AlexaSkills\circleCI\node_modules\aws-sdk\lib\request.js:683:14)
    at Request.transition (C:\Users\jaarnold\Desktop\AlexaSkills\circleCI\node_modules\aws-sdk\lib\request.js:22:10)
    at AcceptorStateMachine.runTo (C:\Users\jaarnold\Desktop\AlexaSkills\circleCI\node_modules\aws-sdk\lib\state_machine.js:14:12)
    at C:\Users\jaarnold\Desktop\AlexaSkills\circleCI\node_modules\aws-sdk\lib\state_machine.js:26:10
    at Request.<anonymous> (C:\Users\jaarnold\Desktop\AlexaSkills\circleCI\node_modules\aws-sdk\lib\request.js:38:9)
    at Request.<anonymous> (C:\Users\jaarnold\Desktop\AlexaSkills\circleCI\node_modules\aws-sdk\lib\request.js:685:12)
  message: 'Could not unzip uploaded file. Please check your file, then try to upload again.',
  code: 'InvalidParameterValueException',
  time: 2018-06-18T15:09:12.212Z,
  requestId: '8ec20526-7309-11e8-aa20-4fb186ac4f30',
  statusCode: 400,
  retryable: false,
  retryDelay: 65.40106275377198 } 'InvalidParameterValueException: Could not unzip uploaded file. Please check your file, then try to upload again.\n    at Object.extractError (C:\\Users\\jaarnold\\Desktop\\AlexaSkills\\circleCI\\node_modules\\aws-sdk\\lib\\protocol\\json.js:48:27)\n    at Request.extractError (C:\\Users\\jaarnold\\Desktop\\AlexaSkills\\circleCI\\node_modules\\aws-sdk\\lib\\protocol\\rest_json.js:52:8)\n    at Request.callListeners (C:\\Users\\jaarnold\\Desktop\\AlexaSkills\\circleCI\\node_modules\\aws-sdk\\lib\\sequential_executor.js:105:20)\n    at Request.emit (C:\\Users\\jaarnold\\Desktop\\AlexaSkills\\circleCI\\node_modules\\aws-sdk\\lib\\sequential_executor.js:77:10)\n    at Request.emit (C:\\Users\\jaarnold\\Desktop\\AlexaSkills\\circleCI\\node_modules\\aws-sdk\\lib\\request.js:683:14)\n    at Request.transition (C:\\Users\\jaarnold\\Desktop\\AlexaSkills\\circleCI\\node_modules\\aws-sdk\\lib\\request.js:22:10)\n    at AcceptorStateMachine.runTo (C:\\Users\\jaarnold\\Desktop\\AlexaSkills\\circleCI\\node_modules\\aws-sdk\\lib\\state_machine.js:14:12)\n    at C:\\Users\\jaarnold\\Desktop\\AlexaSkills\\circleCI\\node_modules\\aws-sdk\\lib\\state_machine.js:26:10\n    at Request.<anonymous> (C:\\Users\\jaarnold\\Desktop\\AlexaSkills\\circleCI\\node_modules\\aws-sdk\\lib\\request.js:38:9)\n    at Request.<anonymous> (C:\\Users\\jaarnold\\Desktop\\AlexaSkills\\circleCI\\node_modules\\aws-sdk\\lib\\request.js:685:12)'

我尝试从我的计算机以及 CircleCI 部署 zip 文件,我还尝试使用 AWS CLI,结果都一样。

我在 zip 文件和 config.json 中有我需要的一切。 我在这里做错了什么?

【问题讨论】:

标签: node.js amazon-web-services aws-lambda aws-sdk


【解决方案1】:

ZipFile 必须是 Buffer

这意味着您必须读取文件并将其转换为 Buffer 对象。

您可以使用fs.readFile()fs.readFileSync() 来执行此操作。

【讨论】:

    【解决方案2】:

    您的 ZipFile 参数不正确,它必须是缓冲区。尝试更改为:

    var fs = require('fs');
    
    var params = {
        FunctionName: 'FunctionName',
        ZipFile: fs.readFileSync('deploy_package.zip')
    }
    
    lambda.updateFunctionCode(params, function(err, data) {
        if (err) console.log(err, err.stack);
        else console.log(data);
    });
    

    【讨论】:

      【解决方案3】:

      我遇到了这个问题并解决了。

      看起来您正在压缩 zip 文件。这就是为什么它无法再次压缩它的原因。

      PS:如果您使用的是 AWS-S3,请取消选中“GZIP 文件”选项。

      【讨论】:

        【解决方案4】:

        节点 js 。像这样使用

        fs.readFile('lambda/function.zip', (err, data) => {
           if (data) {
              console.log(data)
              lambda.createFunction(data);
          }
        })
        

        【讨论】:

          【解决方案5】:

          我的解决方案与上面提到的接近,但略有不同。也许是因为这种差异,它为我解决了这个问题:

          import AWS from 'aws-sdk'
          import fs from 'fs'
          
          const file = fs.readFileSync(`myFileName.zip`)
          
          const params = {
            Code: {
              ZipFile: Buffer.from(file),
            },
            ...
          }
          
          // Then standard SDK Lambda implementation:
          
          const lambda = new AWS.Lambda({ apiVersion: '2015-03-31' })
          lambda.createFunction(params, function(err, data) {
            if (err) console.log(err, err.stack); // an error occurred
            else     console.log(data);           // successful response
          });
          

          【讨论】:

            猜你喜欢
            • 2018-11-27
            • 2016-05-16
            • 2017-03-07
            • 1970-01-01
            • 2020-11-11
            • 2018-10-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多