アプリケーションのアーキテクチャ - Amazon Elastic Container Service

アプリケーションのアーキテクチャ

次の 2 つのモデルがコンテナの実行に使用できます。

  • Fargate 起動タイプ - これはサーバーレスの従量制料金オプションです。インフラストラクチャを管理することなく、コンテナを実行できます。

  • EC2 起動タイプ - クラスターに EC2 インスタンスを設定してデプロイし、コンテナを実行します。

Amazon ECS でアプリケーションを設計する方法は複数の要因に応じて変化しますが、主な違いをもたらしているのは、使用している起動タイプです。設計プロセスでは、起動タイプごとに用意された以下のガイダンスを参考にしてください。

Fargate 起動タイプを使用する場合

Fargate 起動タイプは、次のワークロードに適しています。

  • 低いオーバーヘッドのために最適化する必要がある大規模なワークロード

  • 時折バーストが発生する小さなワークロード

  • 小さなワークロード

  • バッチワークロード

Amazon ECS を使用して AWS Fargate でアプリケーションを設計する場合、複数のコンテナを同じタスク定義に配置するか、複数のコンテナを複数のタスク定義に個別にデプロイするか、というのが主な問題となります。

次の条件が必要な場合は、コンテナを 1 つのタスク定義にデプロイすることをお勧めします。

  • コンテナが同じライフサイクルを共有している (つまり、同時に起動および終了する)。

  • 実行基盤となるホストが同じになるようにコンテナを実行する (つまり、あるコンテナが、localhost ポート上の別のコンテナを参照する) 必要がある。

  • コンテナがリソースを共有する必要がある。

  • コンテナでデータボリュームを共有している。

上記以外の場合は、個別のタスク定義でコンテナを定義することで、コンテナを個別にスケーリング、プロビジョニング、プロビジョニング解除できるようになります。

EC2 起動タイプを使用する場合

EC2 起動タイプは、料金を最適化する必要がある大規模なワークロードに適しています。

EC2 起動タイプを使用してタスク定義とサービスをモデル化する方法を検討するときは、同じインスタンスでどのプロセスを一緒に実行する必要があるか、各コンポーネントをどのようにスケーリングするかを検討します。

たとえば、以下のコンポーネントで構成されるアプリケーションがあるとします。

  • ウェブページに情報を表示するフロントエンドサービス

  • フロントエンドサービスに API を提供するバックエンドサービス

  • データストア

用途が共通するコンテナをコンポーネントにグループ化し、それらのコンポーネントを複数の個別のタスク定義に分ける必要があります。次のクラスターの例 (下図を参照) では、3 つのコンテナインスタンスのうち、3 つをフロントエンドサービスコンテナに、2 つをバックエンドサービスコンテナに、1 つをデータストアサービスコンテナに登録しています。

一緒に実行する必要のあるリンクされたコンテナなど、関連するコンテナをタスク定義にグループ化できます。例えば、ログストリーミングコンテナをフロントエンドサービスに追加して、同じタスク定義に含めることができます。

タスク定義を作成したら、それらの定義からサービスを作成して、使用可能なタスクの必要数を維持できます。詳細については、「Amazon ECS サービスを作成する」を参照してください。サービスでは、コンテナを Elastic Load Balancing ロードバランサーに関連付けることができます。詳細については、「サービスの負荷分散」を参照してください。アプリケーションの要件が変更されたら、サービスを更新してタスクの必要数を増減したり、より新しいバージョンのコンテナをタスクにデプロイしたりできます。詳細については、「サービスの更新」を参照してください。


					アプリケーションアーキテクチャの例