はじめに
本記事では AWS が提供するコンテナサービス「Amazon Elastic Container Service(ECS)」のコアコンポーネントであるクラスターについて説明していきたいと思います。
初心者向けの内容となっていますが、ECS の全体像について理解しきれていないという方は先に以下の記事をご一読いただければと思います。
本記事のゴール
ECS クラスターについて設定可能なオプション群を理解し、ワークロードに適したクラスターを構築できるようになる。
クラスターとは(おさらい)
クラスターは、ECS における「コンテナを動かすためのリソースをまとめた単位」です。
簡単に言うと、「アプリケーションを実行する環境の入れ物」のようなものです。
設定可能なオプションとその選び方
クラスター作成時に設定可能なオプションについて説明していきます。
クラスター設定
ECS クラスターを作成する際、最初に設定する基本的な項目があります。
これらは後から変更が困難または不可能なものも含まれるため、作成時に適切に設定することが重要です。
クラスター名
クラスター名は作成後に変更することができないため、慎重に決める必要があります。
制約
- 文字数:最大 255 文字
- 有効な文字: a ~ z , A ~ Z , 0 ~ 9 , ハイフン(-) , アンダースコア(_)
- 一意制約
Service Connect のデフォルトネームスペース
この設定は、クラスター内で作成するサービスが Service Connect を使用する際のデフォルトの名前空間を指定するものです。
Service Connect とは?
Service Connect は ECS サービス間の通信を簡単にするための機能です。
従来の IP アドレスやロードバランサーを使った接続ではなく、わかりやすい短い名前でサービス同士を接続できます。
設定すべきかどうか?
本項目の設定に関して、いくつかの状況ごとにまとめると以下のようになります。
状況 | 推奨 | 理由 |
---|---|---|
複数の ECS サービスを連携予定 | ○ | サービス間を短い名前で簡単に接続可能 |
マイクロサービス構成を予定 | ○ | 統一された名前空間で管理が容易 |
単一サービス構成を予定 | × | サービス間通信がないため不要 |
構成未確定 | △ | 後から設定可能なため任意で設定 |
学習・検証目的 | △ | 学習・検証観点に応じて設定 |
インフラストラクチャ
ECS クラスターでコンテナを実行する基盤となるインフラストラクチャには、主に 2 つの選択肢があります。
- AWS Fargate(サーバレス)
- Amazon EC2 インスタンス
AWS Fargate(サーバレス)の特徴
- サーバレス
- EC2 インスタンスの管理が不要
- OS の更新、セキュリティパッチ適用などを AWS が自動実行
- 従量課金
- 実際に使用した CPU・メモリ・実行時間分のみ課金
- タスクが停止している間は課金されない
- 自動スケーリング
- 必要に応じてリソースが自動的に確保される
- キャパシティプランニングが不要
Amazon EC2 インスタンスの特徴
- 詳細な制御
- EC2 インスタンスタイプを自由に選択できる
- カスタム AMI(Amazon Machine Image)の使用が可能
- コスト効率
- 長時間稼働するアプリケーションでは費用を抑えられる可能性
- リザーブドインスタンスやスポットインスタンスの活用
- 高度な設定
- カスタムネットワーク設定
- 特殊なセキュリティ要件への対応
選択肢の比較
前述の特徴を踏まえて 2 つの選択肢を比較すると以下のようになります。
比較項目 | Fargate | EC2 |
---|---|---|
サーバ管理 | 不要 | 必要 |
初期設定 | タスク定義のみ | タスク定義 + EC2 設定 |
料金体系 | タスク実行時間 | EC2 インスタンス稼働時間 |
スケーラビリティ | 自動・無制限 | 手動・制限あり |
カスタマイズ性 | 限定的 | 高い |
運用不可 | 低い | 高い |
コスト効率 | 短期・変動負荷に有利 | 長期・安定負荷に有利 |
高度なインフラ管理
「キャパシティプロバイダー」を設定することで、インフラストラクチャの管理をより細かく制御することができます。
キャパシティプロバイダーとは?
キャパシティプロバイダーとは、タスクを実行するための計算リソースを管理し、自動的にスケーリングする仕組みです。
これにより、タスク数に応じてインフラを自動的にスケールイン・スケールアウトできるようになります。
種類
- FARGATE
- FARGATE_SPOT
- EC2 Auto Scaling Group
制約
マネジメントコンソール経由でクラスターを作成する場合、クラスター作成時には設定できず、クラスター作成完了後に設定を行うことになります。
モニタリング
モニタリングはコンテナ環境の信頼性、可用性、パフォーマンスを維持する上で重要な要素です。
クラスター作成時に Container Insights によるモニタリングの有効化を設定することで詳細なメトリクスとログを収集できます。
Container Insights とは?
Container Insights は CloudWatch の機能の 1 つで、コンテナ化されたアプリケーションとマイクロサービスのメトリクスとログを収集、集計、要約します。
2024 年 12 月 2 日、Amazon ECS 用にオブザーバビリティが強化された Container Insights がリリースされました。
標準版と強化版の差異
メトリクス種別 | クラスター | サービス | タスク | コンテナ | ||||
---|---|---|---|---|---|---|---|---|
標準 | 強化 | 標準 | 強化 | 標準 | 強化 | 標準 | 強化 | |
CPU 使用量 | ○ | ○ | ○ | ○ | ○ | ○ | × | ○ |
CPU 予約量 | ○ | ○ | ○ | ○ | ○ | ○ | × | ○ |
メモリ使用量 | ○ | ○ | ○ | ○ | ○ | ○ | × | ○ |
メモリ予約量 | ○ | ○ | ○ | ○ | ○ | ○ | × | ○ |
ネットワーク受信量 | × | × | ○ | ○ | ○ | ○ | × | ○ |
ネットワーク送信量 | × | × | ○ | ○ | ○ | ○ | × | ○ |
ストレージ読み取り量 | × | × | ○ | ○ | ○ | ○ | × | ○ |
ストレージ書き込み量 | × | × | ○ | ○ | ○ | ○ | × | ○ |
エフェメラルストレージ使用量 | × | × | × | × | ○ | ○ | × | × |
CPU 使用率(% 表示) | × | × | × | × | × | ○ | × | ○ |
メモリ使用率(% 表示) | × | × | × | × | × | ○ | × | ○ |
ストレージ使用率(% 表示) | × | × | × | × | × | ○ | × | × |
コンテナ再起動回数 | × | × | ○ | ○ | ○ | ○ | × | ○ |
主な違い
- 標準版:タスクやサービス全体の集計値が中心
- 強化版:個別のコンテナごとの詳細値 + % 表示が追加
- コスト:強化版はカスタムメトリクス料金が発生(標準版の約 2~3 倍)
設定すべきかどうか?
本項目の設定に関して、環境ごとにまとめると以下のようになります。
環境 | 推奨 | 理由 |
---|---|---|
本番 | 強化版 | 詳細モニタリングとトラブルシューティングに必須 |
ステージング | 標準版 | 本番相当のモニタリングが必要だがコストを考慮 |
開発 | 任意/無効 | 必要時のみ有効化することでコストを削減 |
暗号化
クラスターで実行されているタスクが使用する KMS キーを選択することで、自分のストレージを暗号化できます。
必須の設定項目ではありませんが、本番環境では設定を推奨します。
対象ストレージ
- マネージドストレージ
- Fargate エフェメラルストレージ
暗号化オプション
- AWS マネージドキー
- カスタマーマネージドキー
タグ
タグは、クラスターを識別して整理するのに役立ちます。
最大 50 個のタグを設定でき、コスト管理、アクセス制御、リソース整理に活用できます。
まとめ
-
インフラストラクチャの選択
- 管理負荷を減らしたい → Fargate
- コストを最適化したい → EC2(スポット活用)
- 両方のメリットを活かす → 混在環境
-
環境別の設定方針
- 開発:コスト優先、最小構成
- ステージング:本番相当、コストバランス
- 本番:可用性・セキュリティ最優先
-
監視とセキュリティ
- Container Insights は本番環境で必須
- KMS 暗号化はコンプライアンス要件次第