t2インスタンスからt3インスタンスへ移行した話

t2インスタンスで起動している既存サーバをt3インスタンスに変更した際の手順を書きたいと思います。

<!-- more -->

### オンデマンド料金で東京リージョンでの性能と料金

| 現行世代 | vCPU | メモリ | 料金 |
|:-----------:|:------------:|:------------:|:------------:|
| t3.nano | 2 | 0.5 GiB | 0.0068USD/時間 |
| t3.micro | 2 | 1 GiB | 0.0136USD/時間 |
| t3.small | 2 | 2 GiB | 0.0272USD/時間 |
| t3.medium | 2 | 4 GiB | 0.0544USD/時間 |
| t3.large | 2 | 8 GiB | 0.1088USD/時間 |
| t3.xlarge | 4 | 16 GiB | 0.2176USD/時間 |
| t3.2xlarge | 8 | 32 GiB | 0.4352USD/時間 |
| t2.nano | 1 | 0.5 GiB | 0.0076USD/時間 |
| t2.micro | 1 | 1 GiB | 0.0152USD/時間 |
| t2.small | 1 | 2 GiB | 0.0304USD/時間 |
| t2.medium | 4 | 1 GiB | 0.0608USD/時間 |
| t2.large | 2 | 8 GiB | 0.1216USD/時間 |
| t2.xlarge | 4 | 16 GiB | 0.2432USD/時間 |
| t2.2xlarge | 8 | 32 GiB | 0.4864USD/時間 |


- そもそもt2とは？t3とは？ <b>バースト</b>、<b>ベースラインパフォーマンス</b>という概念があるんですが、[[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/burstable-performance-instances.html)]がわかりやすいです。
その中でも運用で注意しないとEC2インスタンス料金がスパイクする恐れのある概念が「[Unlimited](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/t2-unlimited.html)」です。

### 拡張ネットワーキング有効化手順
- AmazonEC2インスタンスで使用できる仮想ネットワークアダプターは 3 種類あり、T3系のインスタンスを使用するにはvifをENAに変更する必要があります。

| アダプター |利用可能なインスタンスタイプ | カーネルモジュール | Windows ドライバー | パフォーマンス  |
|:-----------:|:------------:|:------------:|:------------:|:------------:|
|vif|すべて|Xen-netfront|Citrix または AWS PV|低〜中|
|Intel 82599 VF|C3、C4、D2、I2、R3、および M4 (m4.16xlarge は除く)|ixgbevf|Intel 82599 VF|最大 10 Gbps|
|Elastic Network Adapter|P2、R4、X1、および m4.16xlarge|ena|ena|最大 20 Gbps|


拡張ネットワーキングが有効化されているか確認するには下記をチェックする

①enaモジュール がインスタンスにインストールされている

②enaSupport 属性が設定されている

- 以下はenaモジュールがインストールされていない状態
```sh
$ modinfo ena
modinfo: ERROR: Module ena not found.
```
- osをupdateし、enaモジュールがインストールされたことを確認する
```sh
$ sudo yum -y update --skip-broken && sudo shutdown -r now
```

```sh
$ modinfo ena
filename:       /lib/modules/4.14.77-70.59.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.77-70.59.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)
```

- インスタンスを停止した後、enaSupport属性を有効化する

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

- enaSupport属性がを有効化設定されているか確認

```sh
$ aws ec2 describe-instances --instance-ids i-xxxxxxxx | jq '.Reservations[].Instances[].EnaSupport'
true
```

- インスタンスタイプをT3系に変更しサーバを起動させる

- ネットワークインターフェイスで使用されているモジュールがENAであることが確認できる

```sh
$ ethtool -i eth0
driver: ena
version: 2.0.2g
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
```