概要

Serverless フレームワークで .env を使った環境変数の設定方法について紹介します。

サンプルプロジェクトの作成

まず、サンプル用のプロジェクトを作成します。
Serverless フレームワークをインストールしていない場合は npm install -g serverless を実行します。

serverless create --template aws-nodejs

Dotenv を使えるようにする

serverless.yml を開いて以下を追加します。
これだけで .env による環境変数の設定が可能になります。

# serverless.yml
useDotenv: true

使ってみる

ためしに .env ファイルを追加してプログラムを実行してみます。

# .env
BASE_URL=my.api.com
// handler.js
module.exports.hello = async (event) => {
  console.log(process.env.BASE_URL)
  // ...
};

編集したらターミナルでハンドラを呼び出してみましょう。

sls invoke local -f hello
> my.api.com

ステージごとにファイルを分けることも可能です。
その場合、 .env.{stage名} の形式でファイルを作成します。

# .env.dev
BASE_URL=my.api.jp

この環境変数はステージが dev のときだけ有効です。
もういちどハンドラを呼び出してみます。

sls invoke local -f hello
> my.api.jp
sls invoke local -f hello --stage prod
> undefined

注意すべきは上のように .env.dev ファイルを作ると .env ファイルが無視されてしまうことです。

Dotenv の拡張機能

あらかじめプログラムを実行するマシンに設定されている変数を .env ファイルに埋め込むこともできます。
その場合 .env ファイル内で $ 表記を使います。

# .env
BASE_URL=$MY_URL
export MY_URL=my.api.com
sls invoke local -f hello
> my.api.com