クレカ登録して無料dyno時間を月500時間→1,000時間にする
クレカ登録をして、無料dyno時間を月500時間から+450時間で1,000時間にする方法です。
これによって無料で24時間(月744時間)稼働できるWEBサービスを作れるようになります。
更に、残り256時間あるので、1日8時間程度のcronやworkerを動かすことができます。
ちなみに無料dyna時間を超えても勝手にクレカで引き落とされることはないとのことです。超えると、dynaは強制的にスリープ状態になり、月末まで動作しなくなるそうです。安心です。
ダッシュボード(https://dashboard.heroku.com/apps)の右上→Account settingsをクリック。

Billing→Add credit cartの順にクリックして登録できます。
登録後は、次の「無料dyno時間の残量を確認」に添付の画面のようになります。

無料dyno時間の残量を確認
上記の通り、クレカ登録済みになっています。
無料dyno時間が月1,000時間、うち72.42時間使用、残り927.58時間という状態です。

CLIでも確認できます。
% heroku ps -a <app name>
Free dyno hours quota remaining this month: 550h 0m (100%)
Free dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:

Free Dyno Hours | Heroku Dev CenterEvery personal Heroku account is allocated a pool of hours which you can use with Free dynos. This article describes the behavior of apps using Free dynos.
=== web (Free): heroku-php-apache2 (1)
web.1: idle 2022/07/18 19:19:33 +0900 (~ 25m ago)
無料dynoが30分でスリープしないように定期的にアクセスする
無料dynoのWEBサーバーは、30分以上アクセスがないと、自動でスリープします。
スリープすると無料dyno時間を消費しないため、節約にはなりますが、アクセスがあった際に起きるまでに15秒程度かかって体感が非常に悪いです。
上記の通り、24時間連続稼働できるだけの無料dyno時間があるので、30分以内の定期的なアクセスをすることで、スリープしないようにします。
以下のURLを参考に外部サービスを使って解決しました。
cron的に使えるHeroku Schedulerを使うことも可能ですが、これはこれで無料dyno時間を消費してもったいないのでやめておきました。

slug size(スラグサイズ)のワーニングについて
Herokuにgit pushする際にWarningが出ていることに気づきました。
slug sizeというもの(アプリパッケージ的なものらしい)が大きすぎるようで、300MBを超えると警告、500MBを超えるとpush出来なくなることもあるようです。
見ての通りギリギリです。。
% git push heroku master
remote: -----> Compressing...
remote: Done: 496.7M
remote: -----> Launching...
remote: ! Warning: Your slug size (496 MB) exceeds our soft limit (300 MB) which may affect boot time.
参考までにアプリディレクトリ配下を見てみると、.gitが大きいですがこれはslug sizeに無関係とのことです。
となると、node_modulesですが、どうやらPuppeteerがそもそも大きいらしく、あまり改善の余地がないことがわかりました。
% du -sh .[^.]* * | sort -hr
271M node_modules
128M .git
88K package-lock.json
12K endpoints
4.0K puppteer_demo.js
4.0K package.json
4.0K index.js
4.0K Procfile
以下のコマンドで、リポジトリサイズやキャッシュクリアなどをしてみましたが効果ありませんでした。
% heroku plugins:install heroku-repo
% heroku repo:gc --app app-name
% heroku repo:purge_cache --app app-name
Herokuコマンド
% heroku logs --tail -a app-name
git push heroku master
コメント