概要

AmazonLinuxのインスタンスでスペック不足になったので、インスタンスタイプを変更しようとしたところ、下記のようなエラーがコンソールで表示されてインスタンスタイプの変更ができなかった。

インスタンス開始のエラー
Enhanced networking with the Elastic Network Adapter (ENA) is required for the ‘インスタンスタイプ’ instance type. Ensure that your instance ‘インスタンスID’ is enabled for ENA.

ENAとは拡張ネットワーキングと言い、ネットワークの帯域幅が古いタイプとENAが有効になっているタイプとでは異なり、ENAが有効になっている方が圧倒的に帯域幅が広い。(最大20Gbps)
AmazonLinuxではデフォルトで使用できるようになっているのだが、稀に古めのインスタンスで有効になっていない場合がある。
今回はそれに該当したので、変更した際の手順を記録する。

事前確認

まずは、modinfoでENAが有効になっているかを確認する。

$ modinfo ena
filename:       /lib/modules/4.14.62-65.117.amzn1.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
vermagic:       4.14.62-65.117.amzn1.x86_64 SMP mod_unload modversions
parm:           debug:Debug level (0=none,...,16=all) (int)

カーネルが古かったりすると、有効になっていなかったりするようなので、上記で確認できなかった場合はyum updateする。
有効になっていない場合は下記のような表示になる。

$ modinfo ena
modinfo: ERROR: Module ena not found.

問題なければ、一度インスタンスをシャットダウンする。
シャットダウンしたら、念の為、AMIを取得しておく。

次にawsacliでENA supportを確認する。

$ aws ec2 --profile プロファイル名 describe-instances --instance-ids インスタンスID --query "Reservations[].Instances[].EnaSupport"
[]

値が空であることを確認し、ENAを有効化する。

$ aws ec2 --profile プロファイル名 modify-instance-attribute --instance-id インスタンスID --ena-support

確認

$ aws ec2 --profile プロファイル名 describe-instances --instance-ids インスタンスID --query "Reservations[].Instances[].EnaSupport"
[
    true
]

これでENAが有効になった。
そして、無事にインスタンスタイプを変更できた。


参考資料

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