AWS batch + ECRなのか、fargate (EC2)なのか

はじめに

定期的にコンテナを立ち上げて処理を流したい。
AWS batch + ECRというアプローチもあれば、
fargate (EC2)でタスクスケジュールというアプローチもある。

それぞれメリットデメリットをまとめた。

AWS batchについて

aws batch 実態はEC2である。
CloudWatch Eventにより発火させることがユースケースとしては多い。

AWS batchがEC2を起動して、コンテナをとってきて、、、という作業になるため、
10分ほどかかる可能性がある。

EC2のスポットインスタンスを利用することもできる
当然スポットインスタンスなので、突然処理が止まってしまう事もあるが、
AWS batchには最大5回のリトライ設定も可能。
jobのキューイング機能もある。

diskが難しくなったらEBSを増やせばよい。
現状、EFSとかをattachできない。

fargateについて

retry処理がない。
AWS Step Functionsと組み合わせることができ、そちらにリロードできる

LambdaとLambdaを繋げるのに使われることが多いが、
step functions にfargateを使うことで、ジョブをコントロールすることが可能
fargateのdiskは10G それ以上増やすことは現状できない。

AWS batch/fargate同じ部分

fargate/EC2 ログは標準出力になる。

コンテナの作成について

AWS batchにしろ、fargateにしろdocker imageを作る必要がある。
その作成のベストプラクティスについて

現状のベストプラクティス

CodePilpelineを使い以下のフローの中でコンテナのpushまで入れる

* source code
* ビルド
* デプロイ
を一貫して行うことができる

実現しやすい方法

コンテナ作れる人に適切にroleを設定する
コンテナを作る環境をつくり、そこでroleを付与する

creadentioalの管理

タスクのところで環境変数で持てるので、
そこで適当な文字を入れる(仮にAAAAA)。
Secret manager に適当な文字(仮にAAAAA)と、実際のパスワードを記載する。