🔥

Render.comでCron Jobを作成し定期タスクを実行するには

takeyuweb2023/01/23に公開

Render.comは、クラウド上のWebアプリケーションのホスティングプラットフォームです。その中でも、Cron Jobは、定期的に実行するタスクを管理するための仕組みです。

Cron Jobを使用することで、指定した時間や間隔で特定のスクリプトやコマンドを自動実行することができます。例えば、バックアップを毎日定時に取得したり、定期的にメールを送信するためのスクリプトを実行することができます。

Render.comでは、Cron Jobを管理するためのWebインターフェイスが提供されており、簡単に設定や管理ができます。また、設定をまとめたBlueprintに記載することでコード化しデプロイを自動化することもできます。

Render.com における Cron Job

  • Cron JobサービスとしてWebサービスなどと独立
  • Cron Jobサービスには、Webサービスと同様に、ラインタイム(rubyなど)とインスタンスタイプ(Starterなど。RAM容量とCPU数に影響)、コンテナ作成後の構築用コマンドなどを指定可能
  • Cron式によるスケジュールと、実行するコマンドを指定
  • 指定されたスケジュールに応じて自動的に起動し、コマンド実行を終了すると停止

実行ログ

手動実行

料金

インスタンスタイプ毎に1分あたりの料金が設定されており、Cron Job実行のためインスタンスを起動していた時間(秒単位)に応じて課金されます。(ただし最低料金として1$/month)

https://render.com/pricing#cronjobs

設定方法

webコンソール

  1. [New +] > [Cron Job]
  2. Connect a repository でデプロイするGitHubリポジトリを選択(またはGitLabおよび公開Gitリポジトリ)
  3. Cron Jobの内容を入力して登録
    項目 備考
    Environment Ruby Native Environments から選択
    Build Command bundle install; bundle exec rake assets:precompile; bundle exec rake assets:clean; 新しいバージョンのコードをデプロイしたときに実行するコマンド。
    Schedule 0 * * * * Cron式
    Command bundle exec rails runner HelloWorkData.refetch_all! Scheduleに従って実行するコマンド

設定画面

Blueprint

  1. Gitリポジトリのルートに render.yaml を作成
  2. [Blueprints] > [New Blueprint Instance]
  3. Connect a repository でデプロイするGitHubリポジトリを選択(またはGitLabおよび公開Gitリポジトリ)
  4. blueprint名とbranchを選択。 render.yaml の記載内容が正しければ Apply ボタンが押せるので押す。

Blueprint作成

render.yamlの記述方法

https://github.com/takeyuweb/my_app/blob/6ef07a023e8c31e4a1b35e172a0cb7a763ec18f8/render.yaml#L25-L37

まとめ

自前のインフラCron Jobを実行する場合、Cron実行サーバが単一障害点になったり、インスタンスのオートスケールを考慮するとジョブキューの仕組みか、AWS EventBridge + SSMなどのイベント実行基盤の設定が必要になるなど、少々面倒です。
RenderのCron Jobを利用すると、簡単に設定できる上、理解しやすいログや失敗時通知など、とても便利です。
ただし、インスタンスの起動時間に応じた課金のため頻度実行時間については注意する必要があります。

タケユー・ウェブ株式会社

Ruby on Rails や AWS が得意なWebサービス受託開発会社です。 中小規模のWebサービスの新規開発の他、他の個人開発者などから引き継いで保守運用を行ったりしています。 新規開発、お手伝いや顧問、レガシーなRailsプロジェクトの保守など、ニーズにあわせて対応できます。ご相談ください。

Discussion

ログインするとコメントできます