[AWS] t2.microのUbuntuインスタンスをt3.microに移行してみた(ENA有効化が必要だった)

2018.08.21 に [T3インスタンスがリリースされました](https://aws.amazon.com/jp/blogs/aws/new-t3-instances-burstable-cost-effective-performance/) 。

T2インスタンスよりも費用対効果が高い [^1] とのことで、早速 t2.microの Ubuntuインスタンスを t3.microに移行してみたので手順をまとめておきます。

# 設定変更してみる

まず、普通にコンソールからインスタンスタイプを変更してみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/172826/82ae215b-bb82-392c-fe35-b28326751a90.png)

エラーになってしまいました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/172826/fb94aa43-53b3-fe5d-6e53-0a75c8f1a3a3.png)

> Enhanced networking with the Elastic Network Adapter (ENA) is required for the 't3.micro' instance type. Ensure that your instance 'i-xxxxxxxx' is enabled for ENA.

# 対応手順

エラーメッセージの通りですが、T3シリーズでは Elastic Network Adapter(ENA)が有効になっている必要があるとのこと。手順は [こちら](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/enhanced-networking-ena.html#test-enhanced-networking-ena)にあったので、実行してみます。

まず現在の設定確認(Ubuntuでは場合によってモジュールのインストール)が必要なようなので、いったん t2.microに戻して再起動します．．．

拡張ネットワーキングが有効化されているかどうかのテストを実行(modinfo コマンドを使用)

```shell_session
$ modinfo ena
filename:       /lib/modules/4.4.0-133-generic/kernel/drivers/net/ethernet/amazon/ena/ena.ko
version:        1.2.0k
license:        GPL
description:    Elastic Network Adapter (ENA)
author:         Amazon.com, Inc. or its affiliates
srcversion:     7B924BDFCB1CD24561555AB
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
vermagic:       4.4.0-133-generic SMP mod_unload modversions retpoline
parm:           debug:Debug level (0=none,...,16=all) (int)
```

インストールされていない場合はエラーが返ってくるとのことなので、インストールされています。

インスタンス属性 (enaSupport)の確認

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

結果が空なので無効になっています。

ネットワークインターフェイスドライバーの確認

```
$ ethtool -i eth0
driver: vif
version:
firmware-version:
expansion-rom-version:
bus-info: vif-0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
```

リストされているドライバは vif であるため、ena モジュールはロードされていません。

<font color="blue"><b>インスタンスを停止</b></font>して、設定を変更します。

```
$ aws ec2 modify-instance-attribute --instance-id i-xxxxxxxx --ena-support
```

結果が何も返ってこなければ正常終了です。

設定変更されたことの確認

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

有効になりました。

<font color="blue"><b>再度インスタンスを起動</b></font>して、ネットワークインターフェイスドライバーの確認

```
$ ethtool -i eth0
driver: vif
version:
firmware-version:
expansion-rom-version:
bus-info: vif-0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
```

手順では driver: ena になるように読めますが変わっていません・・・

他に設定個所は無いので、ひとまずインスタンスタイプをT3に変更して起動してみると、無事起動できました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/172826/77660215-87fe-6625-8789-eee0103d9f24.png)

T3への変更後にネットワークインターフェイスドライバーの確認をすると、

```
$ ethtool -i eth0
driver: ena
version: 1.2.0k
firmware-version:
expansion-rom-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
```

driver: ena になったことが確認できました。アプリケーションも問題なく動作しています。

# 参考資料
- [Linux インスタンスにおける Elastic Network Adapter (ENA) を使用した拡張ネットワーキングの有効化(日)](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/enhanced-networking-ena.html#test-enhanced-networking-ena)
- [Enabling Enhanced Networking with the Elastic Network Adapter (ENA) on Linux Instances(英)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking-ena.html)

[^1]: [無料利用枠の対象外のため](https://oreout.hatenablog.com/entry/aws/ec2/4) 、アカウントの利用状況によっては例外があるかも。