serverless-webpackでNODE_ENVを設定する

はじめに

serverless-offlineとserverless-webpackを使用しているプロジェクトで、正しくNODE_ENVが設定できませんでした。
この記事では原因と解決方法をまとめます。

困ったこと

serverless-webpackでビルドした状態で、serverless offlineを実行してもNODE_ENVが正しく設定できませんでした。
serverless.ymlで以下のようにNODE_ENV=DEVを指定しているにもかかわらず、 NODE_ENV=Developmentと設定されてしまいました。

serverless.yml

.
.
.
plugins:
  - serverless-webpack
  - serverless-offline

provider:
  name: aws
  runtime: nodejs10.x
  stage: DEV
  region: ap-northeast-1
  environment:
    NODE_ENV: DEV
.
.
.

原因

webpackはビルド時にNODE_ENVDEBUGの2つにデフォルトの値を設定します。
NODE_ENV=Development, DEBUG=false)

Lambdaファンクション実行時はNODE_ENV=DEVとなりますが、ビルド時にデフォルト値のDevelopmentが設定されるため、ビルド後のコードにはNODE_ENV=Developmentが埋め込まれます。
そのため、実行時に正しく指定できていませんでした。

解決方法

ビルド時にNODE_ENVの値を設定することで解決できました。
webpack.config.jsでEnvironmentPluginで設定が可能です。

const webpack = require("webpack");
module.exports = {
  .
  .
  .
plugins: [new webpack.EnvironmentPlugin(slsw.lib.serverless.service.provider.environment)],
  .
  .
  .
}

(slsw.lib.serverless.service.provider.environmentはserverless.ymlで定義したEnvironmentがオブジェクト形式で取得できます)

参考URL

EnvironmentPlugin | webpack