🦁

Fargate上でAWS Batchを動かす

2023/06/29に公開

「Fargate上でAWS Batchを動かす」

というのがよくわからない。なぜわからないかと言うと、FargateもAWS Batchも知らないため。

まずFargateについて理解する

Fargate

https://www.youtube.com/watch?v=rwwOoFBq2AU

この動画がオフィシャルなものでおそらくわかりやすい。が、長い。

「サーバー管理なしのコンテナ実行コンピューティングエンジン」で「ユーザー側がEC2インスタンスを管理するような手間がなくなる」というものらしい。

コンテナ...と言う用語が出てくる。

このコンテナに関してAWSにどう言うサービスがあるのか、外堀から埋めながら理解を進める。

AWS上のコンテナ関連サービスとしては以下の3種類が存在しているらしい。

  • オーケストレーション
  • 実行環境
  • イメージレジストリ

オーケストレーションを理解するには、「コントロールプレーン」と「データプレーン」2つの用語を理解すると良さそう。そして、それはそれまでのどう言う課題を解決しているか、というのを理解しよう。

脱線してしまった。さてFargateについて簡単に理解していきたい。

Fargateの位置付けとしては、こう言う感じらしい。

コンテナオースケストレーター(コントロールプレーン)

  • ECS
  • EKS

コンテナの実行環境(データプレーン)

  • Fargate
  • EC2

「コントロールプレーン」 x 「データプレーン」という組み合わせらしいので、

  • ECS on EC2
  • ECS on Fargate

というような言い回しができる。

「ECS on EC2」はコンテナの実行環境としてEC2を選択していて、それらのおそらく複数台数あるEC2の実行状態の管理はECSで行っているというもの。

これに従う場合、「ECSとFargateの違い」というのは過ちであることがわかる。なぜなら、Fargateは実行環境とあり、ECSはオーケストレーターなので同時に使うような関係になるからだ。

ECS on Fargateについては以下の動画が参考になる。

https://youtube.com/watch?v=5fXwkTgWrjw&feature=share7

ここまででFargateのことがなんとなくわかってきた。

これからようやくAWS Batchに取り掛かろう。

AWS Batch

ここに、公式のドキュメントがある。

https://docs.aws.amazon.com/ja_jp/batch/latest/userguide/fargate.html

AWS Batch でコンテナを実行できるテクノロジー

Fargateをいつ使うべきか
ほとんどのシナリオで Fargate を使用することをお勧めします。Fargate は、コンテナに指定したリソース要件に厳密に一致するようにコンピューティングを起動し、スケールします。Fargate を使用すると、追加のサーバーに対してオーバープロビジョニングまたは料金を支払う必要はありません。また、インスタンスタイプなど、インフラストラクチャ関連のパラメータの詳細について心配する必要はありません。

AWS Batchを使う場合は、Fargateを組み合わせるのが定番らしい。Fargateはコンテナの実行環境ということを学んできた。それを踏まえると、AWS Batchはコンテナ実行環境をなんらかの方法で管理するものなのだろう。その管理についてさらに理解を深めていく。

F&Qsがわかりやすいかもしれない。

https://aws.amazon.com/jp/batch/faqs/

ユースケースから理解しよう。

AWS Batch はどのようなユースケースに最適ですか?
AWS Batch は、複数のジョブを並行して実行することによりスケールするバッチコンピューティングおよびアプリケーション向けに最適化されています。バッチコンピューティングに適している用途には、深層学習、ゲノム解析、金融リスクモデル、モンテカルロシミュレーション、アニメーションレンダリング、メディアのトランスコーディング、イメージ処理、エンジニアリングシミュレーションなどがあります。

ふむ。

さらに特徴のセクションを見るとなんとなく理解できてくる。

AWS Batch はコンピューティング環境とジョブキューを管理し、Amazon ECS、Amazon EKS、AWS Fargate を使用して、任意のスケールの数千ものジョブを、スポットリソースまたはオンデマンドリソースから選択して、簡単に実行できます。お客様は、バッチジョブを定義してキューに送信するだけです。これに対して、AWS Batch は、ジョブの実行場所を選択し、必要に応じてさらに AWS キャパシティを起動します。ジョブの進捗状況は、AWS Batch で慎重にモニタリングされます。不要になったキャパシティは、AWS Batch で削除されます。AWS Batch では、パイプラインやワークフローの一部であるジョブを送信する機能も提供されます。これにより、ジョブ間に存在する相互依存性をジョブの送信時に示すことができます。

バッチ処理を実行したらあとそれをdocker imageにしておく。。それはFargate上で実行される。docker imageとしてpullして、実行するという形を取る。
AWS Batchはわれわれにそのバッチ処理に特化したサービスインターフェースを提供してくれている、というような感じなのだろう。

AWS Batch の料金について教えてください。
AWS Batch に対する追加料金はありません。バッチジョブを保存したり実行したりするために作成した AWS リソース (EC2 インスタンス、AWS Fargate など) に対してのみ料金が発生します。

なんと無料らしい。

参考

Discussion