Amazon EC2 (AWS) で動かしていた t2 インスタンスを、今更ながらですが、t3 インスタンスへ移行したので、そのメモ書き。
t3 インスタンスに変更すると、CPUクレジットの扱いが少し変わりますが、コストパフォーマンスはよくなるケースが多いはず。
t2 から t3 へ移行したブログエントリーは探すといくつか見つかるが、日本語での欲しい情報にたどりつけなかったこともあり、その辺もこのエントリにメモしておくことにする。
はじめに: このエントリーを書こうと思ったきっかけ
事前に作成されていたAMIから都度 t2 インスタンスを起動して使用するようなユースケースが前提としてあり、その保存済みのAMIからは、t3 インスタンスが起動できない状態でした。
インスタンスタイプの選択画面はこんな感じ。
で、この保存済みの AMI の設定をなんとか変更して、t3 インスタンスタイプに対応できないか、と色々調べたのですが、結論としては、AMI を再作成しないといけない模様。多分。
ので、やったことはシンプルに AMI からインスタンスを起動し、t3 でも起動可能な設定を行い、AMIを再作成するという流れで行いました。
ということで、以下の公式ドキュメントを参考に作業したので、こちらを見てもらう方が確実かもしれない。
確認していくべきこと
t3 インスタンスで動かすためには、ENA (Elastic Net Adapter) を有効化する必要があります。
お使いのインスタンスで ENA サポートが有効かどうかは、
- カーネルモジュール (ena) が有効になっているか
- "enaSupport" 属性が設定されているか
を確認する必要があります。
次の AMI には必要な ENA モジュールが含まれており、ENA のサポートが有効になっています。
Linux/ インスタンスにおける Elastic Network Adapter (ENA) を使用した拡張ネットワーキングの有効化 - Amazon Elastic Compute Cloud
- Amazon Linux 2
- Amazon Linux AMI 2018.03
- Ubuntu 14.04 (linux-awsカーネル) 以降
- Red Hat Enterprise Linux 7.4 以降
- SUSE Linux Enterprise Server 12 SP2 以降
- CentOS 7.4.1708 以降
- FreeBSD 11.1 以降
- Debian GNU/Linux 9 以降
実際の確認ログ
既存の AMI から EC2 インスタンスを起動して、 ena モジュールが有効化されているかを確認します。
# modinfo ena filename: /lib/modules/4.9.76-3.78.amzn1.x86_64/kernel/drivers/amazon/net/ena/ena.ko version: 1.4.0U license: GPL description: Elastic Network Adapter (ENA) author: Amazon.com, Inc. or its affiliates srcversion: 963AA763EBF4D86DF9EF826 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: intree: Y vermagic: 4.9.76-3.78.amzn1.x86_64 SMP mod_unload modversions parm: debug:Debug level (0=none,...,16=all) (int)
modinfo コマンドで確認。有効化されていますね。
もし有効化されていない場合、Amazon Linux の最新バージョン等では、ENA がインストールされた拡張ネットワーキングに必要なモジュールが含まれているとのことなので、 "sudo yum update" などで最新に更新してみましょう。
(OSのアップデートについては、OSによって手順が異なりますが、その説明はここでは割愛します。)
次、ネットワークインターフェースでドライバーがロードされているかを確認します。
# 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 ではなく vif モジュールがロードされています。
ということで次、インスタンスに enaSupport 属性が設定されているかどうかを確認します。
動かしているインスタンスIDを調べた上で、AWS CLIの以下コマンドを実行してみます。
$ aws ec2 describe-instances --instance-ids i-xxxxxxxx --output json | jq '.Reservations[].Instances[].EnaSupport' null
値がつまっていないので設定されていないですね。
ということで、次に拡張ネットワーキングの設定を行います。
拡張ネットワーキング (enaSupport 属性) の設定
こちらも AWS CLI の以下コマンドで実行。
$ aws ec2 modify-instance-attribute --instance-id i-xxxxxxxx --ena-support An error occurred (IncorrectInstanceState) when calling the ModifyInstanceAttribute operation: The instance 'i-xxxxxxxx' is not in the 'stopped' state.
エラーが返ってきました。
インスタンスが稼働したままでは設定変更ができないようなので、インスタンスを停止してから、再実行します。
$ aws ec2 modify-instance-attribute --instance-id i-xxxxxxxx --ena-support
エラーが返ってきていないので、今度は問題なさそうです。(ちゃんと終了コード見るべきかw)
$ aws ec2 describe-instances --instance-ids i-xxxxxxxx --output json | jq '.Reservations[].Instances[].EnaSupport' true
上記のように確認のコマンドを実行したところ、問題なく "true" が返ってきています。これで有効化された、と。
この状態で、AMI を再作成しておけば、ENAが有効化された AMI となります。
(ということで AMI を作成した。)
t3 インスタンスを起動して確認
さて、EC2 インスタンスを起動する際の AMI の選択画面を見ると、先ほど作成した AMI は、以下のような感じで、"ENA 有効" の項目が "はい" になっていることが確認できます。
ENA が有効なAMIを作成すると、以下のように t3 ファミリーのインスタンスを選択して起動することができます。
で、t3 インスタンスは問題なく起動したので、実際に起動したインスタンスで、ネットワークインターフェースのドライバーに ena があたっているかを確認してみると、、、
# ethtool -i eth0 driver: ena version: 1.4.0U firmware-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
OK、変更されていますね。
手順はざっくりこんな感じでしたー。
それでは!=͟͟͞͞(๑•̀=͟͟͞͞(๑•̀д•́=͟͟͞͞(๑•̀д•́๑)=͟͟͞͞(๑•̀д•́