Check! Bluemix でユーザー定義の環境変数を利用する (Node.jsによる利用例)


こんばんは、[cloudpack][] の @dz_ こと[大平かづみ][]です。

Prologue - はじめに
====
[Bluemix][] で、接続情報などの「バージョン管理に載せるべきではない情報」の置き場所を検討してみました。

方法は様々あるかと思いますが、今回は Bluemix の「環境変数」を利用してみます。

[Bluemix]:https://console.ng.bluemix.net "IBM Bluemix - 次世代のクラウド・アプリ開発プラットフォーム"

Bluemixにおける環境変数
====
Bluemix の「環境変数」は、ダッシュボードの各アプリの画面にて、メニューの「環境変数」から開くことができます。

Bluemix には、「VCAP_SERVICES」「ユーザー定義」の2つの環境変数があります。

VCAP_SERVICES
----
「 VCAP_SERVICES 」には、サービス連携などした際に Bluemix から渡される情報が格納されています。JSON形式です。

Node.jsで利用する際は以下のように `JSON.parse` にかけると扱いやすいです。（Node.jsのとあるサンプルコードでこのように記載されてました。）

```js:(Node.jsの場合)
// 値は文字列で取得されます
var vcapString = process.env.VCAP_SERVICES;

// VCAP_SERVICES はJSON形式なので、パースして扱います
var vcap = JSON.parse(process.env.VCAP_SERVICES);
```

また、 @blackaplysia さんの「[Bluemixの資格情報取得にはcfenvを使おう](http://qiita.com/blackaplysia/items/a354826520b92d85f63f "Bluemixの資格情報取得にはcfenvを使おう")」の記事にあげられてるように、 `cfenv` を利用するのが便利そうです。

ユーザー定義
----
自分で設定したいときは、「ユーザー定義」の環境変数を使用します。
![20150922_bluemix_envvar_001.png](https://qiita-image-store.s3.amazonaws.com/0/3812/c8f94a96-803f-9272-1aaa-c9991dc95b6b.png)

上記画像にある `BLUEMIX_APP_MGMT_ENABLE` はデフォルトで設定されているようです。ユーザー定義を追加する際は、「追加」ボタンで新しい入力欄が表示されます。

取り出す際は、Node.jsの場合、 `process.env.xxx` の形で取得できます。

```js:(Node.jsの場合)
// creds というユーザー定義の環境変数を取り出す場合
var credsString = process.env.creds;    // 文字列
```

### 私的使い方
VCAP_SERVICES に倣って(?)、定義の値をJSONで設定して使ってみました。

例えば、ダッシュボードで、キーに `creds` 、値に `{"clientId":"...", "clientSecret":"..."}` というようにJSON形式で格納しておき、以下のように取り出すとすっきり便利。

```js:(Node.jsの場合)
// 取り出したJSON形式の 環境変数 creds をパースする
var creds = JSON.parse(process.env.creds);

configure(creds.clientId, creds.clientSecret, ... );
...
```

#### 余談
なお、このときとても初歩的なミスではまりました…。JSONのキーを *シングルクオート* で囲っていて、なんども `unexpected token '` 的なエラーを頻発しておりました…。お恥ずかしい…。

### 怪奇、消える定義… (トラブルシューティング?)
そしてどうやら、ユーザー定義の環境変数は、操作によっては **消えてしまう** ようです…

以下は試した結果です。

- Bluemix のダッシュボードから再始動しても、ユーザー定義の環境変数は消えません。
- DevOpsサービスでライブ編集で更新しても、ユーザー定義の環境変数は消えません。
- DevOpsサービスで再デプロイすると、ユーザー定義の環境変数は消えます！

DevOpsサービスにかかわらず、再デプロイすると消えてしまう可能性があります。ユーザー定義の環境変数は「エクスポート」できるようなので、消えてしまっても後から再追加できるようにバックアップを取っておくことをお勧めします。（インポートはいまのところないようです。）

Epilogue - おわりに
====
すごい小ネタですみません(笑)

私の場合、設定したのに何度も消えたり、取得方法がわからなかったりで結構困ったので、念のためメモをしたためさせていただきました。m(_ _)m


近況
====

最近
----
- [第4回 ICTトラブルシューティングコンテストの熱い戦いを拝見させていただきました！](http://qiita.com/dz_/items/979dc8e45e8bf5b66122 "第4回 ICTトラブルシューティングコンテストの熱い戦いを拝見させていただきました！")
- [Check! cmder ～ Windows に Monokai スタイルのコンソールを導入 (実行ポリシーのトラブルシューティング)](http://qiita.com/dz_/items/68de2b07aab9ef4aab68 "Check! cmder ～ Windows に Monokai スタイルのコンソールを導入 (実行ポリシーのトラブルシューティング)") ← :new: :sparkles:

Bluemix 関連
----
- [Check! Bluemix で Node.js をスピーディーに開発したい！](http://qiita.com/dz_/items/50949f47ad8e09e491a3/ "Check! Bluemix で Node.js をスピーディーに開発したい！")
- [Check! DBaaS ってなんだろう? IBM Cloudant を Bluemix で使ってみる。](http://qiita.com/dz_/items/ee02ec8144784cface95/ "Check! DBaaS ってなんだろう? IBM Cloudant を Bluemix で触ってみる。")
- [Check! Bluemix でユーザー定義の環境変数を利用する (Node.jsによる利用例)](http://qiita.com/dz_/items/ae282228e68bd50cfc42/ "Check! Bluemix でユーザー定義の環境変数を利用する (Node.jsによる利用例)") ← :new: :sparkles:

Webフレームワーク関連
----
### PHP
#### Phalcon PHP Framework
- [爆速フレームワーク!! Phalcon PHP Framework](
http://qiita.com/dz_/items/55ae18f7fe3a873bace1 "爆速フレームワーク!! Phalcon PHP Framework")
- [Meet Volt ! Phalcon 謹製テンプレートエンジン Volt - from 第71回 PHP勉強会](http://qiita.com/dz_/items/974a90b32ba6a6e38182 "Meet Volt ! Phalcon 謹製テンプレートエンジン Volt - from 第71回 PHP勉強会")
- [Meet Phalcon! - Phalcon PHPフレームワークを Nginx on Amazon EC2 にインストール！](http://qiita.com/dz_/items/e70d61487224b854b971 "Meet Phalcon! - Phalcon PHPフレームワークを Nginx on Amazon EC2 にインストール！")

#### CakePHP
- [Check! はじめての CakePHP2 ポイントまとめ 〜 Blog Tutorial を動かそう](http://qiita.com/dz_/items/2dd4c68f43484f0f78da "Check! はじめての CakePHP2 ポイントまとめ 〜 Blog Tutorial を動かそう")
- [Check! はじめての CakePHP2 〜 bake でプロジェクトスケルトンを利用する](http://qiita.com/dz_/items/3fa2a7a184de645f71d4/ "Check! はじめての CakePHP2 〜 bake でプロジェクトスケルトンを利用する")

### その他
#### Node.js - Express
- [Check! Node.js Express でウェブ開発 with Visual Studio Code](http://qiita.com/dz_/items/f24b66f9f464b054dd1b/ "Check! Node.js Express でウェブ開発 with Visual Studio Code")

クラウド・インフラ関連
----
### Amazon Web Services
- [Check! はじめての fluentd を Amazon Linux で動かしてみる (ログを PHP から送る)](http://qiita.com/dz_/items/960319ffffa0d7355f8c "Check! はじめての fluentd を Amazon Linux で動かしてみる (ログを PHP から送る)")
- [Check! はじめての Fluentd 〜 IAMロールで Amazon EC2 と S3 間をセキュアに](http://qiita.com/dz_/items/224607c84112ccafa2d6 "Check! はじめての Fluentd 〜 IAMロールで Amazon EC2 と S3 間をセキュアに")
- [Check! はじめての Zabbix インストール on Debian x Amazon RDS](http://qiita.com/dz_/items/3e85dd369c8053ceffe8 "Check! はじめての Zabbix インストール on Debian x Amazon RDS")

### Azure
- [Check! Azure オートメーション ランブックで OMS Search API を利用する (和訳)](http://qiita.com/dz_/items/7de3c282adef71aae7c6/ "Check! Azure オートメーション ランブックで OMS Search API を利用する (和訳)")


技術ブログ寄稿
----

[cloudpack技術ブログ][cloudpack-blog]でも記事を書いています。

- <a href="http://blog.cloudpack.jp/author/oohira/" title="大平 かづみ の記事一覧 | cloudpack技術情報サイト"　target="_blank" rel="nofollow">大平 かづみ の記事一覧</a>

[cloudpack]:https://cloudpack.jp/ "cloudpack（クラウドパック） 400社を超える導入実績! EC2などAWSクラウドの導入設計、構築、運用保守サービス"
[cloudpack-blog]:http://blog.cloudpack.jp/ "cloudpack技術情報サイト"
[大平かづみ]:http://blog.cloudpack.jp/author/oohira/ "大平かづみの記事一覧"