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を付与します。

creadenrial の管理

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