AWSでコンテナを利用する場合、複数のサービスがありますので、各サービスの特徴を整理し、比較したいと思います。
AWSで使えるコンテナサービスの一覧をまずは簡単な説明で一覧にしたいと思います。
Amazon ECR | Amazon Elastic Container Registry コンテナイメージの圧縮保存・管理・デプロイする |
Amazon ECS | Amazon Elastic Container Service 完全マネージド型のコンテナオーケストレーションサービス |
Amazon EKS | Amazon Elastic Kubernetes Service 完全マネージド型のKubernetesサービス |
AWS Fargate | Amazon ECSとAmazon EKSで動作する、コンテナ向けサーバーレスコンピューティング |
各サーバーで実行するコンテナイメージを蓄積し、管理します。
コントロールプレーンは、デプロイ・スケジューリング・スケーリングのオーケストレーション・アプリケーション管理を行います。
AWSでは、以下を選べます。
コントロールプレーン | ECS | EKS |
---|---|---|
コスト | 無料 | 必要 0.20USD/時間。1ヶ月で144USD。 |
更新 | 無し | k8sバージョンアップへの追従が必要 3カ月に1度 サポートされるのは1年間のみ |
コンテナ環境の定義 | ECS独自仕様 Webコンソール | k8sのマニフェスト |
セキュリティグループ | サービスに付与 | EC2に付与 |
CI | ビルドは、CodeBuildか、GitHub Actionsか、CircleCI レジストリは、ECR |
|
CD | CodePipeline CodeDeployを使ったB/Gデプロイ | kubectl applyの手動実行 SpinnakerやArgoCD、flux |
監視 | CloudWatch Container Insights |
Kubernetesクラスターのバージョンアップを行う際には同等の別環境を構築してバージョンアップの検証を行い、実際に本番環境のバージョンアップを行う際にはアップデートの失敗を考慮してブルーグリーンデプロイメントと呼ばれるような、「現在の本番環境を維持したまま新しい本番環境を構築して、DNSの切り替えによって環境移行を行う」ようなオペレーションが必要になります。
AWSでコンテナを支えるサービスについて ECS、EKS、Fargateの違いは? 第2回(最終回) | SunnyCloud
Docker向けのAmazon ECSとKubernetes向けAmazon EKSがあります。
小規模なコンテナではAmazon ECSを利用するのがいいです。
大規模システムでは、Amazon EKSも考えられます。
データプレーンは、コンテナの実行環境、実行サーバーを指します。
AWSでは、以下が選べます。
データプレーン | Fargate | EC2 |
---|---|---|
コスト | EC2の1.2~1.3倍 | EC2と同じ |
コンテナホスト管理 | 不要 | 必要 |
コンテナのデバッグ | 困難 ・ホストにsshできない。 ・docer ps, docker execできない | 容易 |
スケジューリング (バッチ処理) | 用意 | 別途必要 |
その他 | 立ち上がりに時間がかかる |
小規模ならサーバを意識しないサーバーレスであるAWS Fargateが楽ですが、
コンテナを長く動かす場合、Amazon EC2も候補になります。
ECSでもEKSでも、CloudWatch Container Insightsで行えます。
EKS では CloudWatch Container Insights を入れると、CloudWatch Logs に各コンテナの標準出力と標準エラー出力が転送されるようになります。
AWS CloudWatch Logsへ転送
Splunk RUL, Splank トークンパラメータを指定してログ情報を送信
従来に比べて非常に簡単にログを取り扱うことを可能にした
Fluentdに送る
元々EC2でローカルにおいていた場合、S3にデータを置き、CloudFront経由にするのがよくあるやり方です。