AWS EC2 の Amazon Linux 2023 AMI インスタンス で Node-RED を動かすメモ

AWS EC2 の Amazon Linux 2023 AMI インスタンス で Node-RED を動かすメモです。

修正履歴

  • 2024/07/10
    • 公開当初 sudo su で昇格して作業してしまうと Node-RED 自体はうまく動くのですが自動起動がうまくいかなかったので昇格なしパターンに修正しました
    • sudo su 昇格でうまく自動起動が働かないのは確定的ではなさそうなので、いったん保留。昇格なしパターンでうまくいっているので一旦これで。

インスタンスの作成

まずインスタンスを作成します。

create-node-red-on-aws-ec2-202407_02.png

AWS マネジメントコンソールにログインして上部の検索で EC2 と入力してサービス一覧から EC2 をクリックします。

create-node-red-on-aws-ec2-202407_00.png

リージョンは東京(アジアパシフィック (東京) ap-northeast-1)を選んでいます。「インスタンスを起動」ボタンをクリックします。

create-node-red-on-aws-ec2-202407_07.png

Launch an instance ページです。

設定は以下のように進めていきます。

  • 名前
    • Node-RED Test(任意)
  • アプリケーションおよび OS イメージ (Amazon マシンイメージ)
    • Amazon Linux 2023 AMI
  • アーキテクチャー
    • 64 ビット (x86)
  • インスタンスタイプ
    • t2.micro
  • キーペア
    • 以下を参照

キーペア

キーペアは事前に作成したキーペアを指定します。今回キーペアを新しく作成する場合は

  • キーペア名
    • node-red-server-key-pair(任意)
  • キーペアのタイプ
    • ED25519
  • プライベートキーファイル形式
    • .pem

キーペアを作成ボタンをクリックするとプライベートキーファイル形式がダウンロードできるので手元に保存しておきます。

AWS EC2 のキーペア作成に慣れている方は、自分に合ったやり方で構いません。

ネットワーク設定・ストレージ

続いてネットワーク設定・ストレージの項目の設定です。

  • ネットワーク
    • デフォルトVPC
  • サブネット
    • 優先順位なし (アベイラビリティーゾーンのデフォルトサブネット)
  • パブリック IP の自動割り当て
    • 有効化
  • セキュリティグループ
    • SSH トラフィックを許可 任意の場所
  • ストレージ
    • 1 ボリューム – 8 GiB

インスタンスを起動ボタンをクリックして作成します。

create-node-red-on-aws-ec2-202407_04.png

作成されました。

セキュリティグループの調整

インスタンス作成後、セキュリティグループのメニューから今回作成したセキュリティグループを選択して、インバウンドルールを追加します。

create-node-red-on-aws-ec2-202407_08.png

  • タイプ
    • カスタム TCP
  • ポート番号
    • 1880
  • ポート範囲
    • Anywhere-IPv4
  • ソース
    • 0.0.0.0/0

私の場合は、ポート範囲の Anywhere-IPv4 を選択した瞬間、ソースには 0.0.0.0/0 が入りました。

create-node-red-on-aws-ec2-202407_01.png

このように SSH と 1880 番ポートのインバンドルールが設定されてます。

これで Node-RED のエディタを表示する 1880 番ポートにアクセスできるようにします。

インタンスに SSH でつなぐ

インスタンスのパブリック IPv4 アドレスに、先ほどのキーペアの鍵ファイルで SSH でつなぎます。

ssh -i "C:\***\node-red-key-pair.pem" ec2-user@***.***.***.***

*** の部分は伏字にしていますが、たとえば Windows で SSH でつないだ例です。

sudo yum update && sudo yum upgrade

アップデートとアップグレードします。

Node.js のインストール

チュートリアル: Amazon EC2 インスタンスでの Node.js のセットアップ – AWS SDK for JavaScript

を参考に、Node.js のインストールします。2024/7/9 時点の情報なので、最新のコマンドは上記の記事を参考にしてください。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

NVM のインストール。

source ~/.bashrc

NVM をターミナルに適用します。

nvm install --lts

を実行して Node.js がインストールされます。

2024/7/9 時点では

node -e "console.log('Running Node.js ' + process.version)"

で、バージョン確認をすると、

Running Node.js v20.15.1

バージョン 20 がインストールされます。

Node-RED のインストール

npm install -g --unsafe-perm node-red

で Node-RED をインストールします。

ローディングアイコンがくるくる回りますが、待ちます。1 分くらいかかりました。

Node-RED の認証の設定

node-red admin init

こちらのコマンドで Node-RED エディタ画面に認証をかけます。

Node-RED Settings File initialisation
=====================================
This tool will help you create a Node-RED settings file.

✔ Settings file · /home/ec2-user/.node-red/settings.js

Settings file はデフォルトの /home/ec2-user/.node-red/settings.js に。

User Security
=============
✔ Do you want to setup user security? · Yes
✔ Username · *****
✔ Password · ****************
✔ User permissions · full access
✔ Add another user? · No

User Security でユーザー名とパスワードを決めて設定します。

Projects
========
The Projects feature allows you to version control your flow using a local git repository.

✔ Do you want to enable the Projects feature? · No

Projects は No。

Flow File settings
==================
✔ Enter a name for your flows file · flows.json
✔ Provide a passphrase to encrypt your credentials file ·

Editor settings
===============
✔ Select a theme for the editor. To use any theme other than "default", you will need to install @node-red-contrib-themes/theme-collection in your Node-RED user directory. · default

✔ Select the text editor component to use in the Node-RED Editor · monaco (default)

Node settings
=============
✔ Allow Function nodes to load external modules? (functionExternalModules) · Yes

Settings file written to /home/ec2-user/.node-red/settings.js

残りの Flow File settings、Editor settings、Node settings は、このように設定しました。

自動起動設定

Amazon Linux にNode-REDを入れる手順 #EC2 – Qiita

こちらの記事を参考にしつつ設定方法は今回用に合わせます。

npm install -g pm2

pm2 をインストール。ローディングアイコンがくるくる回りますが、待ちます。10秒くらいかかりました。

pm2 startup

をして、

[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/home/ec2-user/.nvm/versions/node/v20.15.1/bin /home/ec2-user/.nvm/versions/node/v20.15.1/lib/node_modules/pm2/bin/pm2 startup systemd -u ec2-user --hp /home/ec2-user

と出るので、sudo env からはじまるコマンドを実行します。

sudo env PATH=$PATH:/home/ec2-user/.nvm/versions/node/v20.15.1/bin /home/ec2-user/.nvm/versions/node/v20.15.1/lib/node_modules/pm2/bin/pm2 startup systemd -u ec2-user --hp /home/ec2-user

これを実行すると、

[PM2] Writing init configuration in /etc/systemd/system/pm2-ec2-user.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-ec2-user...
Created symlink /etc/systemd/system/multi-user.target.wants/pm2-ec2-user.service → /etc/systemd/system/pm2-ec2-user.service.
[PM2] [v] Command successfully executed.

最後のほうにこんな結果が出れば成功です。

which node-red

を打って nvm 配下にインストールされているので Node-RED のパスを把握します。今回は ~/.nvm/versions/node/v20.15.1/bin/node-red に入ってました。こちらを使います。

pm2 start ~/.nvm/versions/node/v20.15.1/bin/node-red

これをもとに pm2 start 今回のNode-REDのパス で pm2 start します。Node-RED のパスは 2024/7/9 時点の情報なので、which コマンドで実際に出てきたもので行いましょう。

pm2 save

で、いま起動中の Node-RED を保存して自動起動するリストに入れます。

[PM2] Saving current process list...
[PM2] Successfully saved in /home/ec2-user/.pm2/dump.pm2

これのような結果が出て Node-RED の自動起動が設定されます。そして、現時点で Node-RED が起動もされています。

アクセスしてみる

インスタンスのパブリック IPv4 アドレスに 1880 ポートをつけて http://<パブリック IPv4 アドレス>:1880 でアクセスすると表示されます!

create-node-red-on-aws-ec2-202407_05.png

先ほど Node-RED の認証設定を行ったユーザー名とパスワードでログインして始めていきましょう~。

create-node-red-on-aws-ec2-202407_06.png

これで Node-RED が動かせました!