AWSでの実践

※obniz2台以上にアプリをインストールし、obnizの近くにLogtta CO2を配置してください。
また、Amazon EC2でインスタンスを作成しておいてください。

masterのみを使用する場合

Amazon EC2にSSH接続します。

$ ssh ec2-user@{EC2のアドレス} -i ~/.ssh/{key}

チュートリアル: Amazon EC2 インスタンスでの Node.js のセットアップの手順通りに行います。

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
$ . ~/.nvm/nvm.sh
$ nvm install 16.13.0
$ node -e "console.log('Running Node.js ' + process.version)"

https://github.com/obniz/obniz-app-sdk_logtta-co2_demo をcloneし、環境変数を設定しながら実行します。

ts-nodeを用いてTypescriptファイルをNode.jsとして直接実行しています。

$ sudo yum install git
$ git clone https://github.com/obniz/obniz-app-sdk_logtta-co2_demo.git
$ cd obniz-app-sdk_logtta-co2_demo
$ npm ci
$ APP_TOKEN={アプリトークン} LOGTTA_CO2_ADDRESS={Logtta CO2のMACアドレス} npx ts-node src/index.ts

"アプリトークン"は、アプリの実装方法にて、obniz CloudでHosted Appを作成した際のトークンです。

master/slaveを使用した負荷分散

IPアドレス構成(LAN)

master: 172.31.40.186

slave: 172.31.35.144

masterのみの構成をもう一台作り、masterにRedisを導入します。

Amazon ElastiCacheなどを使用しても構いませんが、説明簡略化の為masterにインストールします。

# masterサーバー
$ sudo amazon-linux-extras install redis6
$ redis-server --protected-mode no # 簡略化の為セキュリティレベルを下げて起動(起動中にsshを切断するとRedisも終了します)

masterのセキュリティグループを編集し、slaveからアクセスできるようにします。

security-rule

slave起動

# slaveサーバー
$ git checkout scaling
$ INSTANCE_TYPE=slave REDIS_URL=redis://172.31.40.186:6379 APP_TOKEN={アプリトークン} LOGTTA_CO2_ADDRESS={Logtta CO2のMACアドレス} npx ts-node src/index.ts

master起動

# masterサーバー
$ git checkout scaling
$ INSTANCE_TYPE=master APP_TOKEN={アプリトークン} LOGTTA_CO2_ADDRESS={Logtta CO2のMACアドレス} npx ts-node src/index.ts
# ここまででslaveとmaster両方にobnizが割り当てられ、負荷分散しているのを確認できます

⚠先にslaveを起動しないとmasterが内包しているslaveに取られてしまうので注意してください。

master, slaveにてworkerが動作中にslaveが終了した場合、自動的に他のslaveに割り当てられます。

今回の例ではmasterが内包しているslaveに割り当てられます。