【Serverless Framework】Unzipped size must be smaller than 262144000 bytes
TypeScriptファイルをParcelでビルドしServerlessFrameworkでデプロイするというのをやろうとしたら下記エラーが発生。
An error occurred: RideDashrecordDashstoreLambdaFunction - Unzipped size must be smaller than 262144000 bytes (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: xxxxxxxxxxxxx).
あげようとしているファイルがでかすぎるということらしい。
制限は50MB。
ログを見ると、
Serverless: Uploading service xxxxxxx.zip file to S3 (72.32 MB)...
72.32 MB
もあげようとしているようだ。
しかしParcelでビルドした成果物は10KB程度。
一体どういうことかと思ったが、
Serverless: Excluding development dependencies...
とあり、node_modules
の内容もアップロードしていることが原因だったようだ。
development用のdependenciesは除外してくれるようなので、そこを見直す必要がありそう。
package.json
の dependencies
は下のようになっていた。
"dependencies": { "aws-sdk": "^2.476.0", "dayjs": "^1.8.14", "faker": "^4.1.0", "uuid": "^3.3.2", "validator": "^11.0.0", "@types/aws-lambda": "^8.10.27", "@types/aws-sdk": "^2.7.0", "@types/dotenv": "^6.1.1", "@types/faker": "^4.1.5", "@types/jest": "^24.0.13", "@types/node": "^12.0.7", "@types/uuid": "^3.4.4", "@types/validator": "^10.11.1", "dotenv": "^8.0.0", "jest": "^24.8.0", "parcel-bundler": "^1.12.3", "prettier": "^1.18.0", "serverless": "^1.45.1", "ts-jest": "^24.0.2", "ts-node": "^8.2.0", "tsconfig-paths": "^3.8.0", "typescript": "^3.5.1" },
TypeScriptコンパイラや型定義ファイルなど明らかに本番に不要なものを devDepencies
に移す。
"dependencies": { "aws-sdk": "^2.476.0", "dayjs": "^1.8.14", "faker": "^4.1.0", "uuid": "^3.3.2", "validator": "^11.0.0" }, "devDependencies": { "@types/aws-lambda": "^8.10.27", "@types/aws-sdk": "^2.7.0", "@types/dotenv": "^6.1.1", "@types/faker": "^4.1.5", "@types/jest": "^24.0.13", "@types/node": "^12.0.7", "@types/uuid": "^3.4.4", "@types/validator": "^10.11.1", "dotenv": "^8.0.0", "jest": "^24.8.0", "parcel-bundler": "^1.12.3", "prettier": "^1.18.0", "serverless": "^1.45.1", "ts-jest": "^24.0.2", "ts-node": "^8.2.0", "tsconfig-paths": "^3.8.0", "typescript": "^3.5.1" }
このようにした。
Serverless: Uploading service me-hilcra-survey.zip file to S3 (21.88 MB)...
大幅なサイズダウンに成功し、デプロイすることができた。