もう一年ぐらい前の話だと思うのですが、AWS Lambda アプリケーションに環境変数を渡せるようになっており、まだ試したことがなかったので今回やってみました。
これまでは例えば認証用のキー情報のようなものを、アーカイブしてアップロードするソースコードのどこに含めるか悩ましかったのですが、これからは環境変数で渡せます。
管理コンソールでキーと値を設定し、
コード内で process.env
オブジェクトから取得してみます。
次のように無事、取得できました。
ローカルで実行する場合はどうするか
Lambda を AWS 上で実行する場合は上記のように管理コンソールで環境変数を設定すればよいですが、開発時にローカルで Lambda を実行する場合に環境変数をどう設定するかを考えてみました。
前提として、ローカルでは本体のコード(ここではindex.js
とする)を起動するドライバスクリプトを次のように用意しているものとします。
const index = require('./index'); // 本体コードを読み込み
const event = { // eventオブジェクトを作成
// ...
};
const context = { // contextオブジェクトを作成
// ...
};
const callback = function (error, response) { // callback関数を作成
if (error) {
console.log(error);
} else {
console.log(response);
}
};
index.handler(event, context, callback); // 本体コードのhandler関数を実行
ローカルのコマンドラインコンソールから
$ node localRun.js
で実行
① ドライバスクリプト内で環境変数を設定する
ドライバスクリプトのコード内で環境変数を設定するようにします。
const index = require('./index'); // 本体コードを読み込み
const event = { // eventオブジェクトを作成
// ...
};
const context = { // contextオブジェクトを作成
// ...
};
const callback = function (error, response) { // callback関数を作成
if (error) {
console.log(error);
} else {
console.log(response);
}
};
+ // 環境変数を設定
+ process.env['HOGE'] = 'moge';
index.handler(event, context, callback); // 本体コードのhandler関数を実行
② ドライバスクリプトの起動時にコマンドラインで環境変数を設定する
ドライバスクリプトを次のように起動するようにします。
$ HOGE='moge' node localRun.js
③ dotenv
ライブラリを使って環境変数を設定する
npmモジュールである dotenv ライブラリを利用します。
$ npm install dotenv
でローカルに導入した後、.env
ファイルを次のように用意し、
HOGE=moge
ドライバスクリプトを次のように起動するようにします。
$ node -r dotenv/config localRun.js
おわりに
AWS Lambda のコード内で環境変数を利用する方法、および、ローカルで実行する場合の環境変数の設定方法を3通り紹介させて頂きました。個人的には ③ の方法にして、.env
ファイルを Git 管理下から除外するのがおすすめかなと思います。