Serverless Webpack は Serverless フレームワークを用いたNode.js開発に、Webpackのビルドをもたらしてくれます。
AWS Lambda は Node.js の4系しかサポートしていないため、一部のES6記法が未だ使えない状況にありますが、serverless webpack を使用すればそのあたりの問題は解決できます。
また、複雑なプロジェクト構成においても、必要なファイルに絞ってファイルをバンドルしてくれるので、無駄にデプロイのサイズが膨らむこともなく、loader などを用いた yamlファイルや、HTMLの組み込みなども行えるので非常に便利です。
Usage
以下のコマンドでインストールしてから、
npm install serverless-webpack --save
serverless.yml
にプラグインを追加します。
plugins:
- serverless-webpack
Configration
Webpack の設定は webpack.config.js
に記述します。 基本の設定は以下のような形になります。
// webpack.config.js
module.exports = {
entry: './handler.js',
target: 'node',
module: {
loaders: [ ... ]
}
};
output
エントリを省略しても、serverless webpack側で自動的に補完されます。
serverless webpack は標準で全てのモジュールをBundleして一つのJSファイルにまとめようとしますが、これを避けたいようなケースでは、externals
設定を適用します。
// webpack.config.js
var nodeExternals = require('webpack-node-externals')
modules.export = {
// we use webpack-node-externals to excludes all node deps.
// You can manually set the externals too.
externals: [nodeExternals()],
}
上記のように webpackl-node-externals
を利用すると便利ですが、手動で一つづつパッケージ名を記載しても大丈夫です。
externals を設定する場合、これらがパッケージに含まれるよう、serverless.ymlの設定ファイル側でwebpackIncludeModules
を有効にしておきます。
custom:
webpackIncludeModules: true # enable auto-packing of external modules
webpack
Commands
Webpackのビルド
serverless webpack
Babel の動作確認などに。.webpack
という名前のフォルダにファイルが吐き出されます。
API Gateway のシュミュレーション
serverless webpack serve
完全にシュミレートというわけではなく、レスポンスだったかリクエストだったかの形式が違うとかがあったりますが、概ね使えます。
パスパラメータの付いているHTTPイベントの設定とかも普通に認識する。
たまにエラーで止まったりするので、sls webpack
コマンドでエラーを確認する必要があったり。
関数の実行
serverless webpack invoke --function <function-name>
関数を単体で実行します。 --function
は -f
でもOK。
実行はローカルで行われます。
デプロイ
serverless deploy
通常のserverless コマンドの実行で Webpack の Buildが走りデプロイできます。