- サーバー仮想化(VM)
- ハイパーバイザー上に完全なゲストOSを構築し、その上でアプリケーションを実行。各VMは独立したカーネルを持ち、ハードウェアを仮想的に分割して利用。
- 各VMが完全なOSを必要とするため、メモリとストレージの消費量が大きい。起動に数分かかることが一般的。同じハードウェア上で稼働できるVMの数は限定的
- コンテナ化
- ホストOSのカーネルを共有し、プロセスレベルで分離されたユーザースペースを提供します。OSレベルでの仮想化により、より軽量な実行環境を実現。
- OSカーネルを共有するため、メモリ使用量が大幅に削減される。秒単位での起動が可能。同じリソースでより多くのコンテナを稼働できる
- 環境の一貫性
- 開発、テスト、本番環境で同じコンテナイメージを使用することで「開発環境では動いたのに本番で動かない」問題を大幅に削減できる。依存関係やライブラリのバージョンも含めて環境を丸ごとパッケージ化できる。
- スケーラビリティ
- 負荷に応じてコンテナインスタンスを素早く増減できます。Kubernetesなどのオーケストレーションツールと組み合わせることで、自動スケーリングも容易に実現できます。
- リソース効率
- VM(サーバー仮想化)と比較して軽量で、同じハードウェアリソースでより多くのアプリケーションを稼働させることができます。起動時間も短く、メモリ使用量も少ないです。
- 学習コスト
- Docker、Kubernetes、レジストリ管理など、習得すべき技術が多く、初期の学習コストが高い
- セキュリティリスク
- コンテナイメージに脆弱性が含まれている可能性があり、イメージの定期的な更新や脆弱性スキャンが必要
- EKS
- 標準的なKubernetesを使用(ポータビリティが高い)
- 豊富なKubernetesエコシステムを活用可能
- 高度なオートスケーリングとネットワーキング機能
- 学習コストが高い
- 運用が複雑
- コストが比較的高い(コントロールプレーン料金が発生)
- 小規模なアプリケーションには過剰な場合がある
- ECS
- ヘルスチェック・自己修復機能
- CPU・メモリ・ネットワークの細かいリソース制御
- タスク定義による宣言的な設定管理
- 設定項目が多く、初期学習コストが高い
- ネットワーク設定(VPC、サブネット、セキュリティグループ)の理解必須
- IAMロール・ポリシーの適切な設定が複雑
- トラブル発生時の調査が困難
- Lambda
- 完全サーバーレス
- 使用時間のみの課金
- 自動スケーリング
- 運用負荷ゼロ
- 実行時間制限(最大15分)
- コンテナサイズ制限(10GB)
- コールドスタートの遅延
- 長時間実行アプリケーションには不適
- Elastic Beanstalk
- 従来型アプリとコンテナ両方をサポート
- 段階的なコンテナ移行が可能
- 豊富なプラットフォームバージョン
- アプリケーションバージョン管理機能
- ブルーグリーンデプロイメント
- 設定変更の履歴管理・ロールバック
- オーケストレーション機能が弱い
- コンテナ機能が限定的(基本的な機能のみ)
- App-Runner
- 設定が非常にシンプル
- 自動スケーリング
- ソースコードから直接デプロイ可能
- 運用負荷が最小限
- 自動的なHTTPS証明書の設定
- 完全マネージドでサーバー管理不要
- 機能が限定的
- 複雑なアプリケーションには不向き
- ネットワーク設定の制限
- 比較的安価
- LightSail
- 固定料金でコスト予測が容易
- 設定が非常にシンプル
- CDN・カスタムドメインが標準装備
- 本格的な本番環境には不適
- 複雑な要件に対応困難
- 非常に基本的なコンテナ機能のみ
- オートスケーリング機能が限定的
学習コスト: LightSail < Lambda < App Runner < Beanstalk < ECS < EKS
運用負荷: Lambda < App Runner < LightSail < Beanstalk < ECS < EKS
機能の豊富さ: EKS > ECS > Beanstalk > App Runner > Lambda > LightSail