「config」とは?
NODE_ENV
の値によって設定を動的に切り替えるライブラリです。
用途
- 開発環境と本番環境で設定を変更したいとき
環境
- Node.js:v12.14.0
- npm:6.13.4
- config:0.0.36
セットアップ
configのインストール
npmからインストールします。
$ npm install @types/config config
TypeScriptの場合は @types/config
もインストールします。
@types/config
のみだと、 cdk deploy
時に Cannot find module 'config'
エラーが発生しました。
使い方
設定ファイルの作成
設定ファイルを作成します。
config
フォルダ内に NODE_ENV
と同名で作成する必要があります。
# 「config」フォルダを作成する
$ mkdir config
$ cd config
# 「default.ts」を作成する
# 全環境に共通で読み込まれる設定ファイル
$ touch default.ts
# 「NODE_ENV」の値と同名のファイルを作成する
$ touch production.ts
$ touch development.ts
設定ファイルの編集
AWS CDKで設定ファイルを作成する例です。
全環境共通の設定として、リージョンとAWSアカウントを持たせています。
default.ts
export = {
region: '{リージョン名}',
account: '{AWSアカウント名}'
}
本番環境の設定です。
タイムアウトする秒数とメモリサイズを持たせています。
production.ts
export = {
lambda: {
{Lambda関数名}: {
timeout: 30,
memorySize: 256
}
}
}
開発環境の設定です。
本番環境よりスペックを落とし、コストを削減します。
development.ts
export = {
lambda: {
{Lambda関数名}: {
timeout: 5,
memorySize: 128
}
}
}
設定ファイルの読込
config.get()
で設定ファイルから値を取得します。
NODE_ENV
の値から自動で設定ファイルを選択して読み込みます。
import config = require('config')
import cdk = require('@aws-cdk/core')
import lambda = require('@aws-cdk/aws-lambda')
function createLambdaFn (scope: cdk.Construct): lambda.Function {
return new lambda.Function(scope, '{Lambda関数名}', {
runtime: lambda.Runtime.NODEJS_12_X,
memorySize: config.get('lambda.{Lambda関数名}.memorySize'),
timeout: cdk.Duration.seconds(config.get('lambda.{Lambda関数名}.timeout')),
})
}
プログラムの実行
NODE_ENV
を設定し、プログラムを実行するのみです。
$ export NODE_ENV=development
$ cdk deploy
NODE_ENV
は大文字小文字を区別するので気をつけてください。
$ export NODE_ENV=Development
$ cdk deploy
WARNING: NODE_ENV value of 'Development' did not match any deployment config file names.
WARNING: See https://github.com/lorenwest/node-config/wiki/Strict-Mode
…
おわりに
簡単に実装することができました!
if文を使わずに、環境ごとに設定を切り替えられるので便利です。