Elastic network Interface (ENI) は、仮想プライベートクラウド (VPC) にデプロイされたElastic Compute Service (ECS) インスタンスのネットワーク接続とIPアドレスを提供する仮想ネットワークインターフェイスです。 各ECSインスタンスに1つ以上のENIをバインドできます。 セカンダリENIを異なるECSインスタンスにバインドまたはバインド解除することで、ネットワーク構成の柔軟性とスケーラビリティを高め、さまざまなシナリオでネットワーク要件を満たすことができます。 たとえば、ENIを使用して、単一のECSインスタンスに複数のIPアドレスまたはネットワークインターフェイスコントローラー (NIC) を提供したり、高可用性ネットワークスキームを作成したりできます。
ENIには次の属性を含めることができます。
vSwitchやゾーンなどのVPC情報
VPCのvSwitchのIPv4アドレス範囲のプライマリプライベートIPv4アドレス
VPCのvSwitchのIPv4アドレス範囲からの1つ以上のセカンダリプライベートIPv4アドレス
1つ以上のパブリックIPv4アドレス
1つ以上のIPv6アドレス
メディアアクセス制御 (MAC) アドレス
1つ以上のセキュリティグループ
用語
期間 | 説明 |
ENIタイプ | ENIは、プライマリENIとセカンダリENIに分類される。 VPCにデプロイされた各ECSインスタンスには、プライマリENIと呼ばれるデフォルトのENIがあります。 プライマリENIを個別に作成したり、ECSインスタンスからプライマリENIのバインドを解除したりすることはできません。 セカンダリENIを個別に作成し、セカンダリENIをECSインスタンスにバインドできます。 |
プライベートIPv4アドレス | ENIのプライマリプライベートIPアドレスは、関連付けられたvSwitchのCIDRブロック内にあるプライベートIPv4アドレスです。 セカンダリENIを作成するときに、プライマリプライベートIPアドレスを指定できます。 プライマリプライベートIPアドレスを指定しない場合、システムはプライマリプライベートIPアドレスをランダムに割り当てます。 1つ以上のセカンダリプライベートIPv4アドレスをENIに割り当て、ENIからIPアドレスの割り当てを解除してから、IPアドレスを他のENIに割り当てることができます。 ENIに割り当てることができるプライベートIPv4アドレスの数は、ENIがバインドされているECSインスタンスのインスタンスタイプによって異なります。 詳細については、「インスタンスファミリーの概要」の [ENIごとのプライベートIPv4アドレス] 列をご参照ください。 |
プライベートIPv6アドレス | IPv6 CIDRブロックをVPCおよびvSwitchに関連付ける場合、vSwitchのIPv6 CIDRブロックからENIに1つ以上のセカンダリプライベートIPv6アドレスを割り当てることができます。 IPv6 CIDRブロックをvSwitchに関連付ける方法については、「vSwitchの作成と管理」をご参照ください。 ENIに割り当てることができるIPv6アドレスの数は、ENIがバインドされているECSインスタンスのインスタンスタイプによって異なります。 詳細については、「インスタンスファミリーの概要」の「ENIごとのIPv6アドレス」列をご参照ください。 IPv6アドレスは、VPCの内部ネットワークを介した通信をサポートします。 IPv6パブリック帯域幅を有効にしてインターネット接続を行うことができます。 詳細については、「手順3: WindowsインスタンスのIPv6パブリック帯域幅の有効化」および「手順3: LinuxインスタンスのIPv6パブリック帯域幅の有効化」をご参照ください。 |
EIP | 1つ以上のEIPアドレス (EIP) をENIに関連付けて、ENIがインターネット経由で通信できるようにすることができます。 詳細については、「EIPの関連付けまたは関連付けの解除」をご参照ください。 |
NICマルチキュー | NICマルチキュー機能により、インスタンスタイプは各ENIで複数のトラフィックキューをサポートできます。 NICキューは、ENIごとにインスタンスタイプがサポートするキューの最大数を表します。 単一のvCPUを使用してECSインスタンスでNIC割り込みを処理すると、パフォーマンスのボトルネックが発生する可能性があります。 ネットワークパフォーマンスを向上させるために、NICマルチキュー機能を使用してNIC割り込みを異なるvCPUに分散できます。 詳細については、「NICマルチキューの設定」をご参照ください。 |
ネットワークカードマッピング | ネットワークカードマッピングをサポートするインスタンスタイプは、より高いネットワークパフォーマンスを提供します。 ネットワークカードマッピングをサポートするインスタンスタイプのECSインスタンスにENIをバインドする場合、ネットワークカードインデックス (NetworkCardIndex) を指定して、ECSインスタンスをホストする物理マシン上のネットワークカードにENIをマッピングできます。 これにより、帯域幅の競合を防ぎ、インスタンスの帯域幅機能を改善できます。 DescribeInstanceTypesを呼び出して、インスタンスタイプでサポートされているネットワークカードに関する情報を照会できます。 ENIをネットワークカードにマッピングするには、インスタンスタイプに基づいて、ネットワークカードインデックス0をプライマリENIに割り当て、ネットワークカードインデックスをセカンダリENIに割り当てる必要があります。 ECSインスタンスのネットワークパフォーマンスを最大化するには、プライマリENIとセカンダリENIに異なるネットワークカードインデックスを割り当てます。 詳細については、「ECS SDK For Javaを使用したENIの管理のベストプラクティス」をご参照ください。 |
シナリオ
Container network plans: ENIベースのContainer Network Interface (CNI) プラグインを使用して、KubernetesクラスターのポッドのIPアドレスと通信を管理できます。 たとえば、Terwayは、ENIの上で使用されるAlibaba CloudオープンソースCNIプラグインです。 Terwayは、標準のKubernetesネットワークポリシーに基づいてコンテナ間のアクセスポリシーを定義できます。 Kubernetesクラスター間のネットワーク通信を有効にするには、ENIのセカンダリIPアドレスに基づく包括的ENIモードとENIに基づくVPCモードのいずれかのモードを使用します。 詳細については、「Terwayでの作業」をご参照ください。
ネットワークとセキュリティの管理: 複数のENIを使用して、ロードバランサー、NATサーバー、プロキシサーバーなどの特定のネットワークデバイスの仮想バージョンを作成できます。 ほとんどの場合、複数のENIが仮想セキュリティデバイスにバインドされます。 各ENIには独自のプライベートIPアドレスがあります。 ビジネス要件に基づいて、ENIのパブリックIPアドレスとファイアウォールを設定できます。 VPCにデプロイされたECSインスタンスでENIを使用して管理ネットワークを作成できる一般的なシナリオ: プライマリENIはパブリックトラフィックを処理し、セカンダリENIは内部トラフィックを処理します。 セカンダリENIはVPC内のサブネットに接続されています。 プライマリENIは、インターネットからインスタンスへのアクセスを制御するセキュリティグループ、またはインターネット側ロードバランサのTCPポート80および443に関連付けられています。 内部トラフィックを処理するセカンダリENIは、VPC内の特定のサブネットからのアクセスのみを制御するセキュリティグループに関連付けられています。 外部パブリッククライアントからの外部トラフィックは、プライマリENIに関連付けられているファイアウォールまたはセキュリティグループのルールと一致する場合にのみ、VPCにアクセスできます。 この場合、インターネットからアクセスできるリソースは、内部のネットワークやサービスから分離する必要があります。 これにより、セキュリティ違反による影響や損害を大幅に軽減できます。
インターネットからの分離: ENIを多層ネットワークアーキテクチャで使用して、内部ネットワークとサービスを公衆向けサービスから分離することができます。 アプリケーションサーバーが存在する中間層ネットワークに接続する各webサーバーにセカンダリENIを配置できます。 1つのENIがパブリックトラフィックを処理し、1つのENIが厳密に制御されたバックエンドトラフィックを処理します。 各デュアルホームインスタンスは、フロントエンドリクエストを受信して処理し、バックエンドへの接続を開始してから、バックエンドネットワーク上のサーバーにリクエストを送信します。 さまざまな目的でENIを構成して、各ENIにファイアウォールルールとアクセス制御を適用し、パブリックネットワークからVPCへの通信のセキュリティ関連機能を強制的に有効にすることができます。
高可用性: インスタンスに障害が発生した場合、ENIをスタンバイインスタンスに移動してサービスを回復できます。 たとえば、ENIをプライマリENIとして使用したり、データベースインスタンスやNATインスタンスなどの重要なサービスに接続されているセカンダリENIとして使用したりできます。 ENIがアタッチされているインスタンスに障害が発生した場合は、ENIをホットスタンバイインスタンスにアタッチできます。 ENIは、プライベートIPアドレス、EIP、およびMACアドレスを維持します。 これにより、ENIをスタンバイインスタンスにアタッチすると、ネットワークトラフィックがスタンバイインスタンスに流れます。
トラフィック分離: 特定のアプリケーションはトラフィックの変動に敏感です。 ENIを使用してトラフィックバーストを処理できます。 これは、少なくとも最小帯域幅がトラフィックスパイクまたはトラフィック輻輳中に利用可能であることを保証する。 各ENIは仮想キューに属します。 仮想キューを使用して、VPCのネットワークに害を及ぼす帯域幅ピーク攻撃やDDoS攻撃が他のVPCのネットワークに影響を与えるのを防ぐことができます。 ENIが属する仮想キューを使用して、ヘッドオブライン (HOL) ブロッキングを防ぎ、各I/OインターフェイスがENIがアタッチされているインスタンスのCPUリソースを均等に共有できるようにします。
ベストプラクティス
ENIは課金されません。 使用できるENIの数は限られています。 詳細については、「制限」トピックのENI制限セクションをご参照ください。
インスタンスの実行中 (ホットバインド) 、停止中 (コールドバインド) 、または起動中 (コールドバインド) に、ENIと同じゾーンにあるECSインスタンスにENIをバインドできます。 ECSインスタンスにバインドできるENIの数は、インスタンスタイプによって異なります。 詳細については、「インスタンスファミリーの概要」のENI列をご参照ください。 ECSインスタンスからプライマリENIのバインドを解除することはできません。 詳細については、「セカンダリENIのバインド」をご参照ください。
インスタンスが同じゾーンにある場合、ENIをあるECSインスタンスから別のECSインスタンスに移動できます。 ENIをECSインスタンスにバインドした後、インスタンスのネットワーク帯域幅は変更されません。
ENIを作成すると、ENIを複数のセキュリティグループに追加できます。 セキュリティグループのすべてのルールがENIに適用されます。 ENIに複数のセカンダリIPv4またはIPv6アドレスを設定した場合、IPアドレスはルールに含まれ、変更できません。 ENIのセキュリティグループを変更する方法については、「ENIの属性の変更」をご参照ください。 変更は直ちに適用されます。 セキュリティグループの詳細については、「セキュリティグループの概要」をご参照ください。
API操作を呼び出してENIのリストを照会するときは、NextTokenパラメーターを指定してページ照会を実行できます。 詳細については、「DescribeNetworkInterfaces」をご参照ください。
ENIは、CentOS 6.8 64ビット、CentOS 7.3 64ビット、ウィンドウサーバー2008 R2以降のイメージを使用するECSインスタンスのオペレーティングシステムで自動的に設定されます。 他のイメージを使用するインスタンスの場合、ENIを手動で設定する必要があります。 詳細については、「セカンダリENIの設定」をご参照ください。
Alibaba Cloud CLIまたはSDKを使用して、またはAPI操作を呼び出してECSインスタンスを起動する場合、セカンダリENIをインスタンスにバインドできます。 詳細については、「セカンダリENIのバインド」をご参照ください。
Terway CNIプラグインを使用して、Kubernetesクラスター内のポッドのIPアドレスと通信を管理できます。 詳細については、「Terwayでの作業」をご参照ください。
同じサブネットの2つ以上のENIをECSインスタンスにバインドすると、非対称ルーティングなどのネットワーク上の問題が発生する可能性があります。 1つ以上のセカンダリプライベートIPアドレスをプライマリまたはセカンダリENIに割り当てて、VPCにデプロイされたECSインスタンスの使用を最適化し、フェールオーバー中にトラフィックを転送できます。 詳細については、「セカンダリプライベートIPアドレスの割り当て」をご参照ください。
単一のvCPUを使用してECSインスタンスでNIC割り込みを処理すると、パフォーマンスのボトルネックが発生する可能性があります。 ネットワークパフォーマンスを向上させるために、NICマルチキュー機能を使用してNIC割り込みを異なるvCPUに分散できます。 詳細については、「NICマルチキューの設定」をご参照ください。
eRDMAインターフェイス (ERI) を使用して、高性能コンピューティング、AIトレーニング、ビッグデータアプリケーションなどのオンプレミスのリモートダイレクトメモリアクセス (RDMA) アプリケーションをクラウドにシームレスに移行し、アプリケーションをクラウド内のサービスとして低コストで、より高い弾力性とパフォーマンスで実行できます。 詳細については、「eRDMAの概要」をご参照ください。
多数のENIがある場合は、グループ化と管理のためにENIにタグを追加できます。 タグの詳細については、「タグの概要」をご参照ください。
ENIを使用して、Server Load Balancer (SLB) インスタンスのバックエンドサーバーを追加できます。 詳細については、「ENIを指定してバックエンドサーバーを追加する」をご参照ください。
ENIの管理
ECSコンソールで、またはAPI操作を呼び出すことによって、ENIを管理および設定できます。
ECSコンソールでENIを表示、作成、変更、削除、バインド、およびバインド解除できます。
スクリプトを変更したり、SDKを使用してAPI操作を呼び出し、ENIをバッチ管理、操作、バインド、およびバインド解除することができます。
ECSコンソールの使用
API の呼び出し
CreateNetworkInterface: セカンダリENIを作成します。
DeleteNetworkInterface: セカンダリENIを削除します。
DescribeNetworkInterfaces: ENIのリストを照会します。
AttachNetworkInterface: セカンダリENIをECSインスタンスにバインドします。
AssignPrivateIpAddresses: 1つ以上のセカンダリプライベートIPアドレスをENIに割り当てます。
UnassignPrivateIpAddresses: ENIから1つ以上のセカンダリプライベートIPアドレスの割り当てを解除します。
DetachNetworkInterface: ECSインスタンスからENIのバインドを解除します。
ModifyNetworkInterfaceAttribute: ENIの名前、セキュリティグループ、および説明を変更します。
DescribeInstances: ECSインスタンスにバインドされているENIに関する情報を照会します。