search
LoginSignup
35
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

Organization

AWS Lambda で環境変数を渡してみる(Node.js)

もう一年ぐらい前の話だと思うのですが、AWS Lambda アプリケーションに環境変数を渡せるようになっており、まだ試したことがなかったので今回やってみました。

これまでは例えば認証用のキー情報のようなものを、アーカイブしてアップロードするソースコードのどこに含めるか悩ましかったのですが、これからは環境変数で渡せます。

管理コンソールでキーと値を設定し、

スクリーンショット_2017-12-22_17_23_54.png

コード内で process.env オブジェクトから取得してみます。

スクリーンショット_2017-12-22_17_27_42.png

次のように無事、取得できました。

スクリーンショット_2017-12-22_17_28_35 のコピー.png

ローカルで実行する場合はどうするか

Lambda を AWS 上で実行する場合は上記のように管理コンソールで環境変数を設定すればよいですが、開発時にローカルで Lambda を実行する場合に環境変数をどう設定するかを考えてみました。

前提として、ローカルでは本体のコード(ここではindex.jsとする)を起動するドライバスクリプトを次のように用意しているものとします。

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);
  }
};

index.handler(event, context, callback); // 本体コードのhandler関数を実行

ローカルのコマンドラインコンソールから $ node localRun.js で実行

① ドライバスクリプト内で環境変数を設定する

ドライバスクリプトのコード内で環境変数を設定するようにします。

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 ファイルを次のように用意し、

.env
HOGE=moge

ドライバスクリプトを次のように起動するようにします。

$ node -r dotenv/config localRun.js

おわりに

AWS Lambda のコード内で環境変数を利用する方法、および、ローカルで実行する場合の環境変数の設定方法を3通り紹介させて頂きました。個人的には ③ の方法にして、.envファイルを Git 管理下から除外するのがおすすめかなと思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
35
Help us understand the problem. What are the problem?