#あえてのAmazon Linux
IoTやデータ連携でお馴染みになった「Node-RED」、チュートリアルではAWS上ではUbuntu Serverを使用する方法が紹介されています。AWSなので、Amazon Linux上にNode-REDを入れる手順を確認しましたので書き記しておきます。
EC2上のAmazon Linuxを使う理由は、独自にシェルスクリプトやPythonで作ったプログラムをNode-REDで呼び出したり、API Gateway以外のトリガーを使用したいためです。
#導入手順
EC2で、t2.microまたはt2.smallでインスタンスを作成します。Amazon Linux AMI 2017.09.1 (HVM), SSD Volume Type - ami-da9e2cbcを使用しました。セキュリティグループでは、ポート 1880を開放します。Node-REDは、ポート1880を利用します。
ユーザー名 ec2-userでSSH接続後、下記コマンドを実行していきます。
$ sudo su
# yum update && yum upgrade
# curl -sL https://rpm.nodesource.com/setup_8.x | bash -
# yum install nodejs
# npm install -g --unsafe-perm node-red
この時点でNode-REDを起動することができました。EC2のパブリック DNS (IPv4)に、:1880をつけてアクセスすればNode-REDが起動しますが、ログイン機能が有効になっていません。このままでは外から丸見えです。
次は、ログイン機能を有効にします。
# nano /usr/lib/node_modules/node-red/settings.js
adminAuth のコメントを解除し、認証機能を使用可能にします。
デフォルトのユーザー名は、admin。パスワードはハッシュ化されており、デフォルトは、password です。変更するには、公式サイトのSecurityのページを確認してください。
#自動化
サーバー再起動時にNode-REDを自動起動させるために、PM2をインストールします。
下記を実行することで、再起動時にNode-REDが自動起動し、EC2のパブリック DNS (IPv4)に、:1880をつけてアクセス可能です。
# npm install -g pm2
# exit
$ pm2 start /usr/bin/node-red
$ pm2 startup amazon
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup amazon -u ec2-user --hp /home/ec2-user
$ sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup amazon -u ec2-user --hp /home/ec2-user
$ pm2 save
#Node-REDログイン
EC2のパブリック DNS (IPv4)に、:1880をつけてアクセスすると、Node-REDのログイン画面が表示されます。
先ほど、adminAuthで設定したユーザー名とパスワードでログインします。
ログイン後、何も無いNode-REDのフロー定義画面が表示されますので、フローを作り、画面右上の「デプロイ」を実行することで、フローが作動します。デプロイすればNode-REDの画面が閉じていてもフローは動作し続けます。
たとえば、以下はオープンソースマーケティングオートメーション Mauticで新規顧客が登録されたときにWebhookを使ってSlack通知するフローです。こちらの記事にサンプルがあります。
ノードの追加
Node-REDは、画面左側のメニューにあるノードと呼ばれる箱を配置することでフローを定義し、Slack通知のようなデータ連携やIoTデバイスのデータを呼び出すことができます。
ノードの追加は、画面右上の「三」→「パレットの管理」→「ノードを追加」にて、ノードを検索、検索後「ノードを追加」をクリックすると追加できます。
もしくは、SSH接続し、npm install でも追加可能です。
確認できたノード
- iont-node-red-contrib-aws-iot-hub
- AWS IoTと接続し、読み書きするためのノード
- node-red-contrib-ibm-watson-iot
- IBM Watson IoT Platformと接続
- node-red-node-watson
- IBM CloudのWatsonサービスを呼び出す
- node-red-contrib-slack
- Slackとの連携
- node-red-contrib-play-audio
- Webブラウザ経由で音声データの読み上げ
- node-red-contrib-browser-utils
- Webブラウザ経由でマイクが使用可能
Node-RED Library からノードやサンプルフローを検索することもできます。
#まとめ
Node-REDはNode.js上でどこでも動かせるのが強み。ということで、IBM Cloud以外、AWSでも容易に動かすことができます。ビジネスでデータ連携を行う場合、何度も試行錯誤を繰り返しますし、その度にスクリプトやプログラムを作り直すことは非現実的です。
Node-REDを使うことで何度もトライし、データ連携やIoTデバイスとの連携を行うことができます。