[AWS Lambda] node_modules のファイルサイズ削減のために npm install serverless --global を推奨します

Tadashi Shigeoka ·  Thu, January 3, 2019

Serverless Framework で AWS Lambda へ deploy するときにファイルサイズを減らすために npm install serverless —global を推奨します。

Serverless Framework

[前提条件] node_modules に serverless を含めない

なぜ package.json に追加していたのか?

package.json に含めて git 管理下にしたいがためだけに、

npm install serverless --save

で serverless をインストールしていました。

公式ドキュメントや多くの技術系ブログには npm install serverless —global で書かれているので、そもそも package.json に含めているのが少数派だと思います。

なぜファイルサイズを減らしたいのか?

serverless deploy の「高速化」と「ネットワーク通信量の節約」の2点です。

ネットワーク環境が良いときは気にならなかったのですが、テザリング環境で開発するときに上記の2点がどちらも気になったので改善することにしました。

uninstall serverless & global install

npm uninstall —save で package.json から削除して、npm install —global でグローバルインストールします。

npm uninstall serverless --save
npm install serverless --global
# npm install [email protected] --global

[Before] serverless ローカルインストール

serverless をローカルインストールしていた場合、他の node module も含めて .zip file は 66.57 MB でした。

$ $(npm bin)/serverless deploy --verbose

Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
CloudFormation - CREATE_IN_PROGRESS - AWS::CloudFormation::Stack - aws-nodejs-dev
CloudFormation - CREATE_IN_PROGRESS - AWS::S3::Bucket - ServerlessDeploymentBucket
CloudFormation - CREATE_IN_PROGRESS - AWS::S3::Bucket - ServerlessDeploymentBucket
CloudFormation - CREATE_COMPLETE - AWS::S3::Bucket - ServerlessDeploymentBucket
CloudFormation - CREATE_COMPLETE - AWS::CloudFormation::Stack - aws-nodejs-dev
Serverless: Stack create finished...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service .zip file to S3 (66.57 MB)...

# ネット環境が悪いと時間がかかる… ⏳

[After] serverless グローバルインストール

serverless をグローバルインストールに変更した場合、他の node module も含めて .zip file は 56.59 MB でした。約 10 MB ファイルサイズを削減できました。

$ serverless deploy --verbose

Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service .zip file to S3 (56.59 MB)...

# 66.57 - 56.59 = 9.98 MB ファイルサイズを削減

以上、node_modules のファイルサイズを削減して、serverless deploy を高速化したい現場からお送りしました。