アプリケーションをデプロイする際、AWSではEC2しか使ったことがないため、より多様なサービスを理解したうえで効率的なサービスを選択できるように、代表的なサービスを調べてまとめます。
まず、コンピュートサービスの概念からまとめたいと思います。
コンピュートサービスとは、EC2のように演算処理を担当するサービスを指します。
S3、RDSのようなストレージサービスは、コンピュートサービスではありません。
コンピュートサービスの種類
- EC2:代表的な仮想マシン
- ECS:Dockerコンテナを実行するマネージドサービス
- EKS:Kubernetesのクラスターを実行するマネージドサービス
- Lambda:サーバーレスで関数を実行するコンピューティングサービス
- Fargate:サーバーを管理せずコンテナを実行できるサービス(ECS / EKS 基盤)
EC2
Q1. EC2とは?
- AWSが提供する仮想マシンです。
- 必要な数だけインスタンスを立ち上げて、OSをインストールし、アプリケーションを実行することができます。
Q2. 特徴は?
- 使用した分だけ費用を払います。
- 必要な時にインスタンスを立ち上げて、不要になったら停止・削除します。
- 必要なリソースに応じてスペックの調整ができます。
- AMI (Amazon Machine Image)を通じて事前にOS/ミドルウェアの構成ができます。
- セキュリティグループ、キーペアでアクセス制御ができます。
Q3. 短所
- 直接インフラの管理が必要です。
- サーバーレスと比べて起動時間やデプロイの速度が遅くなる場合があります。
ECS
Q1. ECSとは?
- AWSが提供するコンテナオーケストレーションのコンピューティングサービスです。
- Dockerコンテナを簡単にデプロイ・管理・スケーリングすることができます。
- EC2(サーバー)、Fargate(サーバーレス)の中で選べます。
Q2. ECSの長所は?
- コンテナの数が増えても、自動で管理されるため、インフラ管理の負担が軽減されます。
- コンテナが異常終了した場合、自動で再起動されます。
- トラフィックが増加した場合、オートスケーリングが行われます。
Q3. ECSの短所
- Fargateを使用する場合、直接管理することではないので、細かい設定が難しいです。
- 複雑なワークロードではEKSより細かい制御が難しい場合があります。
Q4. EC2で実行した場合
- ユーザーがインフラを直接制御できるため、柔軟性が高いです。
- OS,セキュリティ設定、カーネルなどの精密な制御ができます。
- 常に運用コストが発生します。
- モニタリングのために、CloudWatchを自分で構築する必要があります。
- カスタム環境、特定のOS・ネットワークの設定が必要な場合に適しています。
Q5. Fargateで実行した場合
- インフラはAWSで自動管理されます。
- コンテナ単位で使用した分だけ課金されます。
- CloudWatchと統合されていてモニタリングが便利です。
- 迅速な開発やインフラ管理の負担を下げたい場合に適しています。
要約
- ECSはシンプルで管理しやすい一方で、EKSは構成が複雑ですがより精密な制御ができるため、大規模なサービスに適しています。
深堀
Q3. なぜ複雑なワークロードでEKSより精密な制御が難しいのか?
- ECSはオーケストレーター自体がシンプルで、簡単な管理や手軽な運用に適しているためです。
- サービス間の複雑な連携、ノードスケジューリングなど精密な制御が必要な場合は多様な機能やツールを提供するKubernetes基盤のEKSを使用するのが適しています。
EKS
Q1. EKSとは?
- AWSで提供するKubernetes基盤のコンテナオーケストレーションサービスです。
- 直接Kubernetesクラスターをインストールしなくても、AWSで管理される形でKubernetesの環境を提供されます。
- ECSと比べてより精密な制御、多様な設定ができます。
Q2. EKSの長所は?
- 標準KubernetesのAPIをそのまま利用できます。
- Helm、Istio、ArgoCDなど多様なKubernetesエコシステムのツールが使用できます。
- ノード、ネットワーク、セキュリティなどの精密な制御ができます。
- EC2基盤、Fargate基盤の両方に対応しています。
Q3. EKSの短所は?
- 初期の学習難易度と設定が難しいです。
- コストがECSより高い可能性があります。
- 簡単なサービスには構造が過剰になることがあります。
要約
- EKSは精密な制御や複雑な構成ができてMSA構造には適していますが、簡単なサービスではオーバースペックになる場合があるため、ECSの方が適していることもあります。
Lambda
Q1. Lambdaとは?
- AWSが提供するサーバーレスコンピューティングサービスです。
- サーバーを直接管理する必要がなくて、イベントトリガーとして関数を実行します。
- 関数は自動的に実行、スケーリング、管理されます。
Q2. 特徴
- サーバーの管理が不要です。
- イベント駆動で関数が実行されます。
- 多様な言語を対応しています。
- リクエストの数に応じて、自動的に関数を並列でスケーリングして実行します。
- 基本的に15分の実行時間の制限があるため、短時間の処理に適しています。
Q3. Lambdaの長所は?
- サーバーやインフラの管理が不要です。
- 実行された分だけ課金されます。
- バックアップ、通知など小さな単位の作業に適しています。
- さまざまなAWSサービスと連携が容易です。
Q4. Lambdaの短所は?
- 実行時間が15分で制限されていて、長時間の処理には適してないです。
- ステートレス関数が基本で、複雑なステート管理には適していません。
- 大規模なサービスでは管理とデバックが難しいです。
要約
- Lambdaはイベント駆動型のサーバレスサービスで、小規模な開発やイベント中心の作業に適しています。一方で、複雑なロジックや長時間の処理には適していません。
Fargate
Q1. Fargateとは?
- AWSが提供するコンテナ実行のサーバーレスサービスです。
- EC2で直接管理せず、コンテナ単位でリソースを割り当てて実行します。
- ECSまたはEKSの実行オプションとして利用できます。
Q2. 特徴
- サーバーを構築する必要がなく、コンテナの定義だけで実行ができます。
- コンテナ単位でCPU、メモリを設定して使用した分だけ課金されます。
Q3. Fargateの長所は?
- サーバーの管理が不要です。
- コンテナ単位で管理されるため、未使用状態のインスタンスに対する課金の心配がありません。
- 各コンテナが分離された環境で実行されてセキュリティ性が高いです。
- 迅速なデプロイ、開発の生産性が向上します。
Q4. Fargateの短所は?
- 使用量に応じてEC2基盤よりコストが高くなる可能性があります。
- カーネルのチューニング、特定のOSのカスタマイズなど精密なインフラの制御が難しい可能性があります。
- 長時間の実行やリソースの最適化が必要な場合はEC2が適している場合もあります。
要約
- 管理の負担が少なく、迅速なコンテナデプロイが可能です。ただし、長期間使用する場合はEC2の方がコスト面で有利な場合があります。
- 短時間の作業、簡単なサービス、迅速なデプロイが求められる場合はFargateが適しています。
深堀
コンテナごとに実行された場合、IPアドレスはどのように設定になるのか?
- 各コンテナには格別のIPアドレスが割り当てられます。そのため、フロントエンドがドメインにリクエストするとバックエンドが適切にルーティング処理をする必要があります。




