技術ブログ AWS でバッチ処理を実装するなら? AWS Lambda vs Amazon ECS vs AWS Batch を徹底比較
AWS でバッチ処理を実装するなら? AWS Lambda vs Amazon ECS vs AWS Batch を徹底比較

AWS でバッチ処理を実装するなら? AWS Lambda vs Amazon ECS vs AWS Batch を徹底比較

AWS

今回は、AWS を用いたバッチ処理の実装 に関する内容だね!

この記事を読めば、バッチ処理の実装でどんなサービスを使えば良いかもう悩まなくて良さそうですね!

本記事で学べること

・Lambda、ECS、Batchの概要
・サーバーレスの概念
・コンテナの概念
・各種サービスの長所・短所やユースケース

はじめに

AWS は様々なコンピューティングサービスを提供しています。これは、アプリケーション開発にとってよいことだと思えますが、開発初心者にとっては混乱の元にもなります。
そこで本記事では、AWS が提供する3つのサービス、AWS Lambda、AWS ECS、AWS Batch について、

1. コストパフォーマンス

2. 柔軟性

3. 機能

の観点から、詳しく解説します。

本記事の内容を理解するには、サーバーレスとコンテナに関する知識が必要となるので、まず、サーバーレスとコンテナのサービスがどのようなものなのかを説明しようと思います。

サーバーレスサービスとは

サーバーレスサービスとは、サーバーハードウェアやインフラの管理をサービスプロバイダーが行ってくれるクラウドコンピューティングサービスです。ユーザーは、サーバーインスタンスやストレージ容量などのリソースを必要に応じて使用し、使用した分だけ課金されます。
サーバレスサービスには、以下のメリットがあります。

・インフラの管理が不要で、コストを削減できます。

・開発に集中でき、生産性を向上させることができます。

・スケーラビリティに優れており、急激なトラフィックの増加にも対応できます。

サーバレスサービスは、Webアプリケーション開発、モバイルアプリケーション開発、データ分析、 IoT など、さまざまな用途に使用されています。
サーバレスサービスの代表的なサービスには、以下のようなものがあります。

・ AWS Lambda (本記事で紹介する)

・ Microsoft Azure Functions

・ Google Cloud Functions

・ IBM Cloud Functions

サーバレスサービスは、クラウドコンピューティングの新しいトレンドであり、今後ますます普及していくと考えられています。

 

(サーバーレスのサービスに関してはこちらをチェック↓)

サーバーレスのサービスを使うなら? AWS Lambda vs Azure Functions vs Cloud Functions

AWS でサーバーレスのサービスを使うなら? AWS Lambda vs AWS Fargate

コンテナサービスとは

コンテナサービスは、コンテナ技術を活用してアプリケーションのデプロイ、実行、管理を行うためのクラウドサービスのことを指します。コンテナは、アプリケーションやその依存関係、ランタイム環境などを包含した軽量な仮想化ユニットです。コンテナサービスを利用することで、アプリケーションをより効率的にデプロイし、スケーラビリティを向上させ、管理を簡素化できます。
具体的な利点には、以下のようなものがあります:

・アプリケーションの環境をコンテナに包含するため、環境の差異による問題を軽減することができます。

・コンテナは軽量で高速に起動し、リソースの効率的な利用が可能です。

・スケーラビリティが向上し、負荷の増減に柔軟に対応できます。

・マイクロサービスアーキテクチャの実現に適しており、疎結合なアプリケーションの構築が容易です。

ただし、コンテナサービスを導入する際には、セキュリティやネットワークの設定、監視、管理などに注意を払う必要があります。適切な設計とベストプラクティスを実践することが重要です。

代表的なコンテナサービスとしては、Docker や Kubernetes(クーバネティス)があります。
 

Docker

Dockerは、コンテナ技術のパイオニアであり、アプリケーションやその依存関係をコンテナにパッケージ化し、実行環境を完全に隔離することができます。多くのクラウドプロバイダー(AWS、Azure、Google Cloudなど)は、Dockerコンテナをホストするためのマネージドサービスを提供しています。これにより、コンテナのデプロイ、スケーリング、監視などを容易に行えます。
 

Kubernetes

Kubernetesは、コンテナオーケストレーションシステムであり、複数のコンテナのデプロイ、スケーリング、自動復旧、バージョン管理などを行うことができます。Kubernetesはオープンソースプロジェクトであり、多くのクラウドプロバイダーやオンプレミス環境でも利用されています。また、Kubernetesは非常に柔軟で拡張性があり、さまざまなアプリケーションのデプロイに適しています。
 

AWS Lambda とは

AWS Lambda は、 AWS が提供するサーバーレスコンピューティングサービスです。サーバーやクラスターについて心配することなく、コードを実行できます。 AWS Lambda は、イベントが発生したときにコードを実行する環境を提供します。イベントには、 HTTP リクエスト、メッセージキュー、データベースの変更など、さまざまなものがあります。 AWS Lambda は、ウェブアプリケーション、バックエンドサービス、データ分析など、さまざまな目的に使用できます。
AWS Lambda のメリットは、次のとおりです。

・サーバーやクラスターを管理する必要がない

・スケーラブルで、イベントが発生するたびに自動的にコードを実行できる

AWS Lambda を使えば、サーバーやクラスターを管理する必要がなく、サーバへの負荷対策も容易に行えます。

Amazon ECS とは

Amazon ECS は、Amazon EC21 と一緒に用いられ、Docker コンテナを実行および管理するためのフルマネージドサービスです。 ECS を使用すると、コンテナを作成、デプロイ、スケーリング、管理することができます。ECS は、ウェブアプリケーション、バックエンドサービス、データ分析など、さまざまな目的に使用できます。
ECS のメリットは、次のとおりです。

・コンテナの作成、デプロイ、スケーリング、管理を簡単に行える

・スケーラブルで、負荷に応じてコンテナの数を自動的に調整できる

ECS を使えば、コンテナの作成、デプロイ、スケーリング、管理を簡単に行えるので、効率的にコンテナを運用することができます。

AWS Batch とは

AWS Batch は、バッチ処理ジョブをスケーラブルかつ簡単に実行するためのサービスです。 AWS Batch を使用すると、バッチ処理ジョブを作成、スケジュール、および実行することができます。 AWS Batch は、コンピューティングインスタンスの自動スケーリングをサポートしているため、バッチ処理ジョブの負荷に合わせてコンピューティングインスタンスの数を自動的に調整することができます。
AWS Batch のメリットは、次のとおりです。

・バッチ処理ジョブをスケーラブルかつ簡単に実行できる

・コンピューティングインスタンスの自動スケーリングをサポートしているため、バッチ処理ジョブの負荷に合わせてコンピューティングインスタンスの数を自動的に調整できる

AWS Batch を使えば、バッチ処理ジョブをスケーラブルかつ簡単に実行できるため、効率的にバッチ処理ジョブを運用することができます。

比較

可用性

  • Lambda では、メモリが設定した値で足りなくなった場合、コンソール上でメモリ量を増やせすことができ、毎秒のリクエスト数が突然増えても問題なく処理されます。
  • ECS では、メモリが足りなくなった場合、メモリ量をコンソールで増やすことはできません。新規にインスタンスを起動し、プログラムを実行できる環境を再度整えてからプログラムを実行する必要があります。
  • Batch も ECS と同じです。

可用性の観点では、Lambda の方が良いです。

 

柔軟性

  • Lambda の実行時間は15分以内に制限され、開発言語も、nodeJS 、Python 、Go 、Java 、Ruby 、Net 、C# に制限されます。ただし、開発で必要な言語は基本的にそろっていると考えて良いです。
  • ECS や Batch は、必要に応じてサーバーのスペックを自由に選ぶことができます。

柔軟性の観点では、ECS と Batch が優れているといえます。

 

機能性

  • Lambda は処理時間が15分を過ぎたら強制的に停止されます。
  • ECS は15分以上の処理ができます。
  • Batch は15分以上の処理ができ、さらに Amazon ECS よりも大規模な処理に適しています。

機能性の観点では、ECS と Batch がおすすめです。

 

コスト

  • Lambda は、必要なときにしか起動しないため、料金は使用時間のみで決まります。 さらに、毎月、リクエスト100万件は無料枠で提供されます。
  • ECS は、EC2 インスタンスを起動している時間も課金されます。
  • Batch は、 コンピューティングリソース分の料金がかかります。

これら3つは、料金形態が大きく異なり、単純な比較が難しいので、条件を設定して具体的なコストを紹介することにします。
以下では、

・128MBで十分動作可能なプロセス

・1回あたり3秒かかるAPIを想定

・毎秒1リクエスト

の場合について、1ヶ月のコストを算出することにします。
 

Lambda

・リクエスト数
 86,400(回/日) * 30(日) = 2,592,000(回)
 2,592,000(回) – 1,000,000(回)※無料枠 = 1,592,000(回)
 1,592,000(回) / 1,000,000(回) * 0.20(USD) = 0.3184(USD)
・実行時間
 0.128(GB/回) * 3(秒) = 0.384(GB秒/回)
 0.384(GB秒/回) * 86,400(回/日) * 30(日) = 995,328(GB秒)
 995,328(GB秒) – 400,000(GB秒)※無料枠 = 595,328(GB秒)
 595,328(GB秒) * 0.0000166667(USD) = 9.9222(USD)

計: 0.3184 + 9.9222 = 10.2406(USD)

 

EC2

2vCPU, 0.5GiBMemoryのt3.nanoインスタンス1台の場合

計: 0.0068(USD/h) * 24(時間) * 30(日) = 4.896(USD)

 

AWS Batch

2vCPU, 0.5GiBMemoryのt3.nanoインスタンス1台の場合

計: 0.0068(USD/h) * 24(時間) * 30(日) = 4.896(USD)

ユースケース

Lambda は小規模な処理を行うときに、他のサービスと組み合わせて利用されます。具体的には、API Gateway と組み合わせた API システムや Amazon EventBridge と組み合わせた cron システム、SQS と組み合わせた非同期処理に利用されることが多いです。

  • API Gateway と組み合わせた API システムは、主にAPIの管理や実行を容易にしてくれる仕組みを指します。
  • Amazon EventBridge と組み合わせた cron システムは、例えば、1日に1回の夜間のデータベース定期メンテナンスや、1時間ごとに売上の集計をコンピュータに自動で行わせることができます。
  • SQS と組み合わせた非同期処理は、 EC サイトのクレジットカード決済処理に使われます。

ECS は長い時間がかかる大規模な処理を行うときに利用されます。具体的には、マイクロサービス2やバッチジョブなどに利用されます。

Batch は大規模かつ ECS のサービスクォータ3を超える数の並列処理を要するバッチ処理を行う場合に利用されます。具体的には、ライフサイエンスや計算化学、臨床モデリングなどの分野や金融サービスにおける取引に関するデータ処理や機密情報の分析に利用されます。 Batch は、一般的な企業が扱うにはオーバースペックであり、主に大企業や研究機関で活躍します。

 

サービス

データ処理の規模

Lambda 小規模
ECS 大規模
Batch 大規模(ECS 以上)

まとめ

本記事では、AWS が提供するコンピューティングサービスである、AWS Lambda 、Amazon ECS 、AWS Batch について解説しました。
初心者にとっては、Lambda が使いやすいこと、Batch は一般的な開発ではオーバースペックであるということを頭に入れておいてください。
AWS を使った開発が初めての方は、まず初めに Lambda を使い、慣れてきたら ECS も使ってみると良いでしょう。

語句の説明

  1. 仮想サーバを構築できるサービス。
  2. 複雑なアプリケーションを単純な複数のサービスに分け、それぞれ独立して開発を進めていく手法であり、バッチジョブとは、事前に定義され、まとめて処理されるタスクの集まりのこと。
  3. AWS のサービスごとに定められた制限のこと。

SNSでシェアする

各種お問い合わせ

お問い合わせ・ご相談


開発に関することならお気軽にご相談ください。
お見積もり依頼も可能です。

お問い合わせする

私たちは一緒に働く
メンバーを探しています。


私たちはミッション・価値観への共感を何よりも大切に考え、
一緒に働くメンバーを探しています。

採用情報をみる