7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】ENIって何?

7
Posted at

はじめに

AWSを勉強していると、EC2やRDS、Lambdaなど色々なサービスが出てきますが、それらがどうやってネットワークに繋がっているかを意識したことはありますか?

実は、AWSのリソースがネットワークに接続できるのは、裏側で ENI(Elastic Network Interface) というものが働いているからです。

ENIは普段あまり目立たない存在ですが、AWSのネットワークを理解するうえで欠かせない基本概念です。
本記事では、ENIがつまり何なのかを、身近な例えを交えてまとめました。

ENIを一言でいうと「仮想のLANポート」

物理的なパソコンには、LANケーブルを差し込むLANポートがありますよね。
このLANポートがあるから、パソコンはネットワークに繋がることができます。

ENIは、それのAWS版です。

ENI = AWS上のリソースをVPCネットワークに接続するための「仮想のLANポート」 と考えるとイメージしやすいと思います。

【物理の世界】
パソコン ──[LANポート]── LANケーブル ── ルーター ── インターネット

【AWSの世界】
EC2インスタンス ──[ENI]── サブネット ── VPC ── インターネット

EC2インスタンスを作成すると、自動的にENIが1つアタッチされます。普段意識しなくても通信できているのは、このENIのおかげです。

ENIが持っている情報

ENIは単なる「つなぎ口」ではなく、ネットワークに関するさまざまな情報を保持しています。

項目 説明
プライベートIPアドレス VPC内で通信するためのIPアドレス(必須)
パブリックIPアドレス インターネットとの通信に使うIPアドレス(任意)
Elastic IPアドレス 固定のパブリックIPアドレス(任意)
MACアドレス ネットワークインターフェースの一意な識別子
セキュリティグループ 通信の許可/拒否ルール
サブネット ENIが所属するサブネット

つまり、「このリソースのIPアドレスは何か」「どのセキュリティグループが適用されているか」といったネットワーク設定の実体はENIが持っているということです。

ENIの特徴

1. 付け外しができる

ENIの面白いところは、EC2インスタンスに対して付けたり外したりできる点です。

物理サーバーのLANポートはサーバーに固定されていますが、セカンダリENI(追加で作成したENI) はEC2インスタンスから取り外して、別のEC2インスタンスにアタッチすることができます。

EC2インスタンス作成時に自動的にアタッチされるプライマリENI(eth0)はデタッチできません。付け替えが可能なのはセカンダリENIのみです。

【付け替えのイメージ】

(1) EC2-A に ENI がアタッチされている
    EC2-A ──[ENI: 10.0.1.50]

(2) ENI を EC2-A からデタッチ
    EC2-A          [ENI: 10.0.1.50]

(3) ENI を EC2-B にアタッチ
    EC2-B ──[ENI: 10.0.1.50]

ENIを付け替えると、IPアドレスやセキュリティグループなどの設定もそのまま一緒に移動します。

これを活用すると、障害時にENIを別のインスタンスに付け替えるだけでIPアドレスを引き継げるため、素早いフェイルオーバーが実現できます。

2. 1つのインスタンスに複数のENIをアタッチできる

EC2インスタンスには、複数のENIをアタッチすることもできます。
これは、物理サーバーにLANポートが複数あるのと同じイメージです。

EC2インスタンス
├── ENI-1: 10.0.1.10(管理用ネットワーク)
└── ENI-2: 10.0.2.10(サービス用ネットワーク)

たとえば、管理用の通信とサービス用の通信をネットワーク的に分離したい場合に便利です。

アタッチできるENIの数は、インスタンスタイプによって上限が異なります。小さいインスタンスタイプでは2〜3個程度です。

3. セキュリティグループはENI単位で適用される

「セキュリティグループはEC2インスタンスに設定するもの」と思いがちですが、正確にはENIに対して設定するものです。

1つのインスタンスに複数のENIがアタッチされている場合、ENIごとに異なるセキュリティグループを適用できます。

EC2インスタンス
├── ENI-1 → セキュリティグループA(HTTPのみ許可)
└── ENI-2 → セキュリティグループB(SSHのみ許可)

ENIが使われている場面

ENIはEC2だけのものではありません。AWSの多くのサービスが、裏側でENIを利用しています。

Lambda(VPC Lambda)

LambdaをVPC内で実行する場合、Lambda関数はENIを通じてVPC内のリソースと通信します。VPC設定を構成した時点で、指定したサブネットにHyperplane ENIが作成されます。このENIは同じサブネット・セキュリティグループの組み合わせを持つLambda関数間で共有され、そこを経由してRDSなどのリソースにアクセスできるようになります。

RDS

RDSのデータベースインスタンスも、VPC内に配置される際にENIを通じてネットワークに接続されています。RDSのエンドポイント(接続先ホスト名)は、このENIのIPアドレスに解決されます。

ECS(Fargate)

Fargateで動かすコンテナタスクにも、タスクごとにENIが割り当てられます(awsvpcネットワークモード)。これにより、各タスクが独自のIPアドレスを持ち、セキュリティグループを個別に設定できます。

NAT Gateway / VPCエンドポイント

NAT GatewayやインターフェースタイプのVPCエンドポイントも、サブネット内にENIを作成して動作しています。

AWSのコンソール画面で「ネットワークインターフェース」の一覧を見ると、自分で作った覚えのないENIが並んでいることがあります。これらは上記のようなサービスが自動的に作成したものです。

まとめ

ポイント 内容
ENIとは AWS上の「仮想LANポート」。リソースをVPCネットワークに接続する
持っている情報 IPアドレス、MACアドレス、セキュリティグループなど
付け外し可能 別のインスタンスに付け替えることで、IP設定ごと移行できる
複数アタッチ可能 1つのインスタンスに複数のENIをつけてネットワークを分離
多くのサービスが利用 EC2以外にも、Lambda・RDS・Fargate・NAT Gatewayなどが裏側でENIを使っている
7
1
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
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?