はじめに
Node.jsで作成したWebRTCのSignaling ServerをAWS EC2(Amazon Linux 2023)で自動実行する際に課題に直面しました。
その解決手順を以下にまとめました。
読んでいただいた方が少しでも参考になれば幸いです。
こんな人に読んでほしい
- EC2+Node.jsを使った環境を構築したい方
- AWSを学びたい方
前提条件
- EC2+Node.js環境が作成済であること
やりたいこと
Node.jsの手動実行の例
$ node signaling_server.js
これをEC2インスタンス起動時に自動実行する。
EC2のユーザーデータ作成手順
①EC2インスタンスを停止する。
②EC2インスタンスから「アクション」-「インスタンスの設定」-「ユーザーデータを編集」を実行する。
ユーザーデータ入力内容
ユーザーデータはデフォルトでは初回起動時のみ実行されるので、再起動時にも実行されるように以下のコマンドを入力します。
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash
ここにユーザーコマンドを記入
--//--
ユーザーコマンドは次の通りです。
runuser -l ec2-user -c "node /home/ec2-user/hogehoge/signaling_server.js"
これで、rootユーザーで実行されるユーザーデータがec2-userユーザーで実行されます。
ご参考
この手順に進む前に、foreverを使用してNode.jsをデーモン化する方法も検討しました。
詳細はforeverメモをご覧ください。
しかし、現在のNode.jsのバージョンにはforeverが対応していないようです。
Node.jsのバージョンをv13.13.0
に下げるとエラーがなくなるようですが、現在のバージョンは次の通りです。
$ node --version
v20.10.0
このため、現状では諦めることにしました。