メチャツイ開発秘話 第2回 WebJobsでツイート予約投稿

Twitter自動投稿ツール「メチャツイ」の開発秘話 第2回はツイート予約投稿機能で少し躓いた話です。

Azure WebAppsを使っています

Webサービス部分はMicrosoft AzureのWebAppsを利用して作成されています。

その中でもメチャツイのツイート投稿予定の実行には、WebJobsを利用しているのですが、24時間稼動させる部分で少し躓いた部分があるのでご紹介します。

 

エラーでは止まらないWebJobs(止まらないとは言っていない)

WebJobsで定期的な処理をするにはいくつか方法がありますが、私が最初に試したのが、WebJobsを常時起動し、TimerTriggerによって10秒ごとに予定を処理するといったものでした。

これの利点は、こちらが予期してないエラーが発生した際にもエラー処理してくれて、処理を継続してくれる機能がSDKに始めからついていることでした。

さて、開発環境でのテストも完了し、本番環境であるAzureに公開したところ、WebJobsが途中でエラーもなく終了するという事態が発生しました。

原因を調べてみると、WebJobsが動くWebAppsのサーバーは、CPU負荷が低い状態が続いた場合に自動で休止状態になるらしく、その際にWebJobsも止まってしまうとのこと。

そこで、WebAppsの設定で常時接続のプロパティをオンにすれば休止しなくなる、という所までわかったのですが、その設定ができるのが料金プランBasicからとのことで、料金プランを上げる必要が出てきたのです。

 

ただより高いものはない

できれば料金プランを上げずに24時間稼動できないか調べて、試してみたのがAzureスケジューラーからWebJobsを起動するという方法でした。

Azureスケジューラーは無料の範囲ではタスク5個までジョブを登録でき、また、最低の実行周期は1時間に1回に制限されています。

これで1時間動くジョブを1時間ごとに呼び出せば24時間稼動できるのではと考えたわけです。

さっそく新しいWebJobsを作成し、それで実際試してみたところ・・・、

その日はちゃんと動きました。

次の日、確認したらだめでした。

最初の4、5時間は確かに1時間に1回起動して最後まで動いてくれていたのですが、次第に起動後20分で休止するようになりました。

期待させておいてこれか!

結局、長時間のジョブを実行するにはWebAppsの常時接続オンが必須のようです。

 

常時接続オン!

ここまでやって上と相談しました。

そして結局、料金プランを上げることになりました。

MSDNの無料枠内だからいいらしいです。

それから常時接続のプロパティをオンしたらきちんと動き続けてくれました。

まあ、こんな誰でも考え付く方法で有料の壁を回避できたら商売上がったりですよ。

 

今思えば、Azureスケジューラーの無料枠全部つかって細かいスケジュール設定をすればあるいは・・・、

でも休止までの時間ってわからないし・・・、やっぱり無理ですかね。

 

今回は以上となります。

 

興味を持った方はぜひメチャツイをお試しください

メチャツイは1週間フル機能が使える試用コースと、機能制限ありですが無期限に使える無料コースを用意しております。

興味を持った方はぜひともお試しください。

メチャツイ紹介ページ


タグ一覧: メチャツイ, メチャツイ開発秘話

関連記事