今回は、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は、コンテナ技術のパイオニアであり、アプリケーションやその依存関係をコンテナにパッケージ化し、実行環境を完全に隔離することができます。多くのクラウドプロバイダー(AWS、Azure、Google Cloudなど)は、Dockerコンテナをホストするためのマネージドサービスを提供しています。これにより、コンテナのデプロイ、スケーリング、監視などを容易に行えます。
Kubernetesは、コンテナオーケストレーションシステムであり、複数のコンテナのデプロイ、スケーリング、自動復旧、バージョン管理などを行うことができます。Kubernetesはオープンソースプロジェクトであり、多くのクラウドプロバイダーやオンプレミス環境でも利用されています。また、Kubernetesは非常に柔軟で拡張性があり、さまざまなアプリケーションのデプロイに適しています。
AWS Lambda は、 AWS が提供するサーバーレスコンピューティングサービスです。サーバーやクラスターについて心配することなく、コードを実行できます。 AWS Lambda は、イベントが発生したときにコードを実行する環境を提供します。イベントには、 HTTP リクエスト、メッセージキュー、データベースの変更など、さまざまなものがあります。 AWS Lambda は、ウェブアプリケーション、バックエンドサービス、データ分析など、さまざまな目的に使用できます。
AWS Lambda のメリットは、次のとおりです。
・サーバーやクラスターを管理する必要がない
・スケーラブルで、イベントが発生するたびに自動的にコードを実行できる
AWS Lambda を使えば、サーバーやクラスターを管理する必要がなく、サーバへの負荷対策も容易に行えます。
Amazon ECS は、Amazon EC21 と一緒に用いられ、Docker コンテナを実行および管理するためのフルマネージドサービスです。 ECS を使用すると、コンテナを作成、デプロイ、スケーリング、管理することができます。ECS は、ウェブアプリケーション、バックエンドサービス、データ分析など、さまざまな目的に使用できます。
ECS のメリットは、次のとおりです。
・コンテナの作成、デプロイ、スケーリング、管理を簡単に行える
・スケーラブルで、負荷に応じてコンテナの数を自動的に調整できる
ECS を使えば、コンテナの作成、デプロイ、スケーリング、管理を簡単に行えるので、効率的にコンテナを運用することができます。
AWS Batch は、バッチ処理ジョブをスケーラブルかつ簡単に実行するためのサービスです。 AWS Batch を使用すると、バッチ処理ジョブを作成、スケジュール、および実行することができます。 AWS Batch は、コンピューティングインスタンスの自動スケーリングをサポートしているため、バッチ処理ジョブの負荷に合わせてコンピューティングインスタンスの数を自動的に調整することができます。
AWS Batch のメリットは、次のとおりです。
・バッチ処理ジョブをスケーラブルかつ簡単に実行できる
・コンピューティングインスタンスの自動スケーリングをサポートしているため、バッチ処理ジョブの負荷に合わせてコンピューティングインスタンスの数を自動的に調整できる
AWS Batch を使えば、バッチ処理ジョブをスケーラブルかつ簡単に実行できるため、効率的にバッチ処理ジョブを運用することができます。
可用性の観点では、Lambda の方が良いです。
柔軟性の観点では、ECS と Batch が優れているといえます。
機能性の観点では、ECS と Batch がおすすめです。
これら3つは、料金形態が大きく異なり、単純な比較が難しいので、条件を設定して具体的なコストを紹介することにします。
以下では、
・128MBで十分動作可能なプロセス
・1回あたり3秒かかるAPIを想定
・毎秒1リクエスト
の場合について、1ヶ月のコストを算出することにします。
・リクエスト数
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)
2vCPU, 0.5GiBMemoryのt3.nanoインスタンス1台の場合
計: 0.0068(USD/h) * 24(時間) * 30(日) = 4.896(USD)
2vCPU, 0.5GiBMemoryのt3.nanoインスタンス1台の場合
計: 0.0068(USD/h) * 24(時間) * 30(日) = 4.896(USD)
Lambda は小規模な処理を行うときに、他のサービスと組み合わせて利用されます。具体的には、API Gateway と組み合わせた API システムや Amazon EventBridge と組み合わせた cron システム、SQS と組み合わせた非同期処理に利用されることが多いです。
ECS は長い時間がかかる大規模な処理を行うときに利用されます。具体的には、マイクロサービス2やバッチジョブなどに利用されます。
Batch は大規模かつ ECS のサービスクォータ3を超える数の並列処理を要するバッチ処理を行う場合に利用されます。具体的には、ライフサイエンスや計算化学、臨床モデリングなどの分野や金融サービスにおける取引に関するデータ処理や機密情報の分析に利用されます。 Batch は、一般的な企業が扱うにはオーバースペックであり、主に大企業や研究機関で活躍します。
サービス |
データ処理の規模 |
Lambda | 小規模 |
ECS | 大規模 |
Batch | 大規模(ECS 以上) |
本記事では、AWS が提供するコンピューティングサービスである、AWS Lambda 、Amazon ECS 、AWS Batch について解説しました。
初心者にとっては、Lambda が使いやすいこと、Batch は一般的な開発ではオーバースペックであるということを頭に入れておいてください。
AWS を使った開発が初めての方は、まず初めに Lambda を使い、慣れてきたら ECS も使ってみると良いでしょう。
各種お問い合わせ