この記事を三行にまとめると
ENAドライバが入っているか確認AWS CLIでコマンドを実行
アーキテクチャによって選べるタイプが違う
AWSのEC2インスタンスの話なんですが、T2とかM4のふるーいインスタンスをずっと使っていてそれらをT3とかM6にアップデートしたかったんですけど、すんなりとは上手くいかなかったって話です。AWSのサポートの人も「インスタンスを停止してタイプ変更して再起動すりゃオッケーすよ」って言うからその通りにやったのに上手くいかなかったんでふざけんなこのヤローって思ったんですが、僕がそれまで使っていたT2やM4は向こうが思っていたよりもずっと古かったってことですね。
結局何が原因で上手くいかなかったかっていうと、ENAドライバというやつがインストールされていなかったからでした。T3やM5以降の世代のインスタンスはこのENAが入っていることが必須条件らしいです。
ENAドライバってのはElastic Network Adapterとかいうやつのことで、どういうものなのか詳しいことはよく分かりませんが、とりあえず最近のEC2インスタンスはデフォルトでこれが入っているから何の問題もないです。でも10年くらい前に立ち上げたインスタンスにはこれが入ってないので、M6とかに変更したかったらまずENAドライバをインストールするところからやらないといけないんですね。
もしインスタンスタイプを変更しようとしたときに「Elastic Network Adapter (ENA) is required」みたいなメッセージが出て変更できなかったら、ENAが入ってない証拠です。
あるいはSSHでインスタンスに接続して以下のコマンドを実行して確認することもできます。
もしここで「ERROR: modinfo: could not find module ena」みたいなメッセージが返ってきたらENAドライバが入っていないことになるので、インストール作業を行う必要があります。
そのためにはまずyumコマンドでパッケージのアップデートを行います。
そしたら一度インスタンスを停止して、コマンドツール(AWS CLI)を使用して以下のコマンドを実行します。
もし自分のPCにコマンドツールをインストールしていない場合はそのインストール作業も必要になりますが、今回の本題からははずれてしまうのでコマンドツールについての詳細はここでは割愛します。
変更したいインスタンスのIDを入力して上記のコマンドを実行すればENAドライバがインストールされますので、あとはインスタンスのタイプを変更して起動すればOKです。
もし起動が上手く行かないって場合は、インスタンスタイプを変更せずに一度起動してみて、ENAが有効になっているか確かめてみてください。
ENAドライバが有効になっているかどうかは以下のコマンドで確認できます。これもコマンドツールが必要です。
これでもしtrueが返ってきたら有効になっていますが何も返ってこなかったら上手く有効化されていないことになります。ただその場合にどういった原因が考えられるかはちょっと僕も分からないので、申し訳ないのですがサポートに質問を投げるなどして原因を探ってみてください。
ちなみにENAは有効になっているのにM6系に変更しようとしたら失敗したって場合は、アーキテクチャが原因かもしれません。
EC2にはX86とArmという2つのアーキテクチャがあります。そしてm6aやm6iはX86、m6gはArmじゃないと使えないという条件があります。なのでX86なのにm6gに変更しようとしたり、Armなのにm6aに変更しようとするとエラーになります。EC2を新規に起動するときにどちらかを選択しているはずなので、アーキテクチャに合わせて適切なインスタンスを選択してください。
結局何が原因で上手くいかなかったかっていうと、ENAドライバというやつがインストールされていなかったからでした。T3やM5以降の世代のインスタンスはこのENAが入っていることが必須条件らしいです。
ENAドライバってのはElastic Network Adapterとかいうやつのことで、どういうものなのか詳しいことはよく分かりませんが、とりあえず最近のEC2インスタンスはデフォルトでこれが入っているから何の問題もないです。でも10年くらい前に立ち上げたインスタンスにはこれが入ってないので、M6とかに変更したかったらまずENAドライバをインストールするところからやらないといけないんですね。
もしインスタンスタイプを変更しようとしたときに「Elastic Network Adapter (ENA) is required」みたいなメッセージが出て変更できなかったら、ENAが入ってない証拠です。
あるいはSSHでインスタンスに接続して以下のコマンドを実行して確認することもできます。
modinfo ena
もしここで「ERROR: modinfo: could not find module ena」みたいなメッセージが返ってきたらENAドライバが入っていないことになるので、インストール作業を行う必要があります。
そのためにはまずyumコマンドでパッケージのアップデートを行います。
yum update
そしたら一度インスタンスを停止して、コマンドツール(AWS CLI)を使用して以下のコマンドを実行します。
aws ec2 modify-instance-attribute --instance-id {インスタンスのID} --ena-support
もし自分のPCにコマンドツールをインストールしていない場合はそのインストール作業も必要になりますが、今回の本題からははずれてしまうのでコマンドツールについての詳細はここでは割愛します。
変更したいインスタンスのIDを入力して上記のコマンドを実行すればENAドライバがインストールされますので、あとはインスタンスのタイプを変更して起動すればOKです。
もし起動が上手く行かないって場合は、インスタンスタイプを変更せずに一度起動してみて、ENAが有効になっているか確かめてみてください。
ENAドライバが有効になっているかどうかは以下のコマンドで確認できます。これもコマンドツールが必要です。
aws ec2 describe-instances --instance-ids {インスタンスのID} --query "Reservations[].Instances[].EnaSupport"
これでもしtrueが返ってきたら有効になっていますが何も返ってこなかったら上手く有効化されていないことになります。ただその場合にどういった原因が考えられるかはちょっと僕も分からないので、申し訳ないのですがサポートに質問を投げるなどして原因を探ってみてください。
ちなみにENAは有効になっているのにM6系に変更しようとしたら失敗したって場合は、アーキテクチャが原因かもしれません。
EC2にはX86とArmという2つのアーキテクチャがあります。そしてm6aやm6iはX86、m6gはArmじゃないと使えないという条件があります。なのでX86なのにm6gに変更しようとしたり、Armなのにm6aに変更しようとするとエラーになります。EC2を新規に起動するときにどちらかを選択しているはずなので、アーキテクチャに合わせて適切なインスタンスを選択してください。