LoginSignup
1

More than 3 years have passed since last update.

posted at

updated at

Organization

ECS on Fargateでバッチを動かす

Fargateでバッチを動かすときにググってもちょうどいい事例が見つからず少し試行錯誤して動くようになったので、これからやる人が私と同じ思いをしなくて済むようにここに記しておく。
EKS on Fargateがre:inventで発表されて使えるようになったので念のためタイトルをECS on Fargateにしています。
まず最初に結論から。

結論

Fargateでバッチを動かすときの肝は登録数(Desired Count)を0にすること
fargate.png

構成

ざっくりですが構成
fargate batch.png

  1. GitHub ActionsでS3にコードを移して
  2. ファイルの更新をトリガーにCodeBuildでコンテナのビルド
  3. CodeDeployでECSサービスの更新
  4. ECSのタスクスケジューリング(CloudWatch Events)でバッチ実行

CodePipelineでやってることを全部GitHub Actionsでやることも可能なんですが、どっちでやるのがいいんですかね

GitHub ActionsやGolangのChannelについても詳しく書きたかったんですが、ネットの海に広がっているので割愛

本題のFargateでバッチを動かす

概要

  1. サービス作成時に登録数(Desired Count)を0にする
  2. タスクスケジューリングでCloudWatch Eventsのルールとターゲットを設定して、ECSタスクを実行する

サービス作成時に登録数(Desired Count)を0にする

サービス作成時にタスクの数を1以上にしてしまうとバッチが延々と実行されてしまうので0に設定します
Desired Count.png

タスクスケジューリングを設定する

こちらもネットの海に広がっているので詳細は割愛しますが、CloudWatch Eventsのルールとターゲットを設定すると、ECSタスクが実行されるようになります
タスクスケジューリング.png

まとめ

コンテナは本当に楽ですね
EC2管理しなくていいだけで本当にありがたい
アプリケーション実行環境は各クラウド早く標準化対応してもらってデータストアなんかのサービスでクラウドを選ぶ時代が来て欲しいですね

AWSでバッチを作るなら

他にもLambda, AWS Batchと選択肢がありますが、比較記事を弊社の先輩が書いてくれているのでよろしければ参照ください
現状ではFargateが多くの状況に適していると思います
FargateなかったときにAWS Batch使ったことありますが大変でした

AWSでサーバレスな定期バッチ環境を作るには結局どれ使えばいいの?(Lambda vs Fargate vs Batch)
https://qiita.com/kazuktym/items/0ecc1dbf98c3c3623473

それではみなさん良いクリスマスと良いお年を!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1