はじめに
Amazon ECS(Elastic Container Service)は、コンテナ化されたアプリケーションのデプロイと管理を簡素化するサービスです。
特に、Amazon EC2 上で動作する ECS タスクでは、タスクごとに異なるネットワークモードを選択できるため、アーキテクチャ設計において重要な要素となります。
本記事では、ECS タスクにおけるネットワークモードの違いと、それぞれの特徴について解説します。
書こうと思ったきっかけ
過去のハッカソンにおいて ECS を利用した際、タスク間通信や外部アクセスの要件に応じてネットワークモードを選定する必要がありました。
しかし、ネットワークモードごとの仕様や制約についての情報が散在しており、明確な判断が難しいと感じました。
そこで、自身の整理も兼ねて各ネットワークモードの違いを分かりやすくまとめようと思ったのがきっかけです。
ECSにおけるネットワークモードの概要
Amazon EC2 インスタンスでホストされる Amazon ECS タスクのネットワーク動作は、タスク定義におけるネットワークモードの設定に依存します。Amazon ECS では、特別な理由がない限り、awsvpc
ネットワークモードの使用が推奨されています。
以下は、Amazon ECS で利用可能なネットワークモードとその特徴をまとめたものです。
参考文献
1. awsvpc(推奨)
- Linux コンテナ対応: はい
- Windows コンテナ対応: はい
-
特徴:
- タスクごとに独自の Elastic Network Interface (ENI) とプライベート IPv4 アドレスが割り当てられます。
- EC2 インスタンスと同じレベルのネットワーク構成が可能になります。
- セキュリティグループ単位で細かなアクセス制御が可能です。
2. bridge
- Linux コンテナ対応: はい
- Windows コンテナ対応: いいえ
-
特徴:
- タスクは、EC2 インスタンス内の Docker の組み込み仮想ネットワーク上で実行されます。
-
bridge
ドライバを使用。 - Linux の ECS タスクにおいて、ネットワークモードが未指定の場合のデフォルト。
3. host
- Linux コンテナ対応: はい
- Windows コンテナ対応: いいえ
-
特徴:
- Docker の仮想ネットワークをバイパスし、EC2 インスタンスの ENI を直接使用。
- ダイナミックポートマッピングは使用不可。
-
hostPort
を明示的に指定する必要があり、複数のタスクが同じポートを共有できないため、同一タスク定義を複数インスタンス上で同時に実行することが困難。
4. none
- Linux コンテナ対応: はい
- Windows コンテナ対応: いいえ
-
特徴:
- 外部ネットワーク接続なし。
- セキュリティの観点から、完全に分離された環境を構築したい場合に利用されます。
5. default(Windows のみ)
- Linux コンテナ対応: いいえ
- Windows コンテナ対応: はい
-
特徴:
- Windows 上での Docker 組み込み仮想ネットワーク(
nat
ドライバ)を使用。 - Windows タスクでネットワークモード未指定時のデフォルト設定。
- Windows 上での Docker 組み込み仮想ネットワーク(
まとめ
ECS におけるネットワークモードの選択は、アプリケーションの通信要件やセキュリティ、可観測性の設計に直結します。
特に awsvpc
モードは、ENI をタスク単位で割り当てることで、セキュリティグループの活用やネットワーク構成の柔軟性が高まるため、デフォルトでの選択肢として非常に優れています。
一方で、パフォーマンスやポート制約、接続要件に応じて他のモードが有効な場合もあるため、プロジェクトごとに要件を明確化し、最適なネットワークモードを選ぶことが重要です!