AWSにおけるコンピューティングサービスのアーキテクチャ選択

こんにちは。マネックス・ラボのIです。

ある時、ふと「サーバーレス、コンテナ、インスタンスという異なるコンピューティングサービスのアーキテクチャをしっかりと比較したことがなかったな」と気付きました。これを機に整理し、今後の参考にできればと考え、ブログ記事としてまとめてみました。

調べた結果それぞれのアーキテクチャを単純に比較するのは難しいと感じましたが、理解を深めるために、パフォーマンス、コスト、構築のしやすさ、スケーラビリティ、運用の手間といった観点から、広く利用されているAWSにおけるサーバーレス、コンテナ、インスタンスのメリット・デメリットを整理してみました。以下に解説します。

また、調査を進める中でわかったのは、デメリットに対しては、解決策となる技術も存在しているという点です。今後の技術の進展やAWSのアップデートによって、この結果が変わる可能性もあるかと思いますので、あくまで現時点でのまとめとして参考にしていただければ幸いです。

よくまとまっているAWSドキュメントもありましたので、最初にご紹介させていただきます。

docs.aws.amazon.com

1. サーバーレス(例:AWS Lambda)

サーバーレスアーキテクチャでは、インフラ管理をAWSに任せ、アプリケーションコードに集中できる設計です。代表的な例であるAWS Lambdaで記述します。

メリット
  • パフォーマンス
      リクエストに応じて自動でスケーリングし、処理能力を動的に調整します。短期間の高負荷や短時間のリクエストに最適です。Lambdaのスケーリングは10秒ごとに最大1000の実行環境が追加されますが、同時実行数のデフォルト上限は1000です。このため、リクエストが集中しても自動的に対応できますが、上限には注意が必要です。

    docs.aws.amazon.com

  • 構築の容易さ
      サーバーの設定やインフラ管理が不要で、コードのみを管理します。デプロイは自動化されており、AWSサービス(API Gateway、DynamoDBなど)と簡単に統合できますが、Lambda関数自体には設定が必要です。要件に応じてその設定を調整できます。
  • コスト効率
      使用した分だけ課金される従量課金制です。サーバーがアイドル状態のときにはコストが発生しません。スケーリングも自動で行われ、特に低トラフィック時に大幅なコスト削減が可能です。コールドスタートの問題もありますがProvisioned Concurrency(PC)を使用すると回避できる代わりに、追加コストが発生します。

    docs.aws.amazon.com

 

デメリット
  • パフォーマンスの制約
      Lambdaの実行には最大15分という制約があるため、長時間処理や大規模なバッチ処理には向いていません。コードを分割してStep Functionsを用いて回避できる可能性はあるようですが構成が複雑になる点は否めないかと思います。
  • コールドスタート問題
      関数が一時停止した場合、新しいリクエストを受け付ける際にコールドスタートが発生し、100ミリ秒から1秒程度の遅延が生じることがあります。この遅延が重要なアプリケーションに影響しますが、Provisioned Concurrency(PC)を使用することでこの遅延を削減できます。繰り返しにはなりますがProvisioned Concurrency(PC)にはコストがかかります。
  • カスタマイズ性の制限
      AWS Lambdaはマネージドサービスのため、インフラ管理が不要な点が大きな利点ですが、特定の要件に応じたインフラ設定やカスタマイズは難しいケースもあると思います、インフラの細かな調整が必要な場合は他のアーキテクチャを検討する必要があります。またlambdaでもコンテナイメージをサポートしているようなので、その点についてはリンクを共有します。

    aws.amazon.com

 

2. コンテナ(例:Amazon ECS, Amazon EKS)

コンテナアーキテクチャは、アプリケーションを独立したパッケージとして実行し、軽量で効率的なリソース管理を可能にする仕組みです。代表的なECS/EKSは、EC2インスタンスベースでの運用も可能ですが、AWS Fargateはサーバーレス基盤となり、コンテナのインフラ管理が不要なため、ユーザーがリソース管理から解放されます。

メリット
  • 構築の柔軟性
      コンテナはOS、ライブラリ、アプリケーションを一つの単位にまとめて実行できるため、依存関係の違いによる環境のズレを解消できます。ECSやEKSを使って、複数のコンテナをオーケストレーション(システムを自動的に調整)し、動的に管理できます。aws.amazon.com
  • パフォーマンス  
      コンテナはリソース効率が高く、アプリケーションを迅速にスケールさせることができます。Fargateを使用する場合は、インフラ管理も不要で、自動でスケーリングが行われます。これにより、運用負担が軽減され、負荷分散やデプロイの高速化が可能です。

    docs.aws.amazon.com

  • スケーリング
      AWS Fargateは、コンテナのインフラを完全に自動化し、サーバレスのように動作します。一方で、EC2ベースのECSやEKSはインスタンスのスケーリングが必要ですが、オーケストレーションツール(例: Kubernetes)を活用して自動スケーリングを行うことも可能です。
デメリット
  • 構築の複雑さ
      AWSにおけるコンテナ技術は柔軟であるがゆえに複雑な面もあるのかと思います。例えば、ECSはシンプルで比較的簡単に始められますが、Kubernetes(EKS)を利用する場合は、オーケストレーションの設定や管理が高度で、専門的な知識が求められます。ただし、Kubernetesの移植性や柔軟性を活用することで、複雑なマルチクラウド環境や大規模なシステムでも対応できる利点があります。Fargateを使用することでインフラ管理が簡素化される一方、EC2ベースのコンテナはサーバー管理が必要です。
  • コストの複雑さ
      小規模な環境ではFargateが優れたコスト効率を発揮しますが、大規模な運用ではEC2インスタンスの方がコスト効率が高くなる可能性があるかと思います。但しEC2はインフラ管理のコストが発生するため、最適な選択は運用規模や利用状況により異なります。

3. インスタンス(例:Amazon EC2)

インスタンスの代表的なサービスであるEC2は、クラウド上で仮想サーバーをプロビジョニングし、柔軟にカスタマイズできるアーキテクチャです。インフラ全体の設定やスケーリングがユーザーの管理下にあります。

メリット
  • パフォーマンス
      EC2インスタンスは、高いパフォーマンスを提供します。特にカスタム構成(CPU、メモリ、GPUなど)や高負荷のワークロードに対応でき、特殊なニーズに応じたリソースの選択が可能です。機械学習や大規模なデータ処理には最適です。

    aws.amazon.com

  • カスタマイズ性
      OS、ソフトウェア、ネットワーク設定を自由にカスタマイズできます。オンプレミスのようなインフラ運用が可能で、非常に高い自由度が求められる環境に適しています。
  • ステートフルなアプリケーションに最適
      長期間にわたりデータやセッションを保持するステートフルなアプリケーションに適しており、インフラの長期的なチューニングが可能です。
  • 移行容易性
     既存のオンプレミス環境で動作するOS上のアプリケーションをクラウドに移行する場合、EC2インスタンスは最も移行が容易な選択肢となる可能性があります。同じOSが選択できれば既存のアプリケーションを大幅に改修することなくクラウドに移行できます。
デメリット
  • 構築・運用のコスト
      EC2インスタンスの管理は、ユーザーがインフラ全体を管理する必要があり、OSのメンテナンスやセキュリティ管理、スケーリング設計などが求められるため、運用負担が大きくなります。
  • スケーラビリティ
      EC2インスタンスのスケーリングにはコンテナと比べるとスケールの即時性は低くなりがちですが、これはシステムの要件次第で問題にならないケースもあります。
  • 料金コスト
      EC2インスタンスは稼働時間ベースで課金されるため、アイドル状態でもコストが発生します。長期間の利用やリザーブドインスタンスの活用でコストを最適化できますが、短期的な運用や頻繁に負荷が変動するシステムには不向きです。

結論

最適なアーキテクチャの選定は、システムの要件、スケーラビリティ、運用体制、移行の容易さなどを考慮して決定する必要があり、AWSには様々なサービスやオプションがあります。

その為、並列で比較して比べるのは難しいと感じましたが、あくまで私個人の見解として最後に特徴を纏めて記述いたします。

  • 短期間・軽量な処理や、開発効率やコスト効率が重視される場合は、サーバーレス(Lambda)が最適かと思います。特にAPIやイベント駆動型のシステムに適しており、インフラ管理が不要なため、運用コストも低減できます。
  • 中規模のスケールアウトアプリケーションには、コンテナ(ECS・EKS)が適していると思います。AWS Fargateを使えば、サーバーレスのようなインフラ構築・管理の手間を省きながら、コンテナの利点を活かした構築・運用が可能です。また難易度は高そうですがEKSを選択した場合は移植性の高さも魅力だと思います。
  • 高負荷処理やステートフルなアプリケーション、特にOSにて柔軟なカスタマイズや特定のリソース要件がある場合は、インスタンス(EC2)を選択するのが最適です。インフラ全体を自由に設計でき、従来の仮想マシン運用に慣れている場合は管理が容易です。
- サーバーレス(Lambda) コンテナ(ECS・EKS) インスタンス (EC2)
パフォーマンス 短時間・軽量タスクに最適 コンテナ軽量パッケージでスケーリングが高速で効率的 単体では一番高性能・高負荷タスクに最適、スケーリングも可能だが、ワークロードによっては起動に時間がかかる可能性あり
構築・管理の特徴 コードのみでも構築可能

ECSやEKS、EC2やFargate等の選択により変わる、柔軟さがAWSコンテナサービスの魅力だと思うが、その点がやや複雑さも生む

インフラ全体の構築・管理が必要
カスタマイズ性 低い 中程度・環境の統一が容易 サーバ単体で見た場合は非常に高い
主なユースケース API、バックエンド処理、イベント駆動 API、マイクロサービス、CI/CD 高負荷アプリ、機械学習

本当はコストの比較なども入れたかったのですが、難しいので断念しました。。

最後に

私たちは、AWS上で効率的かつスケーラブルなシステムを構築し、様々なユースケースに対応しています。最適なアーキテクチャ選定のノウハウを活かし、要件に応じたソリューションを提供するだけでなく、チーム内でも最新の技術を駆使した開発環境を提供しています。

もし、クラウド技術に興味があり、私たちと一緒にクラウドソリューションを創りたい方がいれば、ぜひ採用ページをご確認ください。あなたのスキルを活かして、私たちとともに新しい挑戦をしましょう。

石垣 慎介システム開発三部 マネックス・ラボ

Â