簡體   English   中英

AWS Lambda 錯誤:無法解壓縮上傳的文件

[英]AWS Lambda Error: Could not unzip uploaded file

我正在嘗試使用 aws-sdk package 為 node.js 更新我的 lambda function 中的代碼。所以我編寫了以下腳本來運行以部署代碼

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 中擁有我需要的一切。 我在這里做錯了什么?

ZipFile需要是一個Buffer

這意味着您必須讀取文件並將其轉換為Buffer對象。

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

您的 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);
});

我遇到了這個問題並解決了它。

看起來您正在壓縮 zip 文件。 這就是它無法再次壓縮的原因。

PS:如果您使用的是 AWS-S3,請取消選中“GZIP 文件”選項。

節點 js 。 使用喜歡

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

我的解決方案與上述方案接近但略有不同。 也許是因為這種差異,它為我解決了這個問題:

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
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM