AWS EC2: 1マシンで1台のデバイスを管理する

obnizを使用するシステムを堅牢に構築する場合、いくつか気をつけるポイントがあります。

たとえば、AWS上のデータベースに、センサの値を記録していくアプリを検討します。

この場合、obniz↔EC2間の接続はEC2からobniz側にアクセスしますので、ポートを開けたりして外部からEC2にアクセスできるようにする必要はありません。

クローズドなEC2から、セキュアに保ったまま、obnizと連携を行うことができます。

プログラムの書き方や実行方法でも注意する点があります。

  • アクセストークンを発行する
  • 切断時、再接続時の挙動をきちんと明確にする
  • プロセスが死んだら再起動するようにしましょう

詳細はセキュアでトラブルの少ないプログラムの書き方のページを参照してください。

上記を踏まえたサンプルプログラムがこちらです。

const Obniz = require("obniz");
initDb();

// access_tokenを設定します。
const obniz = new Obniz("obniz_id_here", { access_token:"xxxxxxxxxxx" })

obniz.onconnect = async ()=>{
  // 接続時処理(初期設定など)
  await saveObnizStatusToDb("connected");
  
  const tempSensor = obniz.wired("LM35DZ", { gnd:0 , output:1, vcc:2});

    obniz.onloop = async ()=>{
     //繰り返し処理

         const temp = await tempSensor.getWait();
         console.log(temp);
     await saveTempToDb(temp);
  };
}

obniz.onclose = async ()=>{
  // 切断時処理(コールバックのリセットなど)
  await saveObnizStatusToDb("disconnected");
}

function initDb(temp){

}

async function saveTempToDb(temp){

}

async function saveObnizStatusToDb(status){

}

実行時は、pm2を使用して下記のように実行します。

npm install pm2 -g
pm2 start ./app.js

永続化していますので、停止もpm2を通じて停止します。

pm2 stop app