執筆時点で、IBM Cloud LitePlan で Node-RED スターター・キット
を使った CloudFoundry の Node-RED 環境が作れないです。
**でもっ!IBM Cloud でっ!Node-RED をっ!使いたいっ!**という気持ちを常に持っているので、なんとかして動かす手順をまとめました。
「コマンド一発でデプロイ!」「クリック一発でデプロイ!」な環境も作れそうな気がするけれど、今はやり方がわからないので1つ1つ手作業で準備していきました。
ライトアカウントの場合、CloudFoundryアプリとcloudantは1つしか作成できないため、すでに作成済みの場合はエラーになります。
Cloud Shell 設定
Node-RED をデプロイするために、CLI
を使用して設定します。 Cloud Shellを使用するのがオススメです。あらかじめ下記項目を設定しておく必要があります。
- リージョン設定
- リソースグループ設定
- 組織(Org)
- スペース
※筆者は us-south(ダラス)リージョンで検証しました。us-south をご利用であればスムーズに環境構築できると思います。
設定手順記事 - Qiita IBM Cloud Shell を使う
Cloudant
Node-RED のフローを格納するためのデータベースを準備します。
Cloudant の設定は、CLI で行います。
IBM Cloudant CLI
次項でコピペ可能なコマンドを紹介します。
インスタンスプロビジョニング
Node-RED のフローや設定を保存する cloudant のインスタンスをプロビジョニングします
ibmcloud resource service-instance-create \
node-red-db \
cloudantnosqldb \
lite \
us-south \
-p '{"legacyCredentials": true}'
node-red-db
という名前のCloudantNoSqlDB
インスタンスをus-southリージョン
に作成します。古い形式の認証方式を有効
にします。
※us-south の部分は、ご自身が選択しているリージョンを設定してください
成功すると以下のようなレスポンスが表示されます
Creating service instance node-red-db in resource group Default of account [Account]'s Account as [User]...
OK
Service instance node-red-db was created.
Name: node-red-db
ID: crn:v1:bluemix:public:cloudantnosqldb:us-south:a/16f6f09579814077a8e2d4cca68d3e4a:5d08c019-5d35-43f6-a005-4dfdfe31f6ad::
GUID: 5d08c019-5d35-43f6-a005-4dfdfe31f6ad
Location: us-south
State: provisioning
Type: service_instance
Sub Type:
Allow Cleanup: false
Locked: false
Created at: 2021-11-20T11:08:50Z
Updated at: 2021-11-20T11:08:52Z
Last Operation:
Status create in progress
Message Started create instance operation
エイリアス作成
CloudFoundryと連携するためのエイリアスを作成します
ibmcloud resource service-alias-create node-red-db-alias --instance-name node-red-db
node-red-db
インスタンスにnode-red-db-alias
というエイリアスを作成します。
成功すると以下のようなレスポンスが表示されます
Creating alias node-red-db-alias of service instance node-red-db from resource group Default into space dev...
OK
Service alias node-red-db-alias was successfully created.
ID: crn:v1:bluemix:public:cloudantnosqldb:us-south:a/16f6f09579814077a8e2d4cca68d3e4a:5d08c019-5d35-43f6-a005-4dfdfe31f6ad:resource-alias:4ddf2cd0-bfb3-44c5-9a13-c3d0e28c44f6
Name: node-red-db-alias
State active
Service Instance: node-red-db
Space: dev
Tags:
Node-RED ソースコード編集
Github に公開されている IBM/node-red-app のソースコードをそのままデプロイしても正しく動作しなかったので、一部ソースコードを変更します。
git clone https://github.com/IBM/node-red-app
設定読み込み部分修正
公開されていたソースのままだと、Cloud Foundry と cloudant の接続がうまくいかなかったので、環境変数から接続情報を取得するように更新します。
VCAP変数 ドキュメント
//const cloudantUrl = IBMCloudEnv.getString('cloudant_url'); ← コメントに
// 下記4行をコピペ
var VCAP = process.env.VCAP_SERVICES;
var cloudantEnv = VCAP ? JSON.parse(VCAP)['cloudantNoSQLDB'] : null;
var credential = cloudantEnv?.length ? cloudantEnv[0].credentials : null;
const cloudantUrl = credential?.url || IBMCloudEnv.getString('cloudant_url');
IBMのリポジトリをフォークした、修正済みソースファイルはこちらのリポジトリで公開しています
Cloud Foundry
Node-REDの実行環境を準備します
manifest.yaml
Cloud Foundry を設定するためのマニュフェストファイルを作成します。
---
version: 1
applications:
- name: dummy
memory: 256M
instances: 1
- memory : 利用メモリ。 ライトアカウントでは
256MByte
までしか利用できませんので、256M
を指定します - instances : インスタンス数。 LiteAccount では1つしか立ち上がらないので
1
を指定します
デプロイ
ibmcloud cf push [アプリケーション名]
※アプリケーション名はご自身の好きな名前を入力してください
世界中でユニークな名前である必要があります。すでに他で利用されている名前を設定するとエラーになります
バインド
Cloud Foundry の Node-RED と、cloudant を連携(バインド)します
ibmcloud resource service-binding-create \
node-red-db-alias \
[アプリケーション名] \
Manager \
-n Connect-cloudant-nodered
node-red-db-alias
と[アプリケーション名]
をバインドします。
サービスバインドが作成されたら CloudFoundry を再起動します。
ibmcloud cf restart [アプリケーション名]
※アプリケーション名は、CloudFoundryデプロイで指定した名前を入力してください
動作確認
ブラウザで IBM Cloud にアクセスすると、この手順で作成されて Cloud Foundry アプリケーションが一覧に表示されます。
アプリURLにアクセス
をクリックすると快適なNode-RED環境が表示されます。