【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).

あげようとしているファイルがでかすぎるということらしい。

docs.aws.amazon.com

制限は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.jsondependencies は下のようになっていた。

  "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)...

大幅なサイズダウンに成功し、デプロイすることができた。