最近はプロダクションのコードをガチでは書いてなくて、GitHub やら Slack などをいじるようなコードを書いたりして自動化をやってるんだけど、サーバーは建てたくないけど何かを定期実行する cron っぽいものが欲しいなあと思い、Jets を使って作ってみた。
$ jets new awesomecron --mode job
などしてひな形を作ってから、公式ドキュメントの https://rubyonjets.com/docs/jobs/ にあるような感じでジョブごとに Rails よろしくクラスを作る感じ。
class HardJob < ApplicationJob
class_timeout 300 # 300s or 5m, current Lambda max is 15m
rate "10 hours" # every 10 hours
def dig
puts "done digging"
end
# Cron expression is AWS Cron Format and require 6 fields
cron "0 */12 * * ? *" # every 12 hours
def lift
puts "done lifting"
end
end
デプロイは jets deploy
でできるのも良くて、環境変数も .env
で制御できたり、AWS Lambda を中心としていろいろできるのも便利だし、こなれていてよかった。
リクエストを受け付けるようなやつも作れてそちらは API Gateway を使いつつ、まんま Rails っぽい仕組みのようなんだけどそっちも適当に作ってみるかなあ。何か Rails に寄せすぎなのでは?って感じはあるけど、AWS の managed をフルに使ってだいぶ良い感じに動くものができるのは期待できるので引き続き頑張ってほしい。