ぺい

渋谷系アドテクエンジニアの落書き

AWS Batch/ECS/ECR/Fargateについて調べた

コンテナコンテナコンテナ

業務でバッチ処理の一部をECS、AWS batchに移行しようぜって話になり。ついでに、Fargateやってみようぜってなったので、調べたことをメモがてらに記事にした。

コンテナ化について

Dockerfileでコンテナの定義書いて、ローカルで動かしたりするあれ

ECS

Amazon Elastic Container Service とは - Amazon Elastic Container Service

Amazon Elastic Container Service (Amazon ECS) は、クラスターで Docker コンテナを簡単に実行、停止、管理できる非常にスケーラブルで高速なコンテナ管理サービスです。Amazon ECS が管理するサーバーレスインフラストラクチャにクラスターをホストするには、Fargate 起動タイプを使用してサービスまたはタスクを起動します。また、EC2 起動タイプを使用して、現在管理している Amazon Elastic Compute Cloud (Amazon EC2) インスタンスクラスターにタスクをホストすることで、さらに強力な統制力を得ることができます。起動タイプの詳細については、「Amazon ECS 起動タイプ」を参照してください。

これを読む限り、ECSは実行可能なDockerfileさえ作れば、それをいい感じに実行出来る環境を提供してくれているものという感じ。
そのECSの実行環境、つまりインフラについては、FargateやEC2を使うということ。

EC2とFargateの違い

  • ECS on EC2 インフラレイヤーを考える必要がある。コントロールが出来るとも言えそう。
  • ECS on Fargate インフラレイヤーのこと考えなくて良い。

EC2上でやるより、Fargateのが若干コストが高い。
まあ、ただ、運用コストの人件費を考えたら、安いとも言える。

【AWS】AWS Fargateの利用料金を試算した #reinvent | Developers.IO

ECR

Amazon Elastic Container Registry とは - Amazon ECR

Amazon Elastic Container Registry (Amazon ECR) は、安全性と信頼性が高いスケーラブルな AWS Docker レジストリサービスです。Amazon ECR では、AWS IAM を使用してプライベート Docker リポジトリにリソースベースのアクセス権限が付与されるため、特定のユーザーまたは Amazon EC2 インスタンスからリポジトリとイメージにアクセスできるようになります。開発者は、Docker CLI を使用してイメージをプッシュ、プル、および管理できます。

AWSのコンテナを使ったサービスに使うイメージを管理してくれてるものがあるので、デプロイはここにする。身近なものでいうと、DockerHub。

AWS batchとは

AWS Batch とは? - AWS Batch

AWS Batch を使用すると、AWS クラウドでバッチコンピューティングワークロードを実行できます。バッチコンピューティングは、開発者、科学者、エンジニアが大量のコンピューティングリソースにアクセスするための一般的な方法です。AWS Batch は、従来のバッチコンピューティングソフトウェアと同様に、必要なインフラストラクチャの設定および管理に伴う、差別化につながらない力仕事を排除します。このサービスでは、送信されたジョブに応じてリソースを効率的にプロビジョニングし、キャパシティー制限の排除、コンピューティングコストの削減、および結果の迅速な提供を行うことができます。

AWS Batch は、リージョン内の複数のアベイラビリティーゾーン間で実行中のバッチジョブを簡略化するリージョナルサービスです。新規または既存の VPC 内に AWS Batch コンピューティング環境を作成できます。コンピューティング環境が稼働し、ジョブキューに関連付けられた後で、ジョブを実行する Docker コンテナイメージを指定するジョブ定義を指定できます。コンテナのイメージは、コンテナレジストリに保存され引き出されます。これは AWS インフラストラクチャの内にある場合も外にある場合もあります。

作成したコンテナイメージを使ってジョブを作成することが出来る。便利そう。
そして、今回やりたいのはバッチ処理は、CloudWatch EventでAWS Batchのジョブを定期実行するといった感じで、実現することが出来ます。

設定するものとしては

  • コンピューティング環境 どういう環境で動かす? Fargate?EC2?
  • ジョブキュー ジョブに依存関係つけたりしつつ、ジョブを投入できる
  • ジョブ定義 ECSタスクみたいな感じ

まとめ

  • GitHubなどにコードを上げておく
  • CIでコードからイメージを作成して、ECRへアップする
  • AWS Batchでジョブとして定義して、なにかをトリガーに実行する ※この時にどこで動かすか決める ECS on EC2 or Fargate