AWSについて学ぶ中で気になっていたことの1つ。「なんとかGWとENIはどうちがうんだろう?」 この疑問について、関連する概念とともに、あらためて(ちょっとだけ)考えてみたときのメモです。
まず、イメージ
なんとかGW(Gateway)はネットワーク同士を繋ぐもの。つまりIPアドレスの空間同士を繋ぐもの。だから制御がちょっと緩い:
👉 IGW(Internet Gateway)、NAT GW(NAT Gateway)、DX GW(DirectConnect Gateway)、そしてゲートウェイ型VPCエンドポイントなど。
ENI(Elastic Network Interface)はいわゆるNICであり、特定(1つ)の機器をネットワークに繋ぐもの。つまりIPアドレスを機器(EC2など)に付与するもの。だから制御はよりしっかり:
👉 PrivateLinkや(結局は同じことだが)インターフェース型VPCエンドポイントなど。
GWはネットワーク同士を繋ぐ機器であるから、当然それ自体にもNICは繋がっているはず、したがってIPアドレスを持っているはずだが、それをAWSのユーザー開発者がルートテーブルやNACL(Network ACL)などの定義情報の中で直接利用することはない。例えばIGW(Internet Gateway)であれば igw-*
という名称を利用して指定する。
少し細かく、箇条書きで
- インターネット はネットワークの集合体(Internet = Inter Network)。パブリックIPアドレスというグローバルに一意性のあるアドレス同士で通信が行われる空間。
- インターネットを構成する各 ネットワーク は、プライベートIPアドレスというそのネットワーク内でのみ有効で一意性のあるアドレス同志で通信が行われる空間。AWSでいえばVirtual Private Cloud(VPC)。
- サブネット(Subnet) はネットワークの内を区画される。ネットワーク内で有効なプライベートIPアドレスのセットの中から、任意の数のアドレスのサブセットを切り出したものを割り当てられている。サブネットはネットワーク内の通信制御の効率化のための仕組み。
- IPアドレス は Network Interface Card(NIC)ごとに存在。AWSでいえばElastic Network Interface(ENI)。
- ENI はユーザー開発者が利用するEC2インスタンスやAWSが管理するマネージドサービスを構成する仮想マシンをはじめとする機器に接続され、当該の機器にIPアドレスを付与、IPアドレスを利用した通信の能力を与える。
- ゲートウェイ は、ネットワーク同士を接続し、ネットワーク間の通信を実現する装置の総称。ネットワーク(≠サブネット)の境界に存在。ルーターもその一種。ネットワークAに属するパブリックIPアドレスαから、どこかにある別のネットワークBに属するパブリックIPアドレスへの通信を仲介。宛先IPアドレスに通信をするためにどのような経路(ルート)をとる必要があるかを理解。
- 経路 は、ネットワークAのゲートウェイからネットワークBのゲートウェイへと直接繋がっていることもあれば、AとBの間に別のゲートウェイ(CやD)が入って間接的に繋がっていることもある。
- ルートテーブル(RT) は経路の定義を行う。テーブルは各ゲートウェイが持つ。その定義内容は手動で設定されていることもあれば(静的ルーティング)、決められた方法に基づいて自動で設定されていることもある(動的ルーティング)。
- ルートテーブルに記述された経路情報により 「ある最終的な宛先にデータを送信するために、当座どのゲートウェイにデータを送信するべきか」 が決定。データを受け取ったゲートウェイは、最終的な宛先が存在するネットワークにデータを送信するため、また別のゲートウェイ(Next Hop)にデータを送信する。
- 本来ゲートウェイの機器自体もまたIPアドレスを持っているが、 AWSにおいて〜Gatewayを使用する場合それらのIPアドレスを直接指定することはなく、
igw-*
(Internet Gatewayの場合)のような名称で指定 する。これはおそらく 〜Gatewayが可用性・信頼性のために冗長化されているため。 - Internet Gateway(IGW) は、VPCの中と外(インターネット)のやり取りを仲介するゲートウェイ。
- ゲートウェイ型VPCエンドポイント は、VPCの中とAWSのマネージドサービスが稼働するネットワークの間のやり取りを仲介するゲートウェイ。
- これらに対して、 インターフェース型VPCエンドポイント は、LambdaをはじめとしたAWSが管理するVPCで稼働するAWSサービスに繋がるENI(NIC)をVPC内に配置したもの。
- また、 PrivateLink は、NLBなどユーザー開発者のVPCで稼働するAWSサービスに繋がるENI(NIC)を別のVPC内に配置したもの。
- 〜ゲートウェイはネットワーク同士を繋ぐものだから、 ネットワークの粒度、IPアドレスの集合体の粒度で通信を制御 する。より細かな制御には Network ACL(NACL)などを用いる必要がある。
- 一方のENIは特定の機器に直接繋ぐものだから、 個別の機器、そのIPの粒度で通信を制御 する。
よだん
AWSをはじめとしたクラウド基盤の隆盛にともなって、従来の「アプリエンジニア vs. インフラエンジニア」構図は大部分無意味化してきた印象があります。ことクラウド基盤を利用してシステムを構築・運用するユーザー開発者の立場からするとそう感じられます。「アプリ」も「インフラ」も、クラウド基盤のおかげで随分簡単になってしまって、それぞれが今まで通り専門性(独自の領分)を維持できるほど知識の世界が広くない。
それでも ネットワーキングやセキュリティなど、特定分野についてはやはり「インフラ」的な専門性の香りが残っています。今回取り上げた〜GatewayとElastic Network Interface(ENI)の違いはまさにそうしたものの1つかなと。
こうしてまとめながらあらためて自身の知識不足と苦手意識をしみじみと感じています。