※ この記事は公開されてから1年以上経過しているため、情報が古い可能性があります。
今まではオンプレミス(ラズパイ)で家の色んなバッチを動かしてきていました!
一例だけでもこんな感じです…
- 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クエリ数の上限が3600に設定されているようです_| ̄|○
Spring Batchも併用しているため管理テーブルの使用などで、物凄いクエリ数なようです。
秒で発生しました∑( ̄□ ̄|||)
元々ラズパイで運用していた時も、このブログが運用されているXserverのMySQLをSSH経由で利用していたので、ClearDBは諦め元の方法に戻しました。
HerokuからもSSH経由で使えてよかった…
SpringbootのScheduled(cron)がいい加減
この理由は実はまだ分かっていません(^ω^;)
1
@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でこれからも生活を豊かに出来たらと思います!