[AWS][EC2] ENA対応必須のインスタンスタイプ(C5,M5,T3...)への変更

ちょっと前から、弊社で提供している [AMIMOTO AMI](https://amimoto-ami.com) でも、新しいインスタンスタイプ C5, M5, T3 シリーズに対応してました。
新規でインスタンスをローンチする際は、それらの新しいインスタンスタイプを選択することが可能ですが、現在稼働中のインスタンスを変更するには、若干の注意が必要です。
これらのインスタンスタイプでは、新しいタイプのネットワークアダプターENAへの対応が必要となるためです。
[Linux インスタンスにおける Elastic Network Adapter (ENA) を使用した拡張ネットワーキングの有効化](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/enhanced-networking-ena.html)

また、これらのインスタンスタイプへの変更は HVM のインスタンスでしかできません。
PVM版の AMIMOTO AMI をご利用いただいているお客様は、新しくインスタンスを起動してデータマイグレーションを実施していただくようお願いいたします。

以下の作業内容については [T3インスタンスに移行して、料金を10%OFFしてみました。](https://qiita.com/HiranoFumio/items/74b2ee53484295382a98) を参考にしてます。
Thx! @HiranoFumio

## ENA対応の確認方法
まず、インスタンスがENAに対応しているかを調べます。
インスタンスにSSH接続して、以下のコマンドを実行してください。

```
modinfo ena
```

実行した際に以下のようなメッセージが表示された場合は、すでに対応済みとなっていますので次項のOSアップデート作業は必要ありません。

```
$ modinfo ena
filename:       /lib/modules/4.14.33-51.37.amzn1.x86_64/kernel/drivers/amazon/net/ena/ena.ko
version:        1.5.0g
license:        GPL
description:    Elastic Network Adapter (ENA)
author:         Amazon.com, Inc. or its affiliates
srcversion:     692C7C68B8A9001CB3F31D0
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.33-51.37.amzn1.x86_64 SMP mod_unload modversions 
parm:           debug:Debug level (0=none,...,16=all) (int)
```

以下のような ERROR メッセージが表示された場合は、次項のOSアップデート作業を実施してください。

```
$ modinfo ena
ERROR: modinfo: could not find module ena
```

## OSアップデート
前項で `modinfo ena` の結果が ERROR となった場合は、以下のコマンドでアップデートを実施してください。
作業前にスナップショットを作成しておいて、作業が失敗したときに元の状態に戻せるようにしておいた方が良いでしょう。
スナップショットの作成方法については、以下のFAQを参考にしてください。
[スナップショットの作成と、スナップショットからのリストア](https://support.amimoto-ami.com/%E6%97%A5%E6%9C%AC%E8%AA%9E/%E3%82%BB%E3%83%AB%E3%83%95%E3%83%9B%E3%82%B9%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E3%81%94%E8%B3%AA%E5%95%8F/%E3%82%B9%E3%83%8A%E3%83%83%E3%83%97%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%A8%E3%82%B9%E3%83%8A%E3%83%83%E3%83%97%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%E3%81%8B%E3%82%89%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%82%A2)

```
sudo yum update
```

その後、サーバを再起動してSSHログインを実施し `modinfo ena` コマンドを実行して、ENA対応が完了していることを確認してください。

## ENA有効化とインスタンスタイプの変更
OSがENA対応していることが確認できたら、インスタンスのENAサポートオプションを有効にします。
この作業は AWS のダッシュボードから実施することはできませんので、AWS CLI (Command Line Interface) を使用して実施します。
これ以降の作業は、インスタンスにSSHして行うのではなく、自分のPCのターミナルで AWS CLI で実行します。AWS CLI のインストール方法については、以下のURLを参考にしてください。
[AWS Command Line Interface のインストール](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/installing.html)

まず、対象となるインスタンスのインスタンスIDを調べます。
これは、AWSのダッシュボード等でご確認ください。
以下の AWS CLI のコマンド例ではインスタンスIDが `i-xxxxxxxx` として記載しておりますので、適宜読み替えてください。

ENAサポートを有効にする前に一度インスタンスを停止します。
AWS CLI で実施する場合は、以下のコマンドを実行します。
( `--region` などのパラメータは省いております、必要な方は追加してください）

```
aws ec2 stop-instances --instance-ids i-xxxxxxxx
```

次にインスタンスのENAサポートを有効にします。

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

ENAサポートを有効にしたら、インスタンスタイプを変更します。
( `--instance-type t3.micro` の部分は変更したいインスタンスタイプに合わせて適宜変更してください。

```
aws ec2 modify-instance-attribute --instance-id i-xxxxxxxx \
    --instance-type t3.micro
```

T2 から T3 に変更する場合、T2では対応していなかった「EBS最適化」オプションが、T3では設定可能となります。
EBS最適化オプションを有効にするには、以下のコマンドを実行します。

```
aws ec2 modify-instance-attribute --instance-id i-xxxxxxxx --ebs-optimized
```

EBS最適化については、以下のURLを参考にしてください。
[Amazon EBS 最適化インスタンス](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/EBSOptimized.html)

最後にインスタンスを起動すれば作業は完了となります。

```
aws ec2 start-instances --instance-ids i-xxxxxxxx
```