BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【AWS】サブネットの空きIPとENIの情報を確認する話

こんにちは!
BFT名古屋支店の佐野です。

つい最近、AWS触りたての方からVPC内のサブネット空きIPの数と、サブネットのIPを使っているものの情報ってどこから見るの?」という質問を受けました。
その時は簡単に回答を返したのですが、よくよく思い返した時に、どちらもネットワークに関わるものでありながら見れるコンソールが別という、ちょっと分かりにくい面があるかもしれないと考えました。
なので今回は、サブネットの状態、特に空きIPの数の確認と、サブネットの中でIPを使っているもの、つまりENI(Elastic Network Interface)の状態の確認方法を紹介します。


サブネットの状態を確認する方法

まずはサブネットの状態の確認方法ですが、これは分かりやすく簡単です。
AWSにおいてサブネットは、VPCという仮想ネットワーク環境の中を区分けするものであり、VPCそのものと同じくVPCコンソールから見ることができます。
VPCコンソールの左ペインに「サブネット」という項目があるため、それを選択すれば今現存しているサブネットの一覧を見ることができます。

さらにそこから閲覧したいサブネットにチェックを入れることで、以下の通りそのサブネットの詳細情報が下部画面に表示されます。
この画面における「利用可能な IPv4(または IPv6) アドレス」が、そのサブネットにて空いているIPの数になります。

f:id:bftnagoya:20220222233324j:plain

サブネットに関しては以上ですが、ここであることが気になった方もいるでしょう。

「使われていないIPの数は分かるけど、実際に使われている、あるいは使われていない具体的なIPはどうやって知ればいいのか?」

残念ながらAWSサービスの内で、これをすぐに示してくれるものはありません。
しかし“サブネット内で使われているIP”を知り、そこから逆算して使われていないIPを割り出すことは可能です。
そしてAWSのサブネットのIPが消費される要因は主に以下のふたつになります。

  • AWSが自動的にIPを予約する
  • ENIを割り当てる

このうち「AWSが自動的にIPを予約する」は、サブネットの作成時に特定のIPが自動的に確保されますし、これを変更することはできません。
具体的な確保対象のIPなど、詳しくは以下の公式ドキュメントの「IPv4 用の VPC とサブネットのサイズ設定」項を参照ください。

docs.aws.amazon.com


ENIの状態を確認する方法

ではENIが確保しているIPアドレスを知るにはどうすればよいのでしょうか。

このENI、物理的な環境ではNIC(NetworkInterfaceCard)に相当するもので、その仕組みからすれば当然にIPアドレスが割り振られるものです。
故にAWSアカウントのネットワークを管轄するVPCコンソールから……と思いきや、VPCコンソール内にはENIを確認できる項目はありません。
では何処にあるかというと、実は「EC2」のコンソールにあるのです。
EC2コンソールの左ペイン、ネットワークインターフェース項を選択すると、今あるENIの一覧を見ることができます。

f:id:bftnagoya:20220222233345j:plain

ネットワークコンポーネントであるはずのENIが、何故仮想マシンであるEC2を主としたコンソール内にあるのか。
恐らく仮想マシンコンポーネントとして不可欠であることから、EC2コンソール内に併設されているのだと筆者は思います。
根拠はありませんが…。

さておき、ENIの状態もサブネットの時と同様、確認したいものにチェックを入れることで詳細情報が下部画面に表示されます。
そのENIが属しているVPC、およびサブネット、使用しているIPや、そのENIが何のENIかの説明を見ることができます。

f:id:bftnagoya:20220222233401j:plain

また検索欄で特定のサブネットを指定すれば、そこに属するENIだけを出すことができ、それらが使用しているIPとサブネットのIPを照らし合わせれば、どのIPが空いているかを求めることができます。


余談:ENIの「説明」欄について

ここまでサブネットとENI、それぞれの確認の仕方を述べてきました。
以上のように確認すれば、両者の必要な情報を得ることができると思いますが、そこで以下のようなことを思い浮かべる方もいるかもしれません。

「ENIをどこで確認するかは分かったけれど、どのENIが何に使われているかはどう知ればいい?」

正確に求めるのであれば、各リソースに紐づいているネットワークインターフェース IDを調べるのが一番なのですが、それ以外にもENIの「説明」欄を見ることで、それが何に使われているのかを大体知ることができます。
例えば先の画像でチェックを入れたENIは、説明欄が“VPC Endpoint Interface vpce-xxxxxxxxxxxxxxxxx”となっていましたが、これはそのENIがVPCエンドポイントのネットワークインターフェースとして使われていることを意味します。
特にVPCエンドポイント用の場合は、vpce-xxxxxxxxxxxxxxxxxの部分が紐づいているVPCエンドポイントのIDと同一となっており、そこから何のエンドポイントに使われているかを割り出すことが可能です。
なお、この説明欄はENIを使用するAWSリソースを作成した際、ENIと共に同時に書き込まれます。

AWSサービスごとの説明欄の書かれ方について、以下が主な例になります。

説明欄の文 対応するAWSリソース
AWS Lambda VPC ENI-(Lambda関数名) VPCに紐づけたLambda関数
Network interface for DBProxy (RDS Proxy識別子) RDS Proxy
Primary network interface EC2(プライマリIP)
RDSNetworkInterface RDS
VPC Endpoint Interface (VPCエンドポイントID) RDS

さいごに

まとめてみると、そこそこに注視すべき点や言えることがあるものです。
AWSを触っていると何となく分かる、ある種いつの間にか当たり前になってしまう話ではあるかと思いますが、その当たり前にする前のとっかかりとしてAWS初心の方に覚えて頂ければ幸いです。

それでは、今回はここまで。
また次回の記事でお会いしましょう。