Apexで環境変数を切り替える話

  • 0
    いいね
  • 0
    コメント

    Apexで環境変数を切り替える話

    Apexについて

    http://apex.run/

    あとclassmethodのblog記事とか読むといいと思います。
    http://dev.classmethod.jp/cloud/aws/how-to-manage-aws-lambda-functions-with-apex/

    やりたいこと1 devとかprodとかで環境変数を切り替えたい

    このへん のやり方とかつらつら見てたんですが、最新(現在v0.13.0)だと公式でサポートされていました。

    ├── functions
    │   └── function-name
    │       ├── index.js
    │       └── package.json
    └── project.json
    

    なところを、

    ├── README.md
    ├── functions
    │   └── function-name
    │       ├── index.js
    │       └── package.json
    ├── project.development.json
    ├── project.json
    ├── project.production.json
    └── project.staging.json
    
    

    てな感じに分けて、

    $ apex deploy -e development
    

    とすればproject.development.jsonが読み込まれるし、

    $ apex deploy -e staging
    

    とすればproject.staging.jsonが読み込まれます。
    VPCが違うとか、RDSの接続先が違うとかはこれで解消。

    やりたいこと2 手元で実行する際もどうにかしたい

    といったあたりを踏まえて、↓のような処理を追加。
    ※ 別途project.local.json作ってます。

    if (!process.env.AWS_LAMBDA_FUNCTION_NAME) {
      var path = '../../project.local.json';
      if (process.env.NODE_ENV) {
        path = '../../project.' + process.env.NODE_ENV + '.json';
      }
      var parsedObj = JSON.parse(fs.readFileSync(path, 'utf8'));
    
      Object.keys(parsedObj.environment).forEach(function (key) {
        process.env[key] = process.env[key] || parsedObj.environment[key];
      });
    }
    

    これで手元でもLambdaでも同じノリで設定が書けるようになりました。

    まとめ

    PHP書くって当初聞いていたんですが、なぜかNode.jsを書いています。