🔥
Render.comでCron Jobを作成し定期タスクを実行するには
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)
設定方法
webコンソール
- [New +] > [Cron Job]
- Connect a repository でデプロイするGitHubリポジトリを選択(またはGitLabおよび公開Gitリポジトリ)
- 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
- Gitリポジトリのルートに
render.yaml
を作成 - [Blueprints] > [New Blueprint Instance]
- Connect a repository でデプロイするGitHubリポジトリを選択(またはGitLabおよび公開Gitリポジトリ)
- blueprint名とbranchを選択。
render.yaml
の記載内容が正しければ Apply ボタンが押せるので押す。
render.yamlの記述方法
まとめ
自前のインフラCron Jobを実行する場合、Cron実行サーバが単一障害点になったり、インスタンスのオートスケールを考慮するとジョブキューの仕組みか、AWS EventBridge + SSMなどのイベント実行基盤の設定が必要になるなど、少々面倒です。
RenderのCron Jobを利用すると、簡単に設定できる上、理解しやすいログや失敗時通知など、とても便利です。
ただし、インスタンスの起動時間に応じた課金のため頻度や実行時間については注意する必要があります。
Discussion