表題の通り、AWSで定時実行するバッチの実行環境を検討中。
要は、サーバレスやらなんやら、今風のやり方でいい感じにcronできればいいなーという話。
すぐに頭に浮かんだり、ググったらすぐに出てくる選択肢は以下:
- CloudWatch Events のcron → lambdaで直接バッチ処理 or lamdaで別のサービスをキック
- lambdaの設定のcronでlambda起動 → lambdaで直接バッチ処理 or lamdaで別のサービスをキック
- EC2インスタンスのcronのlambda起動 → lambdaで直接バッチ処理 or lamdaで別のサービスをキック
EC2を使う案以外は、全部UTC(協定時間)でcronを設定しないといけない。
オペミスの可能性とかを考えると、出来るだけJST(日本標準時)で設定したい。
バッチジョブ間の依存関係はlambdaからCodePiplineとか呼び出すことで解決するかなって思ってる。
AWS Batchっていう思わせぶりなサービスがあるが、これはどちらかというと、基幹システムとかWebサービスで使う深夜バッチとかの定時実行バッチを動かすためのサービスではなく、HPCとか機械学習とかで使う、限られたコンピュートリソースを如何に最大限活用するかに力点を置いたジョブスケジューラって感じ。もちろん、CloudWatch Eventsのスケジュール実行から発火させて使ってもいいんだけどね。EC2インスタンスを未使用時間が1時間以上ならシャットダウンする機能とかもあるので、ジョブ実行に必要なスペックを持ったEC2インスタンスを立ち上げたままローカルでcronするよりはずっとコスパ良いし。
2018年末現在、AWSでJSTで定時実行する仕組みはAWSは提供していないので、Serverless Frameworkとか先人のGitHub上のライブラリとかを用いて自力で構築するしかなさそう。