serverless-webpackでNODE_ENVを設定する

Icon

70_10

はじめに

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 が設定可能です。

webpack.config.js
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