t-yamamt

Mehr Sonntag

ハッピーエンド至上主義者のメモ書き

2 分で読めます

表題の通り、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上のライブラリとかを用いて自力で構築するしかなさそう。

最近の投稿

About

試してみたいなハッピーエンド!