Casual Developers Note

エンジニアやデザイナー向けの技術情報・英語学習情報・海外留学情報・海外旅行情報を提供中。世界を旅して人生を楽しもう。

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • お問い合わせ
現在の場所:ホーム / 技術 Tips & Tutorials / Herokuの無料dynoをスリープさせないで24時間稼働させる4つの方法

2018年4月30日 By KD コメントを書く

Herokuの無料dynoをスリープさせないで24時間稼働させる4つの方法

Herokuの無料dynoをスリープさせないで24時間稼働させる4つの方法

Herokuの無料のdynoを使っている場合、現時点のルールでは30分でスリープしてしまいます。スリープしてしまうと、アクセスした時点で起動するのでサイトの表示がかなり遅くなってしまいます。今回は、このスリープを回避して、無料dynoを24時間稼働させる方法を紹介します。

見出し

  • 1 はじめに
  • 2 Herokuのdynoスリープ回避策①外部サービスを使う
  • 3 Herokuのdynoスリープ回避策②Heroku Schedulerを使う
    • 3.1 アドオンをインストールする
    • 3.2 ジョブを設定する
    • 3.3 Heroku Scheduler利用時の問題点
  • 4 Herokuのdynoスリープ回避策③NewRelicを使う
    • 4.1 NewRelicのアカウントを作る
    • 4.2 アドオンをインストールする
    • 4.3 NewRelicを設定する
  • 5 Herokuのdynoスリープ回避策④自前スケジューラーの実装
    • 5.1 必要なファイルの準備
    • 5.2 スケジューラーをNodejSで実装
    • 5.3 Dockerfileを書く
    • 5.4 Herokuに自前スケジューラーをデプロイする
    • 5.5 Docker化されていない場合
  • 6 最後に
    • 6.1 関連記事

はじめに

Herokuの無料dynoのルールは割りとコロコロ変わっているのですが、現時点では無料dyno全て合わせて月1000時間までが無料で使え(会員登録すると月550時間が与えられ、クレジットカード登録すると月450時間が追加される)、無料dyno(プロセスタイプがwebの場合)はアクセスがなければ30分でスリープする仕様になっています。

この30分でスリープする仕様ですが、スケジューラを使って定期的にcurlやpingなどで対象のアプリにアクセスをすることで回避できます。この方法を使えば、1dynoまでなら無料で24時間稼働させることが可能です。

Herokuのdynoスリープ回避策①外部サービスを使う

これが無料で最も簡単な方法でしょう。いろいろ設定するのが面倒であればこれがおすすめです。

外部のモニタリングサービスであるUptimeRobotを使う方法です。

まずはUptimeRobotのアカウントを作り、ログインします。

Uptimerobot1

「Add New」Monitor」からモニターを追加します。

Uptimerobot2

「HTTP(s)」を選択します。

Uptimerobot3

名前は分かりやすいものを付けて、URLにHerokuアプリのURLを入力します。Monitor Intervalはデフォルトで5分間隔なので、そのままにしておきます。入力が終わったら「Create Monitor」をクリックします。

Uptimerobot4

これで、Herokuアプリが5分毎にチェックされるので、スリープを回避できます。モニタリングの結果は以下のように表示されます。

Uptimerobot5

無料で十分ですね。

Herokuのdynoスリープ回避策②Heroku Schedulerを使う

すでに何かしらのアプリケーションをHerokuにデプロイ済みであり、Herokuにクレジットカード情報の登録がしてあることを前提に進めます。仮にそのdynoをyour-herokuapp-xxxxxとします。

アドオンをインストールする

Schedulerという無料のアドオンをインストールします。

$ heroku addons:create scheduler:standard
Creating scheduler:standard on ⬢ your-herokuapp-xxxxx... free
This add-on consumes dyno hours, which could impact your monthly bill. To learn more:
http://devcenter.heroku.com/addons_with_dyno_hour_usage

To manage scheduled jobs run:
heroku addons:open scheduler

Created scheduler-tapered-10112
Use heroku addons:docs scheduler to view documentation

ジョブを設定する

スケジューラにジョブを設定します。ブラウザからもできますが、コマンドで開きましょう。

$ heroku addons:open scheduler 

ブラウザが開いたら「Add new job」をクリックします。

Heroku4

DYNO SIZEはもちろん「Free」で、定期ジョブの実行間隔FREQUENCYは「Every 10 minutes」を選択します。これは10分間隔でジョブを実行することを意味するので、30間隔でアクセスが無ければスリープしてしまうというHerokuの仕様を回避できます。

Heroku3

ジョブの内容はGETすればよいので、「curl https://your-herokuapp-xxxxx.herokuapp.com/」でよいでしょう。ジョブの内容を入力したら、「Save」をクリックします。

Heroku2

ジョブの登録が完了しました。

Heroku1

これでスケジューラの設定は完了です。試しに30分放置してサイトを見に行って下さい。スリープせずに稼働していれば成功です。

Heroku Scheduler利用時の問題点

Heroku Schedulerは確実に実行されるものではなく、タスクがスキップされたり、2度同時に実行されたりといった問題が稀に発生することが知られています。詳しくは公式サイトを参照して下さい。

加えて、予期しない課金リスクもあります。Heroku Schedulerのアドオン自体は無料ですが、スケジューラがタスクを実行す時にOne-Off dynoを立ち上げています。これは時間課金のdynoです。アドオンの利用の条件がクレジットカードの登録である理由はここにあります。このOne-Off dynoの起動時間も無料枠の時間に含まれるので、無料枠が超過した場合課金されます。この課金リスクに関しては、One-Off dyno全てに言えることなので、意識した方が良いでしょう。

この方法はメジャーな方法ですが、上記の問題があるため個人的にはおすすめしません。

Herokuのdynoスリープ回避策③NewRelicを使う

すでに何かしらのアプリケーションをHerokuにデプロイ済みであり、Herokuにクレジットカード情報の登録がしてあることを前提に進めます。仮にそのdynoをyour-herokuapp-xxxxxとします。

NewRelicのアカウントを作る

NewRelicのサイトに行ってアカウントを作ります。電話番号も必要なので面倒ですが。

アドオンをインストールする

NewRelic用の無料のアドオンをインストールします。

$ heroku addons:create newrelic:wayne
Creating newrelic:wayne on ⬢ your-herokuapp-xxxxx... free
Created newrelic-transparent-xxxxx as NEW_RELIC_LICENSE_KEY, NEW_RELIC_LOG
Use heroku addons:docs newrelic to view documentation

NewRelicを設定する

$ heroku addons:open newrelic 

モニタータイプに「ping」を選択して、対象のHerokuアプリのURLを入れれて、15分毎にpingされるようにすればOKです。

Herokuのdynoスリープ回避策④自前スケジューラーの実装

最後ですが、Herokuのdynoとしてスケジューラを実装します。この方法はdynoが増えるので普通に起動しておくと無料枠を超えてお金かかります。なので、この方法を利用する場合は、スケジューラだけのdynoとして起動させずに、例えばメインのアプリのソースコードとして含めてしまって一つのdynoにまとめてしまうなどの工夫が必要になります。つまり、メリットはほとんどないので、おまけ程度に考えて下さい。

すでに何かしらのDocker化されているアプリケーションをHerokuにデプロイ済みである前提で進めます。仮にそのdynoをyour-herokuapp-xxxxxとします。

必要なファイルの準備

まずは、必要なファイルを作ります。

$ cd your-herokuapp
$ touch clock.js
$ touch Dockerfile.clock

スケジューラー自体はNodeJSで実装しますが、そのスケジューラーはDockerコンテナとして実装するので、メインのアプリが何の言語で書かれていても問題ありません。

スケジューラーをNodejSで実装

clock.jsを実装します。

const http = require('http');

const URL = 'http://your-herokuapp-xxxxx.herokuapp.com'; // 独自ドメインでもOK
const INTERVAL_MSEC = 10 * 60 * 1000; // 10分毎(30分未満ならOK)

setInterval(() => {
  http
    .get(URL, res => {
      console.log(res, URL);
    })
    .on('error', err => {
      console.log(err, URL);
    });
}, INTERVAL_MSEC);

あえてNodeJSに最初から含まれているhttpモジュールを利用しています。モジュールの入れるほどの内容ではないので。

Dockerfileを書く

Dockerfile.clockは以下になります。

FROM node:9.11.1-alpine

RUN mkdir /app
WORKDIR /app

COPY clock.js clock.js

CMD node clock.js

Dockerfileのファイル名に拡張子としてclockが付いていますが、これはHerokuにプロセスタイプを知らせるためのHerokuの仕様です。clockでなくても、好きな名前を使って下さい。

Herokuに自前スケジューラーをデプロイする

それでは完成した自前のスケジューラーをHerokuにデプロイしましょう。

$ heroku container:login
$ heroku container:push clock --recursive
$ heroku ps:scale clock=1

「heroku container:push」に「--recursive」を指定することでDockerfileの拡張子(今回はclock)をプロセスタイプと認識してデプロイしてくれます。また、デプロイしただけでは起動しないので、「heroku ps:scale clock=1」で起動しています。停止したい場合は「heroku ps:scale clock=0」とすればOKです。

※追記※ Container RegistryにDockerイメージをPushした後に、Releaseコマンドが必要になりました。こちらの記事を参考にして下さい。

Docker化されていない場合

Docker化されていないアプリケーションの場合は、Dockerfileは不要なのでもっと簡単です。その場合は、以下のようなProcfileファイルを用意して、上記のclock.jsをherokuに通常の方法でpushすれば良いでしょう。

web:    node your-app.js
clock:  node clock.js

詳しくは公式サイトを参照して下さい。

最後に

いかがでしたか?これで無料dynoを24時間稼働させることができるようになったと思います。個人的にはもう少し無料dynoの稼働時間を延ばすか、Hobbyの値段を下げてほしいのですが、まあ、高く感じてきたらDigitalOceanあたりにに乗り換えるのもよいかもしれませんね。では。

The following two tabs change content below.
  • この記事を書いた人
  • 最新の記事
KD
Twitter のプロフィール

KD

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。
KD
Twitter のプロフィール

最新記事 by KD (全て見る)

  • 2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介 - 2020年1月13日
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~ - 2019年11月4日
  • ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~ - 2019年10月30日

関連記事

  • Herokuのデプロイ先をステージング環境と商用環境で分ける方法

    何か作ったアプリケーションをデプロイするにはHerokuは非常にお手軽なデプロイ環境です。今回は、Herokuにデプロイ…

  • ChatfuelでFacebookメッセンジャーを使うChatbot簡単入門

    AIの流行りと共に人気が出ているChatbotですが、最近ではサービスを使って簡単に作れるようになりました。今回はCha…

  • [tips][Subversion] TortoiseSVNのインストール方法

    SubversionのWindows用クライアントといえば、ダントツでTortoiseSVNです。TortoiseSVN…

  • [tips][perl] Perlのサブルーチン呼び出しにアンパーサンドは必要か?

    Perlでサブルーチンを呼び出す方法はいくつかあります。ググっても正確な情報がヒットしなかったので、自分でまとめておきま…

  • [tips][bat] バッチで「ツェラーの公式」による曜日の計算をする。

    「ツェラーの公式」というのは曜日を計算するための公式です。詳しくはWikipediaに任せて、ここではバッチでのコードを…

カテゴリ : 技術 Tips & Tutorials タグ : heroku

ブログ更新情報や海外の関連情報などを配信する無料メルマガ

Sponsored Links

About Author

KD

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。

https://casualdevelopers.com/

最近の投稿

  • 2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年1月13日
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    2019年11月4日
  • ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    2019年10月30日
  • BashからZshに移行する方法(Mac編)

    BashからZshに移行する方法(Mac編)

    2019年10月21日
  • Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    2019年9月30日

カテゴリ

  • 技術 Tips & Tutorials (100)
  • 技術塾 (6)
  • ライフハック (26)
  • 海外留学 (12)
  • 英語学習 (3)
  • コラム (6)

アーカイブ

最高の学習のために

人気記事ランキング

  • MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
    MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
  • SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
    SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
  • Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
    Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
  • Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
    Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
  • SLF4JとLogbackによるJavaのロギング入門(SLF4J + Logback + Lombok)
    SLF4JとLogbackによるJavaのロギング入門(SLF4J + Logback + Lombok)
  • Amazon EC2インスタンスにSSHできなくなった時の対処法
    Amazon EC2インスタンスにSSHできなくなった時の対処法
  • SpringBootのProfile毎にプロパティを使い分ける3つの方法
    SpringBootのProfile毎にプロパティを使い分ける3つの方法
  • [tips][perl] Perlで文字コードをいい感じに処理する方法
    [tips][perl] Perlで文字コードをいい感じに処理する方法
  • 爆速でJenkinsをマスターしよう(GitHubアカウント統合編) ~ JenkinsのGitHub Organizationの設定方法 ~
    爆速でJenkinsをマスターしよう(GitHubアカウント統合編) ~ JenkinsのGitHub Organizationの設定方法 ~
  • Go言語のためのVisual Studio Codeの設定方法
    Go言語のためのVisual Studio Codeの設定方法

Bitcoin寄付 / BTC Donation

Bitcoinを寄付しよう

BTC
Select Payment Method
Personal Info

Donation Total: BTC 0.0010

このブログの運営のためにBitcoinでの寄付を募集しています。お気持ち程度の寄付を頂けると管理者の励みになります。

Bitcoin寄付について知りたい方はこちらの記事へ

The following two tabs change content below.
  • この記事を書いた人
  • 最新の記事
KD
Twitter のプロフィール

KD

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。
KD
Twitter のプロフィール

最新記事 by KD (全て見る)

  • 2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介 - 2020年1月13日
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~ - 2019年11月4日
  • ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~ - 2019年10月30日

関連記事

  • Herokuのデプロイ先をステージング環境と商用環境で分ける方法

    何か作ったアプリケーションをデプロイするにはHerokuは非常にお手軽なデプロイ環境です。今回は、Herokuにデプロイ…

  • ChatfuelでFacebookメッセンジャーを使うChatbot簡単入門

    AIの流行りと共に人気が出ているChatbotですが、最近ではサービスを使って簡単に作れるようになりました。今回はCha…

  • [tips][Subversion] TortoiseSVNのインストール方法

    SubversionのWindows用クライアントといえば、ダントツでTortoiseSVNです。TortoiseSVN…

  • [tips][perl] Perlのサブルーチン呼び出しにアンパーサンドは必要か?

    Perlでサブルーチンを呼び出す方法はいくつかあります。ググっても正確な情報がヒットしなかったので、自分でまとめておきま…

  • [tips][bat] バッチで「ツェラーの公式」による曜日の計算をする。

    「ツェラーの公式」というのは曜日を計算するための公式です。詳しくはWikipediaに任せて、ここではバッチでのコードを…

ビットコイン取引ならここ

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • サイトマップ
  • タグ一覧
  • プライバシーポリシー
  • お問い合わせ

Copyright © 2023 KD - Casual Developers Notes