Node-REDのfunctionでVCAP_SERVICESを取得する

BluemixのNode-REDでVCAP_SERVICESの値を取得する方法。
パレットにないサービスをバインドして使うときに知っていると便利。
IOT Starterの構成ファイル(bluemix-settings.js)を編集して再デプロイしておく点がミソ。


参照: [Creating apps with Node-RED Starter](https://console.ng.bluemix.net/docs/starters/Node-RED/nodered.html#nodered)

##手順
1. IOT Starter作成
2. Gitリポジトリを作成
3. bluemix-settings.jsを編集
4. 編集を反映してNode-REDを再起動
5. Node-REDでVCAP_SERVICES取得

##1. IOT Starter作成
Node-RED実行環境として、ボイラープレートのInternet of Things Platform Starterを作成する。作成手順はあちこちで紹介されていると思うのでここでは省略。
![Qiita0528_01.jpg](https://qiita-image-store.s3.amazonaws.com/0/32083/ca6ec70a-7f9e-1041-0ea0-2ebb09ee1b63.jpeg)

##2. Gitリポジトリを作成
IOT Starterの構成ファイルを取得して編集するため、上で作成したランタイムをBluemixのダッシュボードで開き、「Gitの追加」をクリックしてGitリポジトリを作成。
![Qiita0528_2.jpg](https://qiita-image-store.s3.amazonaws.com/0/32083/5df312c5-ca9f-6432-68f2-497777ad564e.jpeg)

（2016/12/28補足）「Gitの追加」のリンクの場所が、最近は下図のようにダッシュボードの「概要」の一番下に移動しています。
<img width="1280" alt="Screen Shot 2016-12-28 at 9.11.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/32083/e3b1a7d4-00b5-90c4-9cbb-c008dd05b65d.png">

Gitリポジトリが出来上がると、「Gitの追加」と表示されていたところがGitリポジトリのURLリンクに変わるので、リンクをクリックしてリポジトリに移動。
DevOpsサービスの画面に切り替わるので、ここで「EDIT CODE」をクリックしてエディタに移動。
![Qiita0528_03.jpg](https://qiita-image-store.s3.amazonaws.com/0/32083/77983b00-6c2b-cc0e-e0ed-e973a55e5895.jpeg)


##3. bluemix-settings.jsを編集
エディタ画面でbluemix-settings.jsを選択。編集箇所は以下のとおり。

```js:bluemix-settings.js
    functionGlobalContext: {
    	VCAP_SERVICES: JSON.parse(process.env.VCAP_SERVICES)}, 
```



編集前:
![Qiita0528_04.jpg](https://qiita-image-store.s3.amazonaws.com/0/32083/c19c2379-e24b-1f82-a88f-9378f8b1fac9.jpeg)

編集後:
![Qiita0528_05.jpg](https://qiita-image-store.s3.amazonaws.com/0/32083/879164fb-db06-aec1-536c-dd7aba05e307.jpeg)

シンタックスエラーの赤丸バッテンは無視してもよいが、気になる場合は以下のコメント文を追加（node.js環境で稼働することをeslintに明示指定）。

```js:bluemix-settings.js
/* eslint-env node */
```

編集したら「ファイル」→「保存」で保存
![Qiita0529_06.jpg](https://qiita-image-store.s3.amazonaws.com/0/32083/f7125694-a90c-0d53-92da-a406f5df54a4.jpeg)



##4. 編集を反映してNode-REDを再起動
以下の手順に従って、Gitの画面で編集をコミット

1. 左端列のGitアイコンをクリックしてGit画面に切り替え
2. 適当にコメントを記入
3. コミット (git commit -m コメント）
4. プッシュ（git push origin master）

![Qiita0529_07.jpg](https://qiita-image-store.s3.amazonaws.com/0/32083/1b6cc5cc-a8c5-1cfa-51b4-db4de7f86775.jpeg)

プッシュをトリガーにしてNode-REDが再デプロイ＆再起動される。進み具合が気になる人は「BUILD&DEPLOY」の画面へ。

![Qiita0529_08.jpg](https://qiita-image-store.s3.amazonaws.com/0/32083/69afb084-7dde-7cf0-1ce7-05955247ae7f.jpeg)

![Qiita0529_09.jpg](https://qiita-image-store.s3.amazonaws.com/0/32083/6877bb7a-a773-8f1d-2368-f9b168fec0c3.jpeg)






##5. Node-REDでVCAP_SERVICES取得
下図のフローのfunctionノードでVCAP_SERVICESを取得し、debug画面に値を出力。
![Qiita0529_10.jpg](https://qiita-image-store.s3.amazonaws.com/0/32083/0b5f28e0-d44d-c710-222f-cc0dbdbd8590.jpeg)

functionの実装は以下のとおり。この例ではIOT StarterランタイムにバインドされているCloudantNoSQLDBのcredentials情報を取得。
![Qiita0529_11.jpg](https://qiita-image-store.s3.amazonaws.com/0/32083/3724e832-8b7a-2f7b-0ffb-6789817173b3.jpeg)

```js:VCAP_SERVICES取得
var services = context.global.VCAP_SERVICES;
var credentials = services['cloudantNoSQLDB'][0].credentials;
msg.username = credentials.username;
msg.password = credentials.password;
msg.host = credentials.host;
msg.port = credentials.port;
msg.url = credentials.url;

return msg;
```

実行結果は以下のとおり。
![Qiita0529_12.jpg](https://qiita-image-store.s3.amazonaws.com/0/32083/027af038-f0dd-13d1-e33e-ee500991c12d.jpeg)

最後に、Node-REDのフロー定義をEXPORTしたものを添付しておく。

```text:Node-REDフロー定義
[{"id":"2127569f.f5c4da","type":"inject","z":"1c37fc7a.bda2a4","name":"トリガー","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":93.5,"y":73,"wires":[["4fc639f9.5b5408"]]},{"id":"4fc639f9.5b5408","type":"function","z":"1c37fc7a.bda2a4","name":"VCAP_SERVICES取得","func":"var services = context.global.VCAP_SERVICES;\nvar credentials = services['cloudantNoSQLDB'][0].credentials;\nmsg.username = credentials.username;\nmsg.password = credentials.password;\nmsg.host = credentials.host;\nmsg.port = credentials.port;\nmsg.url = credentials.url;\n\nreturn msg;","outputs":1,"noerr":0,"x":163.5,"y":134,"wires":[["919a369f.115828","3a489d92.fcad72","dfb4dc69.4fb28","d7507d21.4537b","c37d9c34.0993a"]]},{"id":"919a369f.115828","type":"debug","z":"1c37fc7a.bda2a4","name":"username","active":true,"console":"false","complete":"username","x":370.5,"y":53,"wires":[]},{"id":"3a489d92.fcad72","type":"debug","z":"1c37fc7a.bda2a4","name":"password","active":true,"console":"false","complete":"password","x":370,"y":99,"wires":[]},{"id":"dfb4dc69.4fb28","type":"debug","z":"1c37fc7a.bda2a4","name":"host","active":true,"console":"false","complete":"host","x":361,"y":144,"wires":[]},{"id":"d7507d21.4537b","type":"debug","z":"1c37fc7a.bda2a4","name":"port","active":true,"console":"false","complete":"port","x":362,"y":190,"wires":[]},{"id":"c37d9c34.0993a","type":"debug","z":"1c37fc7a.bda2a4","name":"url","active":true,"console":"false","complete":"url","x":362,"y":239,"wires":[]}]
```

以上。