[解決済み] アップロードするファイルは、空でないzipでなければなりません(Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException;
質問
私は、サブディレクトリ(.serverless と node_modules 以外)を持たない、以下のファイルを含むシンプルな Express/Node.js アプリケーションを持っています。
- .サーバーレス
- ノードモジュール
- app.js
- lambda.js
- パッケージ.json
- パッケージロック.json
- サーバーレス.yml
AWSはこのエラーをスローします。 エラーが発生しました。ApiLambdaFunction - アップロードされるファイルは空でないzipでなければならない(Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: 5779d4c3-beaa-4bc2-b525-c1e89a82635a; Proxy: null).
コードがアップロードされるS3バケットにアクセスすると、.zipファイルが空ではありませんでした。.zipフォルダの中身はすべて見ることができました。
serverless deploy
の操作は、AWS CLI からは上記の例外を投げて失敗します。問題をゼロにするためにどのようなヘルプでも、非常に感謝しています。ありがとうございます。
以下はそのコードです。
- app.js
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
'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) }
- パッケージ.json
{
"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
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 /
以下は、コンソールログです。
aseemsavio@aseem-ubuntu:~/projects/Node.js/my-lambda$ npm run deploy
> [email protected] 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$
デバッグファイルからのフルログは以下の通りです。
0 verbose cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'run', 'deploy' ]
1 info using [email protected]
2 info using [email protected]
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 [email protected]
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
解決方法は?
この問題は archiverjs/node-archiver 現在、node バージョン 15.6.0 以上で動作している場合、serverless 内部で使用されている依存関係です。
多くの提案されているように こちら ノードのバージョンを現在の LTS バージョン v14.15.4 または v15.5.1 にダウングレードするとうまくいくはずです。 でMX Dが言及しているように コメント .
CI/CDパイプラインでバンドルを構築する際、nodeのdockerイメージを使用しているため、多くの人がこの問題に遭遇しています。 例えばGitLabのようなところで。
default:
image: node:alpine
node:alpineの代わりに、node:latestなどでもエラーが発生するはずです。以下のように、行を上記の特定の作業バージョンに変更する必要があります。
default:
image: node:15.5.1
関連
-
[解決済み】Node.js getaddrinfo ENOTFOUND
-
[解決済み】MongoDBのデータ/DBが見つからない
-
[解決済み】モジュール '@babel/core' が見つかりません。
-
[解決済み】POSTできない/expressを使用するとエラーが発生する
-
[解決済み] create-react-app、インストールエラー("コマンドが見つからない")。
-
[解決済み] ブラウザで動作しているURLで「connect ETIMEDOUT」エラーが発生する原因は何ですか?
-
[解決済み] npm install エラー - ローカルの発行者証明書を取得できません。
-
[解決済み] express は `body-parser deprecated undefined extended` としてエラーを投げます。
-
[解決済み] Express.js req.bodyが未定義です。
-
[解決済み] sudo を使用しないと NPM モジュールがグローバルにインストールされない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】AWS Lambdaでnodejsの「ref」モジュールを使用すると「invalid ELF header」と表示される件
-
[解決済み】npx コマンドが見つかりません。
-
[解決済み】Mongooseで、日付でソートするにはどうしたらいいですか?(node.js)
-
[解決済み】NPMインストールエラー:解析中の予期せぬJSON入力の終了 '...nt-webpack-plugin": "0'' 付近。
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み] Passport JSのreq.isAuthenticated()はどのように実装されていますか?[クローズド]
-
[解決済み] ブラウザで動作しているURLで「connect ETIMEDOUT」エラーが発生する原因は何ですか?
-
[解決済み] npm install エラー - ローカルの発行者証明書を取得できません。
-
[解決済み] S3 Bucket に何かを送信しようとすると、AWS Missing credentials が表示される (Node.js)
-
[解決済み] nodejsでfindAllのソート順を続編にする