RHEL 7.4 で AWS の Elastic Network Adapter を有効にしてみる

AWS運用自動化サービス「Cloud Automator」
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。

技術2課の寺田です。
若干夏バテ気味で、食欲がイマイチな今日この頃です。長野県は東京よりは涼しいのですが、なんとなくこういう時はカレーが多くて、週に半分はカレー味になってます。

さて、Red Hat Enterprise Linux 7.4 (RHEL7.4) が正式リリースになって、 ENA (Elastic Network Adapter) をサポートしましたので、
ENAと、ENAの有効化の方法について改めて見ていこうと思います。

ENAとは

去年の6月に出たもので、大きなインスタンスタイプでも帯域幅は最大 10 Gpbs までだったものが、
最大 20 Gpbs までのサポートになりました。
EC2 インスタンス向けの次世代ネットワークインターフェイス、Elastic Network Adapter (ENA) を導入

当初は X1 インスタンス向けでしたが、現在だと新しい世代のインスタンスの
F1, G3, I3, P2, R4, X1 の各タイプと、 m4の m4.16xlarge でサポートがされています。

基本的に AWS の基本的な OS ではすでにサポートがされており、
AMIの状態で有効化がされていますが、
RHEL 7.4 は OS ではサポートをしたものの、まだ AMI のレベルでは ENA が標準で適用にはなっていないため、
これを有効化する手順を見ていきたいと思います。

インスタンスタイプをENA対応のインスタンスに変更するなどの場合でも、基本的には同じ手順となりますので、参考にしてみてください。

公式ドキュメントはこちらになります。
VPC 内の Linux インスタンスにおける Elastic Network Adapter (ENA) を使用した拡張ネットワーキングの有効化

AMIで有効化されているかを確認する

ローンチする前にENAが標準で有効になっているかを確認するためには、
CLIを利用すると、先ほどのドキュメントより

となります。

試しに、東京リージョンの Amazon Linux (AMI ID は ami-3bd3c45c)で確認すると

と、レスポンスが返ってきます。

これを、RHEL7.4 のAMI (AMI ID は ami-3901e15f )でやってみると、

となり、AMIでは標準設定されていないことがわかります。

インスタンス内部からの確認

RHEL7.4 に ena モジュールがインストールされているかを確認して見ます。
公式ドキュメント通りコマンドは、 modinfo ena となります

インストールされていないと
ERROR: modinfo: could not find module ena
とレスポンスがあります。

実際 RHEL 7.4 を r4.large のインスタンスでローンチして試してみると

とレスポンンスがあり、 ena モジュールはインストールされていることがわかりました。

他のディストリビューションの Linux などの、
古いバージョンからのアップデートで、 yum や apt-get で入手できない場合は、
ドキュメントにも記載がある通り、 GitHub のリポジトリから、ダウンロードし、インストールする必要が出てきます。
https://github.com/amzn/amzn-drivers

次に、ENAが利用されているかを確認します。
コマンドは ethtool -i eth0 となります。

となるので、AMIからローンチしただけだと、 vif モジュールが利用されていることになります。

ENA の有効化

今までの下調べで、
現在のところ、 ENA はモジュールはインストールされているが、
利用されていない状態になっていることがわかりました。

インスタンスのENAのフラグは、AMIから継承されるので、AMIでフラグが立っていない場合は、
適用になっていませんが、一応確認しておきます。
コマンドは aws ec2 modify-instance-attribute --instance-id instance_id --ena-support です。

となり、何もレスポンスがないため、有効化されていない状態となります。

ENAを有効化するためには、一度インスタンスを止める必要があるため、シャットダウンをしてください。
インスタンスが停止したら、ENAをコマンドで有効化します
コマンドは aws ec2 modify-instance-attribute --instance-id instance_id --ena-support です。
コマンドの入力後に特にレスポンスはないため、確認コマンドを続けて入力します。

これでインスタンスでの有効化されているので、インスタンスを起動して、確認をします。
CLIでやっているので、起動もCLIでやるには aws ec2 start-instances --instance-ids instance_id と入れてください。

sshでログインをして、
コマンドは ethtool -i eth0 で確認してください。

ENA が適用されているのが確認できました。

AMIへの適用

ENA適用をしたのち、
AMI作成をすると、ENAが標準で適用されたAMIが作成可能です。

まとめ

RHEL 7.4 の ENA のサポートを機に、
ENA が未適用のインスタンスへの、 ENA の適用方法を見てきました
r3からr4インスタンスへの変更などの、ENA未サポートのインスタンスからENA利用可能のインスタンスへの変更でも、同じ方法で変更が可能となります。

適用してマイナスになることは基本的にないと考えてもらって良いので、新しい世代のインスタンスを使う場合は、ぜひ適用をしてみてください。

AWS運用自動化サービス「Cloud Automator」