ここでは代表的なクラウド3社と、そのクラウドにおけるコンテナサービスを紹介する。
また、コンテナサービスを使ったアプリケーションデプロイの事例をAWS社のサービス視点で見ていく。
クラウドサービス
代表的なクラウドサービス
上位3社だけで全体シェアの約6割を占めている。
Amazon Web Services(AWS)
- シェア率 32%
- Amazon.comにより提供されているクラウドコンピューティングサービス
- ウェブサービスと称しているが、ウェブサービスに限らない多種多様なインフラストラクチャーサービスを提供している
- 開始:2006年
Microsoft Azure
- シェア率 23%
- Windowsなどの開発・販売を行っているMicrosoft社により提供されているクラウドコンピューティングサービス
- 世界中のマイクロソフトのデータセンターで大規模な仮想化を行っており、600を超えるサービスを提供している
-
Azureは英語では
アジャァ
に近い発音となる - 開始:2010年
Google Cloud Platform(GCP)
- シェア率 9%
- Googleが提供しているクラウドコンピューティングサービス
- Google検索やYouTubeなどのエンドユーザー向けのサービスでも、同じインフラストラクチャーが利用されている
- 最近名前を変えて Google Cloud(GC) になった
- 開始:2008年
各クラウドのコンテナサービス
前項の上位3社では各々多種多様なサービスが提供されている。
コンテナサービスに関しても例外ではなく、今回はAWS社のコンテナ活用例を元に
各社のコンテナサービスを紹介する。
コンテナ環境デプロイにおけるサービスの関係性(AWS社の例)
-
3つの領域に分かれている
- コントロールプレーン
- データプレーン
- イメージレジストリ
-
コンテナイメージプッシュ~起動までの流れ
- コンテナのイメージをイメージレジストリに配置(プッシュ)
-
コンテナ管理の仕組みを使ってどこでコンテナを起動するか、どの順で起動するかなどを設定する
(タスク、サービス等を定義する) - コンテナ管理場所でタスクが実行され、コンテナ稼働の仕組み(サーバ等)上でコンテナが起動される
各領域の役割とサービス例
役割 | AWS | GCP | Azure | |
---|---|---|---|---|
イメージレジストリ | コンテナの起動に必要なイメージファイルを置いておく場所 | Amazon ECR | Artifact Registry | Azure Container Registry |
コンテナ管理
(コントロールプレーン) |
コンテナを管理する
・コンテナの起動場所 ・コンテナの死活監視 ・止める条件 ・デプロイ時のコンテナ配置 etc… |
Amazon ECS
Amazon EKS | GKE | Azure Kubernetes Service |
サーバ
(データプレーン) |
コンテナが稼働するインフラを提供する
コントロールプレーンからの指示に従ってデータプレーン上にコンテナが起動される |
Amazon EC2
AWS Fargate | Compute Engine | Virtual Machines |
各クラウドのコンテナサービスの詳細
Amazon Web Services(AWS)
-
Amazon Elastic Container Registry (ECR)
- コンテナソフトウェアを公開または私的に共有して、デプロイする
- 完全マネージド型のコンテナレジストリ
利点
-
フルマネージドレジストリで労力を削減
- コンテナレジストリを動かすためのインフラストラクチャの運用やスケーリングが不要になる
- インストールや管理が必要なソフトウェアや、スケールが必要なインフラストラクチャはない
- コンテナイメージを Amazon ECR にプッシュし、 デプロイが必要なときにコンテナ管理ツールを使用してそのイメージをプルするだけ
-
コンテナイメージを安全に共有およびダウンロード
- コンテナイメージは HTTPS 経由で転送され、保管時にはイメージが自動的に暗号化される
- AWS Identity and Access Management (IAM) のユーザーとロールを使用してイメージへのアクセス権限の管理やアクセスの制御を行えるようポリシーを設定できるため、認証情報を EC2 インスタンスで直接管理する必要はない
-
高速で可用性の高いアクセスを実現
- 高度にスケーラブルで、冗長性と耐久性を備えている
- コンテナイメージは可用性が高くてアクセスしやすいため、アプリケーションに新しいコンテナを確実にデプロイできる
- パブリックコンテナイメージだけでなく、ヘルムチャートやポリシー設定などの関連ファイルを配布して、デベロッパーが使用できるようにすることができる
- コンテナソフトウェアを複数の AWS リージョンに自動的にレプリケートして、ダウンロード時間を短縮し、可用性を向上させられる
-
デプロイワークフローを簡素化する
- Amazon EKS、Amazon ECS、AWS Lambda、Docker CLI に統合されているため、開発から本稼働までのワークフローを簡略化できる
- Docker CLI を使用して開発マシンからコンテナイメージを簡単に Amazon ECR にプッシュでき、AWS の統合されたサービスはそのコンテナイメージを本番用デプロイにプルできる
- コンテナソフトウェアの公開は、ソフトウェア開発プロセスで使用される CI/CD ワークフローの 1 つのコマンドと同じくらい簡単
-
Amazon Elastic Compute Cloud (EC2)
- サーバーレベルの制御でコンテナを実行する
- 安全でサイズ変更可能なコンピューティング性能をクラウド内で提供するウェブサービス
利点
- ウェブスケールのクラウドコンピューティングをデベロッパーが簡単に利用できるよう設計されている
- シンプルなウェブサービスインターフェイスによって、手間をかけず、必要な機能を取得および設定できる
- プロセッサ、ストレージ、ネットワーキング、オペレーティングシステム、購入モデルを選択できる、幅広く奥の深いコンピューティングプラットフォームを提供する
- クラウドの中でも最速のプロセッサを提供し、400 Gbps イーサネットでのネットワークを備えた唯一のクラウド
- 機械学習トレーニングとグラフィックスワークロード向けの強力な GPU インスタンスに加え、クラウド内でインファレンスごとのコストが最も低いインスタンスを備えている
-
Amazon Elastic Container Service (ECS)
- コンテナ化されたアプリケーションを実行するか、マイクロサービスを構築する
- 完全マネージド型コンテナオーケストレーションサービスであり、コンテナ化されたアプリケーションを簡単にデプロイ、管理、スケールするのに役立つ
利点
-
既存のツールの使用
- お好みの CI/CD と自動化ツールを使用して、AWS の幅広いコンピューティングオプション全体で数千ものコンテナをすばやく起動する最も簡単な方法
-
コントロールプレーンやノードを管理する必要がない
- AWS Fargate を利用してデフォルトでサーバーレスであり、管理するコントロールプレーンやノードがなく、パッチ適用やスケールするインスタンスがないため、運用に多くの時間を費やす必要がなくなる
-
コンピューティングコストが削減できる
- プロビジョニングや自動スケーリングを自律的に処理できるため、コンピューティングコストを最大 50% 削減できる
-
セキュリティ要件や規制要件を満たしている
- ネイティブで AWS マネジメントとガバナンスソリューションが統合されているため、実質、全世界の規制当局が定める安全性やコンプライアンスのスタンダードを満たすことができる
-
AWS Fargate
- Amazon Elastic Container Service (ECS) と Amazon Elastic Kubernetes Service (EKS) の両方で動作する、コンテナ向けサーバーレスコンピューティングエンジン
- サーバーの管理が不要なコンテナの使用
利点
-
インフラストラクチャではなくアプリケーションをデプロイおよび管理
- ECS または EKS で Fargate を実行するアプリケーションの構築および運用に集中することができる
- 操作が必要なのはコンテナのみで、料金もコンテナの分のみ
- サーバーのスケーリング、パッチ適用、保護、管理にまつわる運用上のオーバーヘッドは発生しない
- コンテナが実行されるインフラストラクチャが、必要なパッチにより常に最新の状態に保たれる
-
適切なサイズのリソースと柔軟な料金オプション
- コンテナに対して指定したリソース要件に一致するよう、コンピューティングを起動およびスケーリングする(オーバープロビジョニングおよび追加サーバーの料金は発生しない)
-
設計段階からの安全な分離
- 各 ECS タスクまたは各 EKS ポッドは、専用のカーネルのランタイム環境でそれぞれ実行される
- CPU、メモリ、ストレージ、ネットワークのリソースが他のタスクやポッドと共有されることはないため、各タスクまたは各ポッドでワークロードの分離とセキュリティの向上が実現する
-
充実したアプリケーションの可観測性
- Amazon CloudWatch Container Insights など他の AWS サービスとの組み込み統合によって、すぐに利用できる可観測性を得ることができる
- オープンなインターフェイスを有する幅広いサードパーティー製ツールを介してメトリクスおよびログを収集し、アプリケーションをモニタリングすることが可能
-
Amazon Elastic Kubernetes Service (EKS)
- Kubernetes でコンテナを管理する
利点
-
可用性とオブザーバビリティを向上させる
- Kubernetes コントロールプレーンが複数のアベイラビリティーゾーンで運用される
- 異常のあるコントロールプレーンノードの検出と置換が自動的に実行され、オンデマンドかつダウンタイムがゼロのアップグレードとパッチ適用も提供される
- EKS コンソールは Kubernetes クラスターのオブザーバビリティを提供するため、問題を迅速に特定して解決することができる
-
リソースを効率的にプロビジョニングおよびスケーリングする
- Kubernetes アプリケーションをスケーリングするためにコンピューティング容量を個別にプロビジョニングする必要がなくなる
- AWS Fargate を選択して、アプリケーションのオンデマンドサーバーレスコンピューティングを自動的にプロビジョニングすることもできる
-
安全な Kubernetes 環境を得る
- 最新のセキュリティパッチが使っているのクラスターのコントロールプレーンに自動適用される
その他のサービス
Microsoft Azure
-
Azure Kubernetes Service (AKS)
- 高可用性で安全なフル マネージド Kubernetes サービス
- Kubernetes のデプロイ、管理、運用を簡略化する
機能
-
コンテナ化されたアプリケーション開発の高速化
- 最も複雑な Kubernetes アプリケーションでも簡単に定義、デプロイ、デバッグ、アップグレードでき、アプリケーションを自動的にコンテナ化できる
-
運用効率の向上
- 組み込みの自動プロビジョニング、修復、監視、スケーリングを利用できる
- スピーディな起動と実行が可能になり、インフラストラクチャのメンテナンスを最小限に抑える
-
エンタープライズ レベルのセキュリティが強化された基盤上で構築する
- デプロイ時または CI/CD ワークフローの一部として、Azure Policy で定義されたガードレールを動的に適用できる
- 検証済みのイメージのみをお使いのプライベート コンテナー レジストリにデプロイできる
-
クラウド内またはエッジで、あるいはハイブリッドとしてワークロードを実行する
- 選択した環境内で実行されるあらゆる種類のワークロードを調整する
-
Container Registry
- すべての OCI 成果物をサポートする、Docker イメージと Open Container Initiative (OCI) イメージのレジストリ
- Azure でのデプロイの種類を問わず、さまざまなコンテナー イメージを保存、管理
機能
-
コンテナー イメージ以外も格納
- コンテナワークロードを高速かつスケーラブルに取得できる
-
開発と修正プログラムの適用にパイプラインを利用
- Azure Container Registry タスクを使用して、イメージのビルド、テスト、プッシュ、Azure へのデプロイを効率化する
-
数回のクリックでグローバルにスケーリング
- 単一レジストリを有効にして、マルチマスターの geo レプリケーションによって、ユーザーとホストの場所を問わず、サービスを提供する
-
プライベート ネットワーク上にプライベート イメージを配置
- Azure Virtual Network の統合とファイアウォール規則を使用して、プライベート ネットワークのセキュリティと、geo レプリケートされたマネージド サービスの堅牢性の両方を実現する
- レジストリへのアクセスを、仮想ネットワーク内にデプロイされたサービス (Azure Kubernetes Service インスタンスなど) に制限する
-
コンテンツの信頼によってコンテンツ配信の保護を支援
- レジストリからプルするコンテンツが、ノードで実行されるコンテンツであることを確認する
- レジストリにプッシュするコンテナイメージに署名し、プル時にイメージの整合性を検証するようにイメージのコンシューマーを構成する
-
Azure Security Center の統合を利用してイメージを確認
- Azure Container Registry でイメージを継続的にスキャンする
- パッケージ内の既知の脆弱性や、コンテナイメージファイルで定義された他の依存関係を検出する
-
Azure Service Fabric
- 常時接続可能でスケーラブルな分散アプリを構築して運用
- Windows または Linux でのマイクロサービスの開発とコンテナーのオーケストレーション
機能
- マイクロサービス開発とアプリケーション ライフサイクル管理をシンプルに
- コンテナとマイクロサービスを確実にスケーリングし調整
- ステートフルなコンテナまたはマイクロサービスにより低待機時間、高スループットのワークロードに対応したデータ認識型プラットフォーム
-
あらゆるものを実行
- 言語やプログラミング モデルを自由に選択可能
-
どこでも実行可能
- Azure やオンプレミス、他のクラウドにある Windows/Linux をサポート
- 最大で数千台のコンピューターに合わせてスケーリング可能
-
Container Instances
- サーバーを管理することなく Azure でコンテナを簡単に実行
- 仮想マシンを管理したり、新しいツールを習得したりせずに、アプリをすばやく開発できる
- 自分のアプリケーションだけを、コンテナー内でクラウドで実行できる
機能
-
サーバーを管理することなくコンテナを実行
- Azure Container Instances (ACI) でワークロードを実行することで、アプリケーションの設計と開発に集中できる
- アプリケーションを実行するインフラストラクチャの管理を心配する必要はない
- 必要に応じてコンテナの俊敏性を向上
-
ハイパーバイザー分離によってアプリケーションをセキュリティ保護
- 軽量なコンテナの効率性を維持しながら、コンテナワークロードに関して仮想マシンのセキュリティを確保する
- コンテナグループごとにハイパーバイザー分離が行われるため、コンテナはカーネルを共有することなく、分離した状態で実行される
その他のサービス
-
App Service
- 独自のクラウド サービスを利用してより短時間でのアプリ作成が可能になる
- 素早く簡単に、どのプラットフォームやデバイス向けでも、エンタープライズ対応の Web アプリやモバイル アプリを作成し、作成したアプリをスケーラブルで信頼性の高いクラウドインフラストラクチャ上にデプロイできる
機能
-
クラウド内で Web アプリや API をすばやく構築
- 好きなフレームワーク言語を使用して、自分のコードやコンテナを持ち込むことができる
- Visual Studio Code と Visual Studio の緊密な統合により、開発者の生産性が向上する
- Git、GitHub、GitHub Actions、Atlassian Bitbucket、Azure DevOps、Docker Hub、Azure Container Registry を使用して CI/CD を効率化
-
エンタープライズレベルのサービス上で Web アプリをスケーリング
- すべての Azure リージョンでグローバルにスケーリングできる
- .NET Web アプリを簡単に移行
-
Azure のコグニティブおよびイベント ドリブン サービスを使用したイノベーション
- 埋め込みテキストの読み取りと音声翻訳を実現する Azure Cognitive Services により、アクセシビリティが向上する
- 1 か所で自分の API をすべて管理することで、イノベーションをすばやく実現できる
- 組み込みの監視機能を使用して運用を簡素化
-
業界最高レベルのセキュリティを使用してグローバルにスケーリングする
- Azure 自動スケーリングを使用してトラフィックの負荷に対応し、Azure Front Door を通じてトラフィックのルーティングと負荷分散を実行できる
-
Batch
- クラウド規模のジョブ スケジュール設定とコンピューティング管理
機能
- 何十台、何百台から何千台もの仮想マシンに拡張可能
- クラウド対応のバッチ アプリケーションと HPC アプリケーション
- データのステージングおよびコンピューティング パイプラインの実行
- Linux または Windows を選択してジョブを実行
- キュー内の作業の自動スケール機能
- 資本投資せずに使用分のみ従量課金
-
Azure Red Hat OpenShift
- Red Hat と連携して動作するフル マネージド OpenShift サービス
- Microsoft と Red Hat が共同で監視および運用する、高可用性を備え、フル マネージドの OpenShift クラスターをオンデマンドで提供する
機能
-
重要なことに集中する
- アプリケーションのトポロジとビルドに Web コンソールの強化されたユーザー インターフェイスを活用して、コンテナ化されたアプリケーションやクラスターリソースのビルド、デプロイ、構成、視覚化をより簡単に行うことができる
-
セルフサービスのオンデマンド アプリケーションスタックをプロビジョニングする
- Git リポジトリや既存のコンテナイメージからコードを取り込み、S2I (source-to-image) ビルドを使って構築したり、OpenShift Service Mesh、OpenShift Serverless、Knative などの開発者カタログからソリューションをデプロイしたりすることができる
-
組み込みの CI/CD を使用する
- スケーリングできるように設計されたサーバーレスの継続的インテグレーションと継続的デプロイ (CI/CD) システムである OpenShift Pipelines を使用して、アプリケーションのビルド、テスト、デプロイを自動化できる
-
迅速なクラウド開発エクスペリエンスを試す
- OpenShift 上で動作する、共同作業に対応し完全にコンテナ化された Web IDE である Red Hat CodeReady Workspaces を使用することで、一貫性があり、より安全で、ゼロ構成のクラウド アプリケーション開発を実現できる
Google Cloud Platform(GCP)
-
Cloud Run
- コンテナ化アプリを運用するためのフルマネージド環境
利点
- コンテナを秒単位で本番環境にデプロイ
-
フルマネージド
- トラフィックに応じてほぼ瞬時にゼロから自動的にスケールされるため、インフラストラクチャの管理は一切不要
-
開発者エクスペリエンスの向上
- アプリケーションの開発とデプロイが、よりシンプルかつ迅速になる
-
Google Kubernetes Engine(GKE)
- コンテナ化アプリケーションを効率的かつ安全な方法で確実に実行できる(コンテナ化アプリを運用するためのマネージド環境)
- 多数のコンテナを使って1つのサービスを実現する際に、サービスがどのようなコンテナで構成されるかを定義すれば、コンテナの立ち上げ、モニタリング、ロードバランシング、サービスの自己修復などを行うことができる
利点
- セキュリティを損なうことなくアプリ開発を高速化
-
リリース チャンネルによって運用を合理化
- ビジネスニーズに合ったチャンネル(Rapid、Regular、Stable)を選択できる
-
Google SRE のサポートにより運用を簡素化
- 自分のアプリケーションに集中して取り組む時間を取り戻すことができる
- SRE は、クラスタとそのコンピューティング、ネットワーク、ストレージのリソースを継続的にモニタリングする
-
Container Registry
- Docker コンテナ イメージを保存、管理、保護するためのレジストリ
特徴
-
安全な非公開 Docker レジストリ
- イメージのアクセス権限、表示権限、ダウンロード権限をどのユーザーに与えるかを制御できる
-
自動的にビルドしてデプロイ
- CI / CD 統合がすでに組み込まれているため、Cloud Source Repositories、GitHub、Bitbucket にコードを commit するとイメージが自動的にビルドされ、非公開レジストリに push される
-
徹底的な脆弱性スキャン
- 安全にデプロイできるコンテナ イメージを確保できる
- リスクのあるイメージをロックダウン
-
ネイティブ Docker サポート
- 必要に応じて複数のレジストリを定義できる
- 高速で可用性の高いアクセス
その他のサービス
-
Container Security
- GCP 上のコンテナ環境を保護する(ライフサイクルの各段階でのコンテナ環境のセキュリティ)
-
Cloud Build
- Docker コンテナ内でビルドステップを実行するためのソリューション
利点
- 完全にサーバーレスなプラットフォーム
- 柔軟性
-
セキュリティとコンプライアンス
- CI/CD の一環として脆弱性をスキャンし、脆弱なイメージのデプロイを自動的にブロック
-
Deep Learning Containers
- ディープ ラーニング環境向けに事前構成、最適化されたコンテナ(データサイエンスフレームワーク、ライブラリ、ツールを使ったコンテナ)
- Google Cloud 上でディープ ラーニング プロジェクトを短時間で構築可能
特徴
-
一貫した環境
- オンプレミスからクラウド化する際のポータビリティや一貫性が実現する
-
高速プロトタイピング
- 必要なすべてのフレームワーク、ライブラリ、ドライバがあらかじめインストールされており、互換性のテストも済んでいる
-
パフォーマンス最適化
- フレームワークの最新バージョンと NVIDIA® CUDA-X AI ライブラリを使用してモデルのトレーニングとデプロイを加速できる
-
Kubernetes applications
- コンテナ化されたアプリケーションをデプロイする(事前に構築されたデプロイテンプレートを備え、統合請求の機能が組み込まれているコンテナ化アプリ)
特徴
-
どこでも実行
- 異なる環境間でも、オープンソース コンテナで稼働する他のソリューションと同様のポータビリティや一貫性を備えている
-
生産性が改善
- 単なるコンテナ イメージではなく、事前に構築されたデプロイ テンプレートとデフォルト構成を備えている
-
請求を簡略化
- 使用状況測定では、どこにデプロイしても、どの環境に移行してもアプリケーションを追跡する
-
Artifact Registry
- ビルドアーティファクトと依存関係のパッケージマネージャー
- 次世代の Container Registry
- ビルド アーティファクトを保存、管理、保護する
特徴
- セキュアで優れた一貫性
- ビルドとデプロイを自動化する
- ネイティブのアーティファクトの形式をサポート
- 高いパフォーマンスと可用性
- 脆弱性スキャンの分析情報
- リスクのあるイメージのデプロイを防止
-
Knative
- Kubernetesネイティブのクラウドベースソフトウェアを作成するためのコンポーネント
- 最新のサーバーレス ワークロードをビルド、デプロイ、管理できる Kubernetes ベースのプラットフォーム
特徴
-
すべてのdeveloperに不可欠な基本要素
- Kubernetes でサーバーレス アプリケーションをビルドし、実行するのに不可欠なコンポーネント セットを提供
- アプリケーションのビルド、デプロイ、管理の「退屈だが難しい」作業に気を取られることなく、コーディングに集中できる
-
developerにやさしいソフトウェア
- 多数の煩雑なタスクの解決に重点を置いた、再利用可能なコンポーネント セットを提供
-
一般的な開発パターンをサポート
- GitOps、DockerOps、ManualOps などの一般的な開発パターンに加えて、Django、Ruby on Rails、Spring など多数のツールやフレームワークをサポートしている
-
柔軟性と制御の両立
- 既存のビルドや CI / CD のツールチェーンに接続しやすくなるように設計されている
-
自身の条件に合わせてサーバーレス ワークロードを実行
- サーバーレス ワークロードをお好みの環境で実行可能にするオープン API およびランタイム環境を提供
-
Cloud Code
- Kubernetesアプリケーションを作成、実行、デバッグするためのIDEサポート
- IntelliJ、VS Code やブラウザで、クラウドベースのアプリケーションを作成、デバッグ、デプロイするために必要なものがすべて揃っている
AWSのコンテナ環境の詳細
イメージレジストリ (ECR)
特徴
-
フルマネージドなレジストリ
- イメージを置くためのインフラやその運用が不要になる
-
イメージの安全な共有及びダウンロードができる
- イメージのhttps経由で転送され、保管時に暗号化される
- イメージへのアクセスをIAMで制御できる
-
高可用性
- イメージはs3に保存される
コンポーネント
-
レジストリ
- アカウントごとに用意されるイメージを保管する場所
-
認証トークン
- イメージのpush or pullする際に必要な認証情報
-
リポジトリ
- レジストリ内の各イメージを保管する場所
-
イメージ
- push, pullするコンテナのイメージのこと
- ECS, EKSで使用する
-
流れ
- アプリケーションのコードを含むコンテナイメージをレジストリにpush
- 実行時にレジストリからpull
- 起動
コントロールプレーン(ECS / EKS)
ECS
- AWS独自のオーケストレーションツール
- EKSに比べるとやや学習コストが低い
- 定義ファイルをクラスターに反映することで、定義ファイルの内容に従ったコンテナを稼働する
- データプレーンにはEC2/Fargateが使用可能
EKS
- オーケストレーションツールはKubenetes
- ECSと比べると学習コストは高め
- 定義ファイルをクラスターに反映することで、定義ファイルの内容に従ったコンテナを稼働する
- データプレーンにはEC2/Fargateが使用可能
サービス | クラスターの運用 | クラスターの料金 | クラスター外インフラ | CI/CDの構築 | 最小実行単位 | 日本での活用事例の数 |
---|---|---|---|---|---|---|
ECS |
• バージョンの概念無
• 運用コストがEKSに比べてかからない | 無料 |
インバウンドに関するインフラは、別途構築が必要
(KubernetesのServiceに相当する機能を持たない) | Codeシリーズで実装 |
Task
(Taskの中でコンテナが起動) | 多い |
EKS |
• kubernetesバージョンアップへの追従が必須(バージョンアップの頻度が高い)
• ECSより運用コストがかかる | 0.1USD/hour | Ingressリソースによってインバウンドを記述でき、AWSのALBやNLBと紐づけることが可能 | 自前実装 |
Pod
(Podの中でコンテナが起動) | 少ない |
選択基準(一案)
-
サービスの複雑度(クラスタ外のインフラ)
- サービス数が少なく、サービス間通信に関するインフラが定義ファイルで記述できないとしても、全体を無理なく見通せる程度のシンプルさに抑えられるのであれば、ECSを選択するのが良さそう
-
開発状況(クラスターの運用)
- サービスが開発途上で、サービスをどれだけ追加するか見通しが立たない状況では、EKSを選択するのが良さそう
- 運用・保守フェーズのものをレガシー環境から移行する際に、サービス複雑度が高くない場合は、ECSを選択するのが良さそう
-
kubernetesの習得状況(学習コスト)
- Kubernetesを十分にキャッチアップできているのであれば、EKSを選択することも現実的
(参考: AWS EKSとECSの比較と選択基準 )
データプレーン(Fargate / EC2)
Fargate
- タスクサイズによってスケール可能なデータプレーン
- 料金は若干EC2より高め
- 設定の自由度はEC2より低いが、その分管理する部分も少ない
EC2
- 仮想マシンサービス
- 料金は安め
- 設定の自由度はFargateより高いが、管理項目が多い
起動タイプ | 設定の自由度 |
インスタンス管理
(コンテナ環境のOSやDocker Engineなど、 ホストマシンの管理や運用) | セキュリティ管理 | 価格 | ネットワークモード | コンテナへのログイン方法 |
---|---|---|---|---|---|---|
Fargate | EC2に比べると低い | 不要(AWS側が管理する) | AWS側でカバーしてくれる |
タスクサイズに基づく
(EC2よりも少し高くなることが多い) | awsvpcが必要 | ECS Exec |
EC2
|
高い細かく制御・カスタマイズすることが可能
要件に合わせて様々な選択肢(ネットワーク最適化や GPU 最適化インスタンスなど)をとることができる | 必要 | 自分で管理する必要がある |
リソース使用量に基づく
(Fargateよりも安くなることが多い) | 複数のネットワークモードを使用可能 | SSH, ECS Exec |
参考