Amazon Elastic Container Serviceの種類とネットワークモードについて整理してみた

記事タイトルとURLをコピーする

みなさんこんにちは。マネージドサービス課の塩野です。

アプリケーションをコンテナ化して何か起こった際の影響範囲を限定させるためにAmazon Elastic Container Service(以下Amazon ECS)使いたいんだけど、「EC2とFargateどっち選べばいいの?」とか「ネットワークモードが色々あるけど、どれ選べばいいんだっけ?」こういう疑問、ありますよね。AWSのECSは自由度が高い分、最初の選択で迷うことが多いんです。今回は個人的にとっつきにくかった起動タイプとネットワークモードについて整理してみました。

目次

EC2とFargateの起動タイプの違い

まず大前提として、Amazon ECSには2つの起動タイプがあります。ざっくり言うと「自分でサーバー管理するか、しないか」の違いです。以下、起動タイプ別に比較してみました。

起動タイプ毎の比較表

項目 EC2 Fargate
管理の手間 サーバーのOS更新やパッチ適用が必要 AWSが管理
カスタマイズ OSやカーネルを自由に触れる OSには触れない
GPU 使える 使えない
Windows コンテナ 使える 使える
適用場面 特殊な要件がある時 普通のアプリケーション

※当比較表では、Amazon ECS Anywhere(オンプレミスのサーバーや仮想マシンなどの外部インスタンス)は省略

どっちを選んだらいいか?

正直なところ、特別な理由がなければFargateから始めるのが楽だと思います。 EC2タイプは自由度が高い反面メンテナンスに手間などもかかりますので、その条件じゃなきゃダメという事でない限りはFargateを使う事をオススメします。

利用シーン おすすめ
とにかく早く始めたい Fargate
サーバー管理したくない Fargate
GPUを使いたい EC2
カーネルパラメータ触りたい EC2

Amazon ECSのネットワークモードの違い

次にAmazon ECSのネットワークモードの違いについてですが、端的には「コンテナがVPC内でどう通信するか」を決める設定になります。それぞれのネットワークモードとその違いを見てみましょう。

ネットワークモード一覧

モード EC2(Linux) EC2(Windows) Fargate 説明
awsvpc ○(必須) タスクに専用のENIとIPアドレスを割り当て
bridge × × ホストのポートとコンテナのポートをマッピング
host × × ホストのネットワークを直接使用
none × × ネットワーク接続なし
default × × WindowsのNATネットワーク(Windowsのデフォルト)

ポイント

  • Fargateを選んだ時点で、ネットワークモードは自動的にawsvpcになります
  • EC2でWindowsコンテナを使う場合、bridgehostnoneは使えません
  • EC2でLinuxコンテナを使う場合は色々な選択肢が選べます

各ネットワークモードの特徴

awsvpcモード

タスクごとに専用のENIがもらえます。つまり、コンテナがEC2インスタンスみたいに振る舞えるってことです。 そのためタスクに割り当てるIPアドレスの消費やホストインスタンスにマウントできるENI数に注意が必要になります。

メリット デメリット
ポート競合の心配なし ENI数に上限がある(EC2の場合)
タスク単位でセキュリティグループ設定可能 IPアドレスを消費する
VPC フローログで通信監視できる -
設定がシンプル -

awsvpcモードを使う場面

  • セキュリティをしっかり管理したい
  • タスクごとにアクセス制御したい
  • 迷ったらとりあえずこれでOK

bridgeモード

Docker標準の仮想ブリッジネットワークを使います。1台のEC2に複数コンテナを効率よく詰め込めるのが特徴です。

メリット デメリット
1台のEC2に大量のタスクを配置可能 ポートマッピングが面倒
IPアドレスを節約できる 同じポートは使えない
ENI(Elastic Network Interface)数の制限を受けない セキュリティグループはホスト単位

利用可能な環境

  • EC2起動タイプ(Linuxコンテナのみ)
  • Windowsコンテナでは使用できません(代わりにawsvpcdefaultモードを使用)

bridgeモードを使う場面

  • コストを極限まで抑えたい
  • 小さいコンテナをたくさん動かす
  • IPアドレスやENI数の上限に引っかかる

hostモード

ホストのネットワークスタックをそのまま使います。 パフォーマンスは最高ですが、使いどころが限られます。

メリット デメリット
ネットワーク性能が最高 ポート競合しやすい
ポートマッピング不要 セキュリティリスク高め
1ホストに同じタスク定義のタスクは1つだけ ※

※ポートが重複するようなタスクを同時に実行することはできません

hostモードを使う場面

  • ネットワーク性能が超重要な場合
  • かなり限定的な用途

noneモード:外部通信が不要な時

外部ネットワーク接続なしのモードです。 バッチ処理とか、ローカルで完結する処理向けですね。

結局どう選べばいい?ケース別早見表

Fargate vs EC2 どっち?

判断ポイント 選ぶべきは
とりあえず始めたい Fargate
管理が面倒 Fargate
GPUを使う EC2
OSをカスタマイズしたい EC2
小〜中規模アプリ Fargate
大規模で最適化したい EC2

EC2を選んだ場合のネットワークモードは?

Linuxコンテナの場合

やりたいこと おすすめモード
普通のWebアプリ awsvpc
セキュリティ重視 awsvpc
コンテナ密度を上げたい bridge
コストを極限まで抑える bridge
超高速通信が必要 host
外部通信不要なバッチ none

Windowsコンテナの場合

やりたいこと おすすめモード
普通のWebアプリ awsvpc
セキュリティ重視 awsvpc
Windowsの標準設定で使う default(NATモード)

※Windowsコンテナではbridgehostnoneモードは使用できません。

まとめ

ざっくりとAmazon ECSの起動タイプとネットワークモードについてまとめてみました。 個人的にはコンテナといえばLinuxのイメージがありますが、Amazon ECSでWindowsコンテナに対応していたり、ネットワークモードの制約事項が思ったより多かったりと調べてみると学びが多かったです。

この記事がどなたかのお役に立てれば幸いです。

参考リンク

◆ 塩野 正人
◆ マネージドサービス部 所属
◆ X(Twitter):@shioccii
◆ 過去記事はこちら

前職ではオンプレミスで仮想化基盤の構築や運用に従事。現在は運用部隊でNew Relicを使ってサービス改善に奮闘中。New Relic User Group運営