Closed5

AWS を使って Heroku の Sleep を防ぐ構成について検討した

ピン留めされたアイテム
noid11noid11

結論

AWS を使って Heroku のスリープを防ぐのであれば・・・

  • 多少コストが掛かっても良いのであれば CloudWatch Synthetics か Route 53 ヘルスチェック
  • コード実装が必要になるものの、無料で実現したいのであれば EventBridge + AWS Lambda

という感じ。

noid11noid11

Heroku の無料プランである Free dyno で Web サーバーを動かす場合、 30 分間トラフィックが無い場合にスリープ状態になるという特性がある

https://devcenter.heroku.com/ja/articles/free-dyno-hours

アプリに Free Web dyno があり、その dyno が 30 分間 Web トラフィックを受信しない場合、その dyno は​休眠状態​になります。

noid11noid11

スリープ状態になるのを防ぐためには、30分以内の間隔でアプリケーションに対して HTTP リクエストすれば良い。
これは、 Heroku の カスタムクロックプロセスや Scheduler アドオンを使うことで実現できるので、シンプルに実現するのであれば、これらを使うのがベターそう

https://devcenter.heroku.com/ja/articles/scheduled-jobs-custom-clock-processes
https://devcenter.heroku.com/articles/scheduler

noid11noid11

ここからは AWS を使って同様に(可能であれば無料で)スリープを防げないかな?と思って調べたメモ

noid11noid11

案1. CloudWatch Synthetics を使う

  • Blue Print を使ってサクッと HTTP リクエストを送る監視を実現できる
  • しかし、現状の無料枠は 1ヶ月あたり 100 回の実行 となっている
    • 30分間隔で1ヶ月リクエストするのであれば 1,440 程度の実行が必要になるので、無料枠を超えてしまう

https://aws.amazon.com/jp/cloudwatch/pricing/

1 か月あたり 100 回の Canary 実行

案2. Route 53 のヘルスチェック機能を使う

  • 現状無料枠が無い

https://aws.amazon.com/jp/route53/pricing/

案3. EventBridge + AWS Lambda

  • 無料で実現できそう
    • EvengBridge: AWS が発行するイベントは無料
    • AWS Lambda:
      • 1,000,000 件/月の無料リクエスト
      • 1 か月あたり最大 320 万秒のコンピューティング時間
  • ただし Lambda 関数の実装が自前で必要

https://aws.amazon.com/jp/eventbridge/pricing/
https://aws.amazon.com/jp/lambda/pricing/

このスクラップは2021/05/17にクローズされました