Linux インスタンスにおける Elastic Network Adapter (ENA) を使用した拡張ネットワーキングの有効化 - Amazon Elastic Compute Cloud

Linux インスタンスにおける Elastic Network Adapter (ENA) を使用した拡張ネットワーキングの有効化

Amazon EC2 は、Elastic Network Adapter (ENA) を介してネットワーキング機能を提供します。拡張ネットワーキングを使用するには、必要な ENA モジュールをインストールし、ENA のサポートを有効にする必要があります。

要件

ENA を使用した拡張ネットワーキングを準備するには、次のようにインスタンスをセットアップします。

  • AWS Nitro System に構築されたインスタンスを起動します。

  • サポートされているバージョンの Linux カーネルとサポートされているディストリビューションを使用してインスタンスを起動します。インスタンスに対して ENA 拡張ネットワーキングが自動的に有効化されます。詳細については、ENA Linux Kernel Driver リリースノートを参照してください。

  • インスタンスがインターネットに接続されていることを確認します。

  • 選択した任意のコンピュータ、できればローカルのデスクトップまたはノートパソコンで、AWS Management Console から AWS CloudShell を使用するか、AWS CLI もしくは AWS Tools for Windows PowerShell をインストールし設定します。詳細については、Amazon EC2 へのアクセスもしくは AWS CloudShell ユーザーガイドを参照してください。拡張ネットワーキングは、Amazon EC2 コンソールから管理することはできません。

  • 保持する必要がある重要なデータがインスタンスにある場合、インスタンスから AMI を作成してそのデータをバックアップする必要があります。enaSupport 属性を有効にするとともに、カーネルおよびカーネルモジュールを更新すると、互換性のないインスタンスがレンダリングされたり、オペレーティングシステムに接続できなくなったりする可能性があります。最近のバックアップがある場合は、これが発生してもデータは保持されます。

拡張ネットワーキングのパフォーマンス

以下のドキュメントには、ENA 拡張ネットワーキングをサポートするインスタンスタイプのネットワークパフォーマンスの概要が記載されています。

拡張ネットワーキングが有効化されているかどうかのテスト

次の AMI には必要な ENA モジュールが含まれており、ENA のサポートが有効になっています。

  • AL2023

  • Amazon Linux 2

  • Amazon Linux AMI 2018.03 以降

  • linux-aws カーネルを搭載した Ubuntu 14.04 以降

    注記

    AWS Graviton ベースのインスタンスタイプには、linux-aws カーネル搭載の Ubuntu 18.04 以降が必要です

  • Red Hat Enterprise Linux 7.4 以降

  • SUSE Linux Enterprise Server 12 SP2 以降

  • CentOS 7.4.1708 以降

  • FreeBSD 11.1 以降

  • Debian GNU/Linux 9 以降

拡張ネットワーキングが既に有効になっているかどうかをテストするには、ena モジュール がインスタンスにインストールされていることと、enaSupport 属性が設定されていることを確認します。インスタンスがこれら 2 つの条件を満たしている場合は、ethtool -i ethn コマンドによって、ネットワークインターフェイスで使用されているモジュールが表示されます。

カーネルモジュール (ena)

ena モジュールがインストールされたことを確認するには、以下の例に示されるように modinfo コマンドを使用します。

[ec2-user ~]$ modinfo ena filename: /lib/modules/4.14.33-59.37.amzn2.x86_64/kernel/drivers/amazon/net/ena/ena.ko version: 1.5.0g license: GPL description: Elastic Network Adapter (ENA) author: Amazon.com, Inc. or its affiliates srcversion: 692C7C68B8A9001CB3F31D0 alias: pci:v00001D0Fd0000EC21sv*sd*bc*sc*i* alias: pci:v00001D0Fd0000EC20sv*sd*bc*sc*i* alias: pci:v00001D0Fd00001EC2sv*sd*bc*sc*i* alias: pci:v00001D0Fd00000EC2sv*sd*bc*sc*i* depends: retpoline: Y intree: Y name: ena ...

上の Amazon Linux のケースでは、ena モジュールはインストールされています。

ubuntu:~$ modinfo ena ERROR: modinfo: could not find module ena

上の Ubuntu インスタンスでは、モジュールはインストールされていないため、まずインストールする必要があります。詳細については、Ubuntu での拡張ネットワーキングの有効化を参照してください。

インスタンス属性 (enaSupport)

インスタンスに拡張ネットワーキングの enaSupport 属性が設定されているかどうかを確認するには、次のいずれかのコマンドを使用します。属性が設定されている場合、レスポンスは true です。

  • describe-instances (AWS CLI/AWS CloudShell)

    aws ec2 describe-instances --instance-ids instance_id --query "Reservations[].Instances[].EnaSupport"
  • Get-EC2Instance (Windows PowerShell 用のツール)

    (Get-EC2Instance -InstanceId instance-id).Instances.EnaSupport
イメージ属性 (enaSupport)

AMI に拡張ネットワーキングの enaSupport 属性が設定されているかどうかを確認するには、次のいずれかのコマンドを使用します。属性が設定されている場合、レスポンスは true です。

  • describe-images (AWS CLI/AWS CloudShell)

    aws ec2 describe-images --image-id ami_id --query "Images[].EnaSupport"
  • Get-EC2Image (Windows PowerShell 用のツール)

    (Get-EC2Image -ImageId ami_id).EnaSupport
ネットワークインターフェイスドライバー

次のコマンドを使用して、ena モジュールが特定のインターフェイスで使用されていることを確認し、確認するインターフェイス名に置き換えます。単一のインターフェイス (デフォルト) を使用している場合は、eth0 です。オペレーティングシステムで予測可能なネットワーク名がサポートされている場合は、ens5 のような名前にすることができます。

次の例で、リストされているドライバーは vif であるため、ena モジュールはロードされていません。

[ec2-user ~]$ ethtool -i eth0 driver: vif version: firmware-version: bus-info: vif-0 supports-statistics: yes supports-test: no supports-eeprom-access: no supports-register-dump: no supports-priv-flags: no

この例では、ena モジュールがロードされており、最小推奨バージョンです。このインスタンスでは、拡張ネットワーキングが適切に設定されています。

[ec2-user ~]$ ethtool -i eth0 driver: ena version: 1.5.0g firmware-version: expansion-rom-version: bus-info: 0000:00:05.0 supports-statistics: yes supports-test: no supports-eeprom-access: no supports-register-dump: no supports-priv-flags: no

Amazon Linux AMI での拡張ネットワーキングの有効化

Amazon Linux 2 および Amazon Linux AMI の最新バージョンには、ENA がインストールされた拡張ネットワーキングに必要なモジュールが含まれており、ENA のサポートが有効になっています。したがって、サポートされるインスタンスタイプで HVM バージョンの Amazon Linux を使用してインスタンスを起動した場合、拡張ネットワーキングは既にインスタンスで有効になっています。詳細については、拡張ネットワーキングが有効化されているかどうかのテストを参照してください。

以前の Amazon Linux AMI を使用してインスタンスを起動し、まだ拡張ネットワーキングが有効になっていない場合、拡張ネットワーキングを有効にするには次の手順を実行します。

Amazon Linux AMI で拡張ネットワーキングを有効化するには
  1. インスタンスに接続します。

  2. インスタンスから、次のコマンドを実行して、ena を含む最新のカーネルとカーネルモジュールでインスタンスを更新します。

    [ec2-user ~]$ sudo yum update
  3. ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを再起動します。reboot-instances (AWS CLI)、Restart-EC2Instance (AWS Tools for Windows PowerShell)。

  4. インスタンスに再接続し、enamodinfo ena コマンドを使用して、拡張ネットワーキングが有効化されているかどうかのテスト モジュールがインストールされ、最小推奨バージョンであることを確認します。

  5. [EBS-backed インスタンス] ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを停止します。stop-instances (AWS CLI)、Stop-EC2Instance (AWS Tools for Windows PowerShell)。インスタンスを AWS OpsWorks で管理する場合、インスタンスの状態が同期し続けるために、AWS OpsWorks コンソールでインスタンスを停止する必要があります。

    [Instance store-backed インスタンス] インスタンスを停止して属性を変更することはできません。代わりに、この手順に進んでください: Amazon Linux AMI で拡張ネットワーキングを有効にするには (Instance store-backed インスタンス)

  6. ローカルコンピュータから、次のいずれかのコマンドを使用して拡張ネットワーキングの属性を有効化します。

  7. (オプション) Amazon EBS-backed Linux AMI を作成するの説明に従って、インスタンスから AMI を作成します。AMI は、インスタンスから拡張ネットワーキング enaSupport 属性を継承します。このため、この AMI を使用することで、拡張ネットワーキングがデフォルトで有効になっている別のインスタンスを起動できます。

  8. ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを開始します。start-instances (AWS CLI)、Start-EC2Instance (AWS Tools for Windows PowerShell)。インスタンスを AWS OpsWorks で管理する場合、インスタンスの状態が同期し続けるために、AWS OpsWorks コンソールでインスタンスを停止する必要があります。

  9. インスタンスに接続し、拡張ネットワーキングが有効化されているかどうかのテストethtool -i ethn コマンドを使用して、ena モジュールがインストールされ、ネットワークインターフェイスにロードされていることを確認します。

    拡張ネットワーキングを有効にした後にインスタンスに接続できない場合、Elastic Network Adapter (ENA) のトラブルシューティングを参照してください。

Amazon Linux AMI で拡張ネットワーキングを有効にするには (Instance store-backed インスタンス)

インスタンスを停止するステップまで、前の手順に従います。instance store-backed Linux AMI を作成するに記述されているように、新しい AMI を作成します。AMI を登録するときに拡張ネットワーキング属性を有効にしてください。

  • register-image (AWS CLI)

    aws ec2 register-image --ena-support ...
  • Register-EC2Image (AWS Tools for Windows PowerShell)

    Register-EC2Image -EnaSupport $true ...

Ubuntu での拡張ネットワーキングの有効化

最新の Ubuntu HVM AMI には、ENA がインストールされた拡張ネットワーキングに必要なモジュールが含まれており、ENA のサポートが有効になっています。したがって、サポートされるインスタンスタイプで最新の Ubuntu HVM AMI を使用してインスタンスを起動した場合、拡張ネットワーキングは既にインスタンスで有効になっています。詳細については、拡張ネットワーキングが有効化されているかどうかのテストを参照してください。

以前の AMI を使用してインスタンスを起動した場合、まだ拡張ネットワーキングが有効になっていなければ、linux-aws カーネルパッケージをインストールして最新の拡張ネットワーキングドライバーを取得して、必要な属性を更新できます。

linux-aws カーネルパッケージをインストールするには (Ubuntu 16.04 以降)

Ubuntu 16.04 および 18.04 には、Ubuntu カスタムカーネル (linux-aws カーネルパッケージ) が付属しています。別のカーネルを使用するには、AWS Support にお問い合わせください。

linux-aws カーネルパッケージをインストールするには (Ubuntu Trusty 14.04)
  1. インスタンスに接続します。

  2. パッケージキャッシュおよびパッケージを更新します。

    ubuntu:~$ sudo apt-get update && sudo apt-get upgrade -y linux-aws
    重要

    更新プロセス中に grub をインストールするよう求められた場合は、/dev/xvda のインストール先として grub を使用し、現在のバージョンの /boot/grub/menu.lst を保持することを選択します。

  3. [EBS-backed インスタンス] ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを停止します。stop-instances (AWS CLI)、Stop-EC2Instance (AWS Tools for Windows PowerShell)。インスタンスを AWS OpsWorks で管理する場合、インスタンスの状態が同期し続けるために、AWS OpsWorks コンソールでインスタンスを停止する必要があります。

    [Instance store-backed インスタンス] インスタンスを停止して属性を変更することはできません。代わりに、この手順に進んでください: Ubuntu で拡張ネットワーキングを有効にするには (Instance store-backed インスタンス)

  4. ローカルコンピュータから、次のいずれかのコマンドを使用して拡張ネットワーキングの属性を有効化します。

  5. (オプション) Amazon EBS-backed Linux AMI を作成するの説明に従って、インスタンスから AMI を作成します。AMI は、インスタンスから拡張ネットワーキング enaSupport 属性を継承します。このため、この AMI を使用することで、拡張ネットワーキングがデフォルトで有効になっている別のインスタンスを起動できます。

  6. ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを開始します。start-instances (AWS CLI)、Start-EC2Instance (AWS Tools for Windows PowerShell)。インスタンスを AWS OpsWorks で管理する場合、インスタンスの状態が同期し続けるために、AWS OpsWorks コンソールでインスタンスを停止する必要があります。

Ubuntu で拡張ネットワーキングを有効にするには (Instance store-backed インスタンス)

インスタンスを停止するステップまで、前の手順に従います。instance store-backed Linux AMI を作成するに記述されているように、新しい AMI を作成します。AMI を登録するときに拡張ネットワーキング属性を有効にしてください。

  • register-image (AWS CLI)

    aws ec2 register-image --ena-support ...
  • Register-EC2Image (AWS Tools for Windows PowerShell)

    Register-EC2Image -EnaSupport $true ...

Linux での拡張ネットワーキングの有効化

Red Hat Enterprise Linux、SUSE Linux Enterprise Server、および CentOS 用の最新の AMI には、ENA を使用した拡張ネットワーキングに必要なモジュールが含まれており、ENA のサポートが有効になっています。したがって、サポートされるインスタンスタイプで最新の AMI を使用してインスタンスを起動した場合、拡張ネットワーキングは既にインスタンスで有効になっています。詳細については、拡張ネットワーキングが有効化されているかどうかのテストを参照してください。

次の手順では、Amazon Linux AMI または Ubuntu 以外の Linux ディストリビューションで拡張ネットワーキングを有効にするための一般的なステップを説明します。コマンドの詳細な構文、ファイルの場所、パッケージやツールのサポートなどの詳細については、使用する Linux ディストリビューションのドキュメントを参照してください。

Linux で拡張ネットワーキングを有効化するには
  1. インスタンスに接続します。

  2. https://github.com/amzn/amzn-drivers の GitHub からインスタンスで ena モジュールのソースコードのクローンを作成します。(SUSE Linux Enterprise Server 12 SP2 以降には、デフォルトで ENA 2.02 が含まれているため、ENA ドライバーをダウンロードしてコンパイルする必要はありません。SUSE Linux Enterprise Server 12 SP2 以降では、必要なドライバーバージョンを標準カーネルに追加するためリクエストを申請する必要があります。)

    git clone https://github.com/amzn/amzn-drivers
  3. インスタンスで ena モジュールをコンパイルし、インストールします。これらの手順は Linux ディストリビューションによって異なります。Red Hat Enterprise Linux でのモジュールのコンパイルの詳細については、「RHEL を実行する Amazon EC2 インスタンスに拡張ネットワークサポート用の最新の ENS ドライバーをインストールする方法」を参照してください。

  4. sudo depmod コマンドを実行して、モジュールの依存関係を更新します。

  5. 起動時に新しいモジュールがロードされるように、インスタンスの initramfs を更新します。例えば、ディストリビューションで dracut がサポートされる場合、次のコマンドを使用できます。

    dracut -f -v
  6. システムがデフォルトで予測可能なネットワークインターフェイス名を使用するかどうかを確認します。systemd または udev のバージョン 197 以上を使用するシステムの場合、イーサネットデバイスの名前を変更でき、単一ネットワークインターフェイスの名前が eth0 になることは保証されません。この動作は、インスタンスに接続する際に問題の原因となる可能性があります。詳細と他の設定オプションについては、freedesktop.org ウェブサイトでPredictable Network Interface Names/を参照してください。

    1. 次のコマンドを使用して、RPM ベースのシステムで systemd または udev のバージョンを確認できます。

      rpm -qa | grep -e '^systemd-[0-9]\+\|^udev-[0-9]\+' systemd-208-11.el7_0.2.x86_64

      上記の Red Hat Enterprise Linux 7 の例では、systemd のバージョンは 208 であるため、予測可能なネットワークインターフェイス名は無効になっている必要があります。

    2. net.ifnames=0 オプションを GRUB_CMDLINE_LINUX/etc/default/grub 行に追加することによって、予測可能なネットワークインターフェイス名を無効にします。

      sudo sed -i '/^GRUB\_CMDLINE\_LINUX/s/\"$/\ net\.ifnames\=0\"/' /etc/default/grub
    3. grub の設定ファイルを再ビルドします。

      sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  7. [EBS-backed インスタンス] ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを停止します。stop-instances (AWS CLI)、Stop-EC2Instance (AWS Tools for Windows PowerShell)。インスタンスを AWS OpsWorks で管理する場合、インスタンスの状態が同期し続けるために、AWS OpsWorks コンソールでインスタンスを停止する必要があります。

    [Instance store-backed インスタンス] インスタンスを停止して属性を変更することはできません。代わりに、この手順に進んでください: Linux で拡張ネットワーキングを有効にするには (Instance store-backed インスタンス)

  8. ローカルコンピュータから、次のいずれかのコマンドを使用して拡張ネットワーキングの enaSupport 属性を有効化します。

  9. (オプション) Amazon EBS-backed Linux AMI を作成するの説明に従って、インスタンスから AMI を作成します。AMI は、インスタンスから拡張ネットワーキング enaSupport 属性を継承します。このため、この AMI を使用することで、拡張ネットワーキングがデフォルトで有効になっている別のインスタンスを起動できます。

    インスタンスオペレーティングシステムに /etc/udev/rules.d/70-persistent-net.rules が含まれている場合には、AMI を作成する前にそれを削除する必要があります。このファイルには、元のインスタンスのイーサネットアダプターの MAC アドレスが保存されています。別のインスタンスがこのファイルを使用して起動した場合、オペレーティングシステムがそのデバイスを検出できなくなり、eth0 が失敗して、起動に関する問題が発生することがあります。このファイルは次の起動サイクルで再び生成され、AMI から起動されるインスタンスごとに独自のバージョンが作成されます。

  10. ローカルコンピュータから、Amazon EC2 コンソールまたは次のいずれかのコマンドを使用して、インスタンスを開始します。start-instances (AWS CLI)、Start-EC2Instance (AWS Tools for Windows PowerShell)。インスタンスを AWS OpsWorks で管理する場合、インスタンスの状態が同期し続けるために、AWS OpsWorks コンソールでインスタンスを停止する必要があります。

  11. (オプション) インスタンスに接続し、モジュールがインストールされていることを確認します。

    拡張ネットワーキングを有効にした後にインスタンスに接続できない場合、Elastic Network Adapter (ENA) のトラブルシューティングを参照してください。

Linux で拡張ネットワーキングを有効にするには (Instance store-backed インスタンス)

インスタンスを停止するステップまで、前の手順に従います。instance store-backed Linux AMI を作成するに記述されているように、新しい AMI を作成します。AMI を登録するときに拡張ネットワーキング属性を有効にしてください。

DKMS を使用した Ubuntu での拡張ネットワーキングの有効化

この方法は、テストおよびフィードバックのみを目的としています。本番稼働用デプロイによる使用を目的としていません。本番稼働デプロイについては、Ubuntu での拡張ネットワーキングの有効化を参照してください。

重要

DKMS を使用すると、サブスクリプションのサポート契約が無効になります。本稼働環境では使用しないでください。

Ubuntu で ENA を使用した拡張ネットワーキングを有効にするには (EBS-backed インスタンス)
  1. Ubuntu での拡張ネットワーキングの有効化 のステップ 1 および 2 を行います。

  2. build-essential パッケージをインストールしてカーネルモジュールと dkms パッケージをコンパイルし、カーネルが更新されるたびに ena モジュールが再構築されるようにします。

    ubuntu:~$ sudo apt-get install -y build-essential dkms
  3. の GitHub からインスタンスで ena モジュールのソースのクローンを作成します。。https://github.com/amzn/amzn-drivers

    ubuntu:~$ git clone https://github.com/amzn/amzn-drivers
  4. amzn-drivers パッケージを /usr/src/ ディレクトリに移動して、カーネルの更新のたびに DKMS がこのパッケージを見つけて構築できるようにします。ソースコードのバージョン番号 (現在のバージョン番号はリリースノートにあります) をディレクトリ名に付加します。例えば、バージョン 1.0.0 は以下のようになります。

    ubuntu:~$ sudo mv amzn-drivers /usr/src/amzn-drivers-1.0.0
  5. 以下の値を使用して DKMS 設定ファイルを作成し、ena のバージョンに置き換えます。

    ファイルを作成します。

    ubuntu:~$ sudo touch /usr/src/amzn-drivers-1.0.0/dkms.conf

    ファイルを編集し、次の値を追加します。

    ubuntu:~$ sudo vim /usr/src/amzn-drivers-1.0.0/dkms.conf PACKAGE_NAME="ena" PACKAGE_VERSION="1.0.0" CLEAN="make -C kernel/linux/ena clean" MAKE="make -C kernel/linux/ena/ BUILD_KERNEL=${kernelver}" BUILT_MODULE_NAME[0]="ena" BUILT_MODULE_LOCATION="kernel/linux/ena" DEST_MODULE_LOCATION[0]="/updates" DEST_MODULE_NAME[0]="ena" AUTOINSTALL="yes"
  6. DKMS を使用して、インスタンスで ena モジュールを追加、構築、インストールします。

    DKMS にモジュールを追加します。

    ubuntu:~$ sudo dkms add -m amzn-drivers -v 1.0.0

    dkms コマンドを使用してモジュールを構築します。

    ubuntu:~$ sudo dkms build -m amzn-drivers -v 1.0.0

    dkms を使用してモジュールをインストールします。

    ubuntu:~$ sudo dkms install -m amzn-drivers -v 1.0.0
  7. 起動時に正しいモジュールがロードされるように、initramfs を再ビルドします。

    ubuntu:~$ sudo update-initramfs -u -k all
  8. 拡張ネットワーキングが有効化されているかどうかのテスト から modinfo ena コマンドを使用して、ena モジュールがインストールされていることを確認します。

    ubuntu:~$ modinfo ena filename: /lib/modules/3.13.0-74-generic/updates/dkms/ena.ko version: 1.0.0 license: GPL description: Elastic Network Adapter (ENA) author: Amazon.com, Inc. or its affiliates srcversion: 9693C876C54CA64AE48F0CA alias: pci:v00001D0Fd0000EC21sv*sd*bc*sc*i* alias: pci:v00001D0Fd0000EC20sv*sd*bc*sc*i* alias: pci:v00001D0Fd00001EC2sv*sd*bc*sc*i* alias: pci:v00001D0Fd00000EC2sv*sd*bc*sc*i* depends: vermagic: 3.13.0-74-generic SMP mod_unload modversions parm: debug:Debug level (0=none,...,16=all) (int) parm: push_mode:Descriptor / header push mode (0=automatic,1=disable,3=enable) 0 - Automatically choose according to device capability (default) 1 - Don't push anything to device memory 3 - Push descriptors and header buffer to device memory (int) parm: enable_wd:Enable keepalive watchdog (0=disable,1=enable,default=1) (int) parm: enable_missing_tx_detection:Enable missing Tx completions. (default=1) (int) parm: numa_node_override_array:Numa node override map (array of int) parm: numa_node_override:Enable/Disable numa node override (0=disable) (int)
  9. Ubuntu での拡張ネットワーキングの有効化 のステップ 3 に進みます。

ドライバーのリリースノート

Linux ENA ドライバーのバージョンについては、ENA Linux カーネルドライバーのリリースノートを参照してください 。

トラブルシューティング

トラブルシューティング情報については、Elastic Network Adapter (ENA) のトラブルシューティングを参照してください。