オンプレから PaaS への移行
今まではオンプレミス(ラズパイ)で家の色んなバッチを動かしてきていました! 一例だけでもこんな感じです…
- motion による監視カメラ
- 在宅通知(監視カメラを住人在宅時は動作させない)
- Twitter 徘徊(Jorudan とか)
- Google Home と連動した時間通知(平日の朝)
- 赤外線のタイマー(祝日判定付き)
- 記念日通知
- 個人の Slack に占い通知(Web ad Fortune 利用)
- 目覚まし設定通知(休みや平日の前)
- 曜日指定の忘れ防止通知
- Google Home Notifier と連動した YouTube 上の音楽の再生
処理内容自体はそこまででもないのですが、これだけ動かしているとラズパイにも家のトラフィックにもかなり負荷があるため、何とか無料の PaaS 系に移行できないかと考えておりました。
そこで目をつけたのが以前より使い捨てマークダウン等でお世話になっている Heroku です(・∀・)
GAE も考えたのですが、ちょっと負荷が高いと簡単にインスタンスが立ち上がるという記事を目にしていたため、GAE は断念しました(^^;
(違うアプリでちょっとだけ導入しています)
そして紆余曲折あって、無事に今は安定稼働となりました!
今回は、移行に際し色々と詰まったりしたことを上げていきたいと思います(*・ω・)ノ
時刻は UTC
当然ですが、時刻は UTC です。。。
元々自宅(日本)で動かしていたので、全部 9 時間ズレました(笑)
粛々と Calendar クラスや Formatter 系に Timezone を設定しました。
多分漏れはないはず…
Caused by: java.sql.SQLSyntaxErrorException: User ‘hoge’ has exceeded the ‘max_questions’ resource (current value: 3600)
運用開始早々に出ました(´・ω・`)
何のことかと思って調べてみると、Heroku の無料版 ClearDB では SQL クエリ数の上限が 3,600 に設定されているようです_| ̄|○
Spring Batch も併用しているため管理テーブルの使用などで、物凄いクエリ数なようです。
秒で発生しました∑( ̄□ ̄|||)
元々ラズパイで運用していた時も、このブログが運用されている XServer の MySQL を SSH 経由で利用していたので、ClearDB は諦め元の方法に戻しました。
Heroku からも SSH 経由で使えてよかった…
Springboot の Scheduled(cron) がいい加減
この理由は実はまだ分かっていません(^ω^;)
@Scheduled(cron = "0 30 7 * * *", zone = "Asia/Tokyo")
と設定しても、7:30 ではなく 7:52 だったり 7:44 だったりまちまちですw
なので時間通知のような正確なものはエンドポイントを用意し、curl で突く方法に変更しました。
Google Calendar API でエラー
Google Calendar API を使って祝日判定をさせていたのですが、どうもうまく動きません。
ログを確認してみたところ、403 Forbidden が返ってきています(^^;
え?と思い Paiza で試してみると、こちらでも同様の事象が発生しました。
海外から日本の祝日は取得できないということでしょうか?
これはまだ残っているラズパイに実施させ、結果登録のエンドポイントを用意することで対応しました。
New Relic の導入
導入方法は Qiita に Heroku で動かす Java アプリに New Relic を導入するというタイトルで記載しましたので、詳細はそちらをご参照ください。
せっかくなので状態監視とか入れようと思ったのですが、Qiita の最後にも記載した通り、思ってた以上にメモリを使うようです(>_<)
当初は導入から 45 分で終了しましたw
残ったもの
さすがに監視カメラは家に設置しますし、youtube-dl や Google Home Notifier など家のサーバーでないと出来ないものは残りました。
ただポート解放はやめ、Firebase Realtime Database を Node から利用することで外から喋らせたり監視カメラの動作を制御したりしています(・∀・)
何となく便利になればと作ったモジュールたちを当たり前に使っていましたが、いざエラー等で使えなくなるととても不便さを感じましたΣ(・ω・ノ)ノ
エンジニアらしく IT でこれからも生活を豊かに出来たらと思います!