見出し画像

Symbol(XYM)のLINEによるハーベスト通知ツール「XymHarvestChecker」の修正について

2022年12月11日、早朝。
従来運用していた「XymHarvestChecker」が停止していることに気づきました。
Slackへのエラー通知件数は200件以上。
ただ、無限に通知されているわけではなさそうなので、ツールが異常終了していることだけは分かりました。
ツールの再起動をしてみると、即エラーで落ちてる様子。
エラーの内容を確認すると「データベースに接続できない」とのこと。
恐る恐るデータベースを確認すると…

データベースがきれいさっぱりなくなっている!!!

原因はherokuの有料化に伴い、データベースの利用も有料化していたことでした。

従来はheroku上にLINEbotのシステムをpythonで作成し、LINEからのメッセージに対するレスポンスはherokuで実施していました。
herokuには30秒(もっと短かったかも)以上の処理を行えないという制限があったため、起動しっぱなしの処理や長時間の処理はレンタルサーバー上で動作させる必要がありました。

従来の構成図

今回、herokuサーバー自体は有料化を済ませていましたが、データベース(heroku PostgreSQL)の有料化に気づけず、無料で使っていたデータベースが消えてしまったことにより、XymHarvestCheckerの機能がすべて停止するという事態に陥りました。

ツール復活に向けて

これを見た時、正直心が折れました。
「また環境構築をしなきゃいけないのか」
「どんどんランニングコストがかかる」
と…。
ですが、せっかくなので改善できる方法を探ろう!ということで、いくつか案を出すことに。

案1.DBの有料化を受け入れ、復旧してもらう

一番簡単な案です。
herokuのサポートに連絡を取ってみますが、日本語NG。
Google翻訳を駆使して問い合わせしましたが、「もう直ってるぜ!」的な回答があったにもかかわらず、直ってない…。
即諦めました。

案2.エックスサーバー上のmySQLにデータベース構築してherokuからアクセスする

案2.エックスサーバー内のmySQLに外部からアクセス

案2はデータベースをレンタルサーバー内のmySQLに変える方法。
レンタルサーバーのDBはセキュリティが強く、基本的には外部からアクセスできないため、sshtunnelを駆使してローカルでアクセスのテストを実施。
ローカルからアクセスできることを確認した後、heroku上にソースコードを上げましたが、herokuからのアクセスはできず…。

案3.LINEbotをエックスサーバー上に構築する

案3.エックスサーバー上ですべて完結させる

正直、この案が一番わかりやすいです。
herokuは捨てて、エックスサーバーに集約する方法。
色々知らべていざ実践!!と思ったのですが、何度やってもLINEbotがエックスサーバーで動かず…。
PHPで作るという文献は見つかるのですが、当方PythonでLINEbotのコードを書いていたので、PHP化するのは気が引けて諦め…。
このあたりで心折れそうになりました…。

助け舟は突然に

ほぼほぼ心が折れた状態の中で、ふぁーさんがこんなコメントを…。

なるほど、GASを使ってみるのはおもしろそうだな…と思い、検索。
すると、GASでLINEbotを実現している記事を発見。
これを参考にしてみました。

案4.GAS×LINE

で、最終系はこちら。
これまでherokuで賄っていた部分をすべてGoogleのサービスで補うことで、無料にて実現。
ただし、Pythonで書いていたコードは全てGASで書き換えをし、DB参照部分は全てスプレッドシートへの参照に書き換える羽目に。
調査から実装完了までに20時間くらいかかりました。。。

スプレッドシートへアクセスする際にAPIを叩いており、これが多くなりすぎるとツールが止まることになるため、2022/12/13(執筆時点)ではβ版として運用中。
今の感じだと、多分大丈夫かなぁ…?
少々様子を見つつ、正式リリースとしたい考えです。

最後に

LINEでハーベスト通知が受けられるXymHarvestCheckerは、普段お使いのLINEでお友達登録してアドレスを登録するだけ。
使ってみたい方は、以下から友達登録をお願いいたします。

クエスト実施中

クエスト終了後でも投げXYM/委任者様を募集中

LINEのPush通知として、ランニングコスト5,500円/月とエックスサーバー代が毎月かかっております。
皆さんに使っていただくための必要な出費ではありますが、可能であれば皆様から投げXYMや委任を頂けると、運営の助けになります。

運用ノードは↓
壱号機:xym695.allnodes.me
弐号機:xym815.allnodes.me

投げXYMは↓
NARXOM3ILDL25GNMO6WTGMPYAHHGWOIOXYIVDBY

この記事が気に入ったらサポートをしてみませんか?