EC2をT2からT3aに変更しようとしたら怒られた話

技術ネタ
この記事は約9分で読めます。

こんにちわ、hisayukiです。

弊社の社内システムが乗ってるEC2、既に2年ほど経ってまして・・・
未だにt2.microなんですよね。

少し課題もあったので、この際T3にしようとしたらハマった話を書いていきます。

スポンサーリンク

経緯

一応対外向けにもなっているのですが、結構ローカルな範囲でしか使われないんで大したアクセス数もなかったのですが・・・
ここ何ヶ月か、月末の1日だけ特定の時間になると急激にアクセスがありCPUが天井張り付くことがあります。

時間も固定で要因もわかってるのですが、その時間になるとCPU張り付くまでが一瞬。
これはAutoScalingでは間に合わない・・・
なので、とりあえず今月はインスタンスタイプを上げて様子を見ることに。

そのついでに、T2からT3aに切り替えようかなと思ったわけです。

なんか怒られた

まぁ、インスタンスタイプを変えるだけなの一旦EC2インスタンスを停止してポチポチって感じで変えました。

一応、t3a.smallに変更して適用。
そのまま元の画面で、インスタンスを再度開始します。

ぇ、なにこれ?

即座にまた、T2に戻して一旦調べることに・・・w

そもそもENAとは?

Enhanced networking with the Elastic Network Adapter(ENA) is required for the ‘t3a.small’ instance type. Ensure that your instance ‘i-‘ is enabled for ENA.

Googleさんに翻訳してもらうとこんな感じ。

‘t3a.small’インスタンスタイプには、Elastic Network Adapter(ENA)を使用した拡張ネットワーキングが必要です。 インスタンス ‘i-********’がENAに対して有効になっていることを確認します。

とりあえずENAってのが必要なのはわかりました。
どうやらこれのことっぽいですね。

そして有効化の方法も調べたら出てきました

うーん、とりあえずAWS CLIからじゃないと有効化できないっぽいですねぇ。。。

ENAの有効化

まずは書かれてる通りのやり方で進めてみます。

事前確認

対象のインスタンスにSSHで入って、まずはcat /etc/system-releaseコマンドでバージョン確認

[ec2-user@ ~]$ cat /etc/system-release
Amazon Linux AMI release 2018.03

うん、やっぱり古い。
Amazon Linux2ではなくAmazon Linux AMIですねw

次はmodinfo enaコマンドでenaモジュールがインストールされているか確認

[ec2-user@ ~]$ modinfo ena
filename:       /lib/modules/4.14.109-80.92.amzn1.x86_64/kernel/drivers/amazon/net/ena/ena.ko
version:        2.0.2g
license:        GPL
description:    Elastic Network Adapter (ENA)
author:         Amazon.com, Inc. or its affiliates
srcversion:     DF971F3B33F323495F5FAC6
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.109-80.92.amzn1.x86_64 SMP mod_unload modversions 
parm:           debug:Debug level (0=none,...,16=all) (int)
parm:           rx_queue_size:Rx queue size. The size should be a power of 2. Max value is 8K
 (int)

Amazon Linux のケースでは、ena モジュールはインストールされてるとのことなのでOK
次はインスタンスに拡張ネットワーキングの enaSupport 属性が設定されているかどうかの確認

ここでAWS CLIを使います。
AWS CLIはローカルマシンから実行してます。

aws ec2 describe-instances --instance-ids i-xxxxxxxxxxxxxx --query "Reservations[].Instances[].EnaSupport"
[]

帰ってきたのは[]なので、対応されてないっぽいですね。
次はネットワークインターフェースドライバーのチェック、ethtool -i eth0コマンドを実行

[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

この結果のdriver: のところが、vifになってます。
今使われているドライバーは vif であるため、enaモジュールはロードされていません。

有効化

コマンドは簡単ですw
このコマンドで大量のインストールが走ります。
貼り付けきれないので、コマンドのみでw

[ec2-user ~]$ sudo yum update

インストール作業が終わったらインスタンスを停止します。

aws ec2 stop-instances --instance-ids i-0775a80d75fb946a9 --profile cloud_ext

インスタンスが停止したら、AWS CLIで拡張ネットワーキングの属性を有効化します。
こちらもローカルマシンから実行してます。

aws ec2 modify-instance-attribute --instance-id i-xxxxxxxxxxxxxx --ena-support

実行後にインスタンスを起動して、SSHでインスタンスに入ります。
enaSupport 属性が設定されているかどうかの確認

aws ec2 describe-instances --instance-ids i-xxxxxxxxxxxxxx --query "Reservations[].Instances[].EnaSupport"
[
    true
]

ちゃんと有効になってる。
じゃぁ、ネットワークインターフェースドライバーのチェック

[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

あれ、かわってない・・・

別のエラーが出る

公式のやり方はここまでしか書いてないのと、これで出来ることになってる。
とりあえず今のままインスタンスタイプ変えて起動してみる。

別のエラー来たww

Your requested instance type (t3a.micro) is not supported in your requested Availability Zone (ap-northeast-1c). Please retry your request by not specifying an Availability Zone or choosing ap-northeast-1a, ap-northeast-1d.
(リクエストされたインスタンスタイプ(t3a.micro)は、リクエストされたアベイラビリティーゾーン(ap-northeast-1c)ではサポートされていません。アベイラビリティーゾーンを指定しないか、ap-northeast-1a、ap-northeast-1dを選択して、リクエストを再試行してください。)

どうやらインスタンスタイプとかインスタンスの中の問題ではなさそう。
対象のAZ(ap-northeast-1c)でt3a.microは使えんよってことらしい。

しらべてたら出てきたw

ということで、T3aは一旦諦めてT3で起動。

ぉ、うまくいった!!

切り替わったインスタンスにSSHログインして、ネットワークインターフェースドライバーのチェック

[ec2-user@ ~]$ ethtool -i eth0
driver: ena
version: 2.1.1g
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

こちらも無事に切り替わった!!

まとめ

今回はもともとENAの切り替えだけだと思ってたのですが、まさかの別の要因まででました・・・
T3aはまだまだ最近リリースされたんですね、まさかのたまたま使ってるap-northeast-1cが使えないとは・・・💦

まずは無事に切り替えできたので、今月の一番アクセス数が上がる日が今日なので今回はt3.smallで1日様子を見てみます。

技術ネタ
スポンサーリンク
Life Retrospective

コメント