serverless
serverless-webpack

Serverless Webpack の使い方まとめ

More than 1 year has passed since last update.

Serverless Webpack は Serverless フレームワークを用いたNode.js開発に、Webpackのビルドをもたらしてくれます。

AWS Lambda は Node.js の4系しかサポートしていないため、一部のES6記法が未だ使えない状況にありますが、serverless webpack を使用すればそのあたりの問題は解決できます。

また、複雑なプロジェクト構成においても、必要なファイルに絞ってファイルをバンドルしてくれるので、無駄にデプロイのサイズが膨らむこともなく、loader などを用いた yamlファイルや、HTMLの組み込みなども行えるので非常に便利です。

https://github.com/elastic-coders/serverless-webpack

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が走りデプロイできます。