今回は、AWSのサービスに新しく追加されたENI(Elastic Network Interface)について調査してみました。

ENI(Elastic Network Interface)とは、EC2のNICにあたるもので、これまではインスタンスに直接付与されていたIPアドレス等のネットワーク情報を、ENIに付与させることでより柔軟なネットワーク構成を実現するためのものとなります。
また、ENIはVPCでのみ使用することができます。

それでは、ENIを実際に設定してみます。

コンソールのEC2タブをクリックすると左ペインのメニュー下部に「Network Interface」という項目があります。
これをクリックすると以下のようなENIの一覧画面が表示されます。
すでにVPCインスタンスを起動している場合は、VPCインスタンスにデフォルトでセットされているeth0のENIが表示されています。

新たにVPCインスタンスを起動してみます。
尚、VPCとサブネットは以下の通りになります。

・VPC

10.0.0.0/16

・Subnet

publicサブネット:10.0.0.0/24
privateサブネット:10.0.1.0/24

ENIの画面で「Create Network Interface」をクリックします。

ENIの設定ダイアログが表示されるので、publicサブネットで10.0.0.12のIPで登録します。

そうすると、ENIの一覧に新しく追加されます。
ENIに設定できるSecurityGroupはEC2のものではなく、VPCのセキュリティグループになります。

そして、EC2タブでVPCインスタンスを起動し、Subnetはprivateサブネット(10.0.1.0/24)にします。

INSTANCE DETAILのフェーズで、ダイアログ下部にVPCのIPアドレスを設定する個所があるので、「IP Address」の欄にプライベートIPを設定します。
ここで指定するIPはVPCにデフォルトでセットされているeth0のプライベートIPアドレスです。
eth0は取り外しできず、基本のIPとなる為、ここに所属しているサブネットのレンジ内のIPアドレスを設定します。
ここでは、10.0.1.12を指定します。

また、「Additional Network Interface」という項目があり、ここに2枚目のENIを指定できます。
選択肢から未使用で既存のENIを選べるので、ここで先程作成した、publicのENI(10.0.0.12)を指定します。

そうすると、起動したVPCインスタンスのプロパティ画面で、「Network Interface」欄にeth0, eth1と2つのENIが
設定されていることがわかります。
この状態は、NICが2枚挿されているのと同じになります。

privateとpublicのENIを逆にしても同じように設定でき、eth0とeth1に両方publicのIPを設定することも可能です。

また、ENIに付与するプライベートIPアドレスはVPCインスタンスと同様、サブネットの範囲内の
IPアドレスしか付与できません。

また、ElasticIPをENIに付与することができます。
ただし、2つのENIに2つのEIPを設定することは現状できません。

最初に追加ENIなしで、後からAttachすることもできます。

しかし、ifconfigをみると、下記のように2枚目が認識されていません。
2枚目のENIは自分でLinuxに設定をする必要があるようです。

eth0      Link encap:Ethernet  HWaddr 02:3D:6E:63:F7:40
          inet addr:10.0.0.20  Bcast:10.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::3d:6eff:fe63:f740/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:551 errors:0 dropped:0 overruns:0 frame:0
          TX packets:527 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:58037 (56.6 KiB)  TX bytes:53007 (51.7 KiB)
          Interrupt:10

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

次に、EC2 API ToolsでVPCインスタンスを起動してみます。
最新バージョンのec-run-instanceには、以下のようにENIに関するオプションが用意されているようです。

     -a, --network-interface NETWORKINTERFACE
          Specifies the network interface for the launched instance.
          The format of the NETWORKINTERFACE definition is as follows:
           - For an existing NETWORKINTERFACE - :
           - For a new NETWORKINTERFACE - :::[:[:[:[:]]]]
          where SGs is a comma separated list of security group IDs and DOT is
          either true or false, denoting whether to delete the interface on terminate.<

ここで、パブリックサブネットで以下のようにeth0とeth1に既存のENIを設定してみます。

$ ec2-run-instances ami-0644f007 -t m1.small -a eni-37ae7e5e:0 -a eni-76e73a1f:1 --region ap-northeast-1 -z ap-northeast-1a -s subnet-10a57379
RESERVATION r-97f20997 821635308497
INSTANCE i-632dfa63 ami-0644f007   pending  0  m1.small 2012-01-21T11:50:36+0000 ap-northeast-1a aki-ec5df7ed   monitoring-disabled  10.0.0.109 vpc-18a57371 subnet-10a57379 ebs     paravirtual xen  sg-53afbc3f default
NIC eni-5de73a34 subnet-10a57379 vpc-18a57371 821635308497 in-use 10.0.0.109  true
NICATTACHMENT eni-attach-22a9504b 0 attaching Sat Jan 21 20:50:36 JST 2012 true
GROUP sg-53afbc3f default

しかし、どちらのENIもアタッチできていません。

また、eth0だけでもアタッチできません。

$ ec2-run-instances ami-0644f007 -t m1.small -a eni-37ae7e5e:0 --region ap-northeast-1 -z ap-northeast-1a -s subnet-10a57379
RESERVATION r-dff60ddf 821635308497 
INSTANCE i-0d28ff0d ami-0644f007   pending  0  m1.small 2012-01-21T12:31:27+0000 ap-northeast-1a aki-ec5df7ed   monitoring-disabled  10.0.0.117 vpc-18a57371 subnet-10a57379 ebs     paravirtual xen  sg-53afbc3f default
NIC eni-37e13c5e subnet-10a57379 vpc-18a57371 821635308497 in-use 10.0.0.117  true
NICATTACHMENT eni-attach-40a85129 0 attaching Sat Jan 21 21:31:27 JST 2012 true
GROUP sg-53afbc3f default

IP指定+eth1も無理なようでした。

ec2-run-instances ami-0644f007 -t m1.small --private-ip-address 10.0.0.12 -a eni-76e73a1f:1 --region ap-northeast-1 -z ap-northeast-1a -s subnet-10a57379

指定の仕方が違うからなのか、デフォルトで自動にプライベートIPが割り当てられているようでした。
これは宿題にしたいと思います。

こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら