LoginSignup
9
8

More than 5 years have passed since last update.

AWS/ECSでタスク定義をする際のネットワークモードとFargate

Last updated at Posted at 2019-04-02

初投稿です。

ECS + EC2 で動いているサービスをECS + Fargate に変える際に
ネットワークモードとFargateについて覚えることがあり、備忘録も兼ねて書き残します。

この記事で書く事

  1. ネットワークモードはどこで設定するか?
  2. ネットワークモードの種類とそれぞれの説明
  3. Fargateとは?awsvpcしか選べない理由

この記事で書かない事

  1. ECS/ECR/Docker周りの詳しい記述
  2. タスク定義を完了させるまでの全フロー

ネットワークモードはどこで設定するか?

2019/3/29現在、ECSで新規タスク定義を作ろうとすると、
コンテナの起動させる場所としてFargateかEC2にするかを選ぶ画面が出現します。

スクリーンショット 2019-03-29 17.51.34.png

「EC2」 を選択して次に進むと、ネットワークモードを選択するセレクターが出てきます。

スクリーンショット 2019-03-29 17.52.43.png

< default >bridge と同じですので、実質4つの選択肢となります。


ネットワークモードの種類とそれぞれの説明

bridge(ブリッジ)

bridgeはDockerコンテナと外のネットワークを繋ぐ最もオーソドックスな手段です。
DockerコンテナがEC2インスタンスの中にある時、ネットワークはまずEC2インスタンスに接続し、
その後、宛先のDockerコンテナのポートを探して接続します。

DockerコンテナがEC2インスタンスに1つだけなら、そう難しく考える必要はありませんが
複数のDockerコンテナがEC2インスタンスの中で動く場合、ポートの管理(ポートマッピング)が発生します。

例えば2つのWebサーバDockerコンテナを同じEC2インスタンス内で動かそうとすると、
両方をDockerコンテナに80番ポートと設定(エクスポート)したとしても、
EC2インスタンス側で片方を8080番ポートで繋ぐ等の工夫をしなければいけません。

host(ホスト)

hostはDockerで設定(エクスポート)したポート番号とEC2インスタンス側のポートを番号を同じにします。

ゆえに、2つのWebサーバDockerコンテナを同じEC2インスタンス内で動かそうとする場合、
両方に「同じポート」と設定することはできません。
つまり、両方を「80番ポート」にすることができないということです。

ですから片方のDockerコンテナを8080番等の別のポートにする変更が必要になります。
そして、外部ネットワークから接続する時も8080番ポートに接続することで
そのDockerコンテナにアクセスできるようになります。

bridgeに比べるとポート管理(ポートマッピング)が必要ありませんが、
コンテナを作る時からポートを考えなければいけないため、使い分けが必要と言えます。

awsvpc

awsvpcはDockerコンテナ自体にENIという、AWS内のネットワークインターフェイス(IPアドレスやMACアドレス)を与えます。
これにより、bridgeやhostで抱えていた「Dockerコンテナ間のポートの競合」問題が無くなります。

このネットワークモードはタスク定義をする際、
「起動タイプの互換性の選択」時に 「Fargate」 を選ぶと、
このネットワークモードが 自動的 に選択されます。これに関しては後に説明いたします。

なし

外部のネットワークと接続できなくなります。


Fargateとは?awsvpcしか選べない理由

Fargateは、これまでのDockerコンテナがEC2インスタンスの中で動いていたのに対し、
EC2インスタンスを省いて、Dockerコンテナだけ でサービスが動くようにしたものです。

したがって、これまでENIを保持していたEC2インスタンスが無くなった為、
Dockerコンテナ自身でENIを持たなくてはいけません。

これが理由によりFargateを選ぶとawsvpcのネットワークモードが自動的に選ばれる事になります。

まとめ

awsvpcはポート管理がいらない魅力的なネットワークモードです。
また、それを使用するFargateも魅力的なサービスです。

新規でECSでサービスを作ろうと考えている方がいらっしゃれば
こちらのネットワークモードやサービスの使用を検討される事をおすすめします。


参考:
Amazon EC2 Container Service(ECS)の概念整理
(この記事では「Task=Dockerコンテナ」と致しましたので、こちらをお読みになられる事をおすすめします)
https://qiita.com/NewGyu/items/9597ed2eda763bd504d7

Amazon ECS(EC2 Container Service)についての簡単なメモ
(上の記事より簡単に概念がわかります)
https://qiita.com/mokemokechicken/items/d45144dcd1979c10e336

Elastic Network Interface(ENI)
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_ElasticNetworkInterfaces.html

ECSでEC2インスタンスを利用する際のネットワークモードについて調べてみた
(こちらの記事の方がネットワークモードについて専門用語などが正しく使われています。一読される事をおすすめします)
https://dev.classmethod.jp/etc/ecs-networking-mode/

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8