NITRO世代(C5、M5)へのEC2インスタンスタイプ変更を試してみた(Amazon Linux編) #reinvent

アイキャッチ AWS EC2

西澤です。

re:Invent 2017で新しいアーキテクチャーが発表されたC5、M5等のNITRO世代EC2インスタンスでは、新しいHypervisorが採用され、仮想化のオーバーヘッドをより小さくすることに成功しているそうです。

当然積極的に利用したくなるわけですが、アーキテクチャーに変更がある関係で、少し注意して利用する必要があるようなので、それを確認しつつ、Amazon Linuxで試してみることにしました。

NITRO世代利用時の前提条件

C5、M5インスタンスを利用する場合には、"ENAおよびNVMe用のドライバを含むHVM AMIが必要"であることに注意しましょう。

NVMeドライバ

NVMeドライバについては、kernel 3.19以降で組み込まれているようです。Amazon Linuxでは、比較的新しいKernelが採用されているので、新しい世代であれば問題はなさそうです。

遡って確認してみたところ、Amazon Linuxでは、2015.09のバージョンから、kernel 4.1.17が採用されており、それ以降のイメージを利用していれば問題は無さそうです。

2015.09よりも前のイメージのAmazon Linuxをご利用の場合、kernelのアップデートが必要となります。

ENA有効化

ENA有効化についての確認、変更手順については、下記の公式ドキュメントに詳しく記載されています。

まず、そもそもAMIまたはEC2の設定としてのEnaSuppportが有効となっているかどうかについて注意が必要です。下記の結果をご確認いただくとわかりますが、EnaSupportが有効となったのは、2016.09のイメージからですので、それ以前のAMIから起動したAmazon Linuxはこれが無効となっています。

### amzn-ami-hvm-2016.09.0.20160923-x86_64-gp2
$ AMIID=ami-b04e92d0
$ aws ec2 describe-images --image-id $AMIID --query 'Images[].EnaSupport'
[
    true
]
### amzn-ami-hvm-2016.03.3.x86_64-gp2
$ AMIID=ami-f303fb93
$ aws ec2 describe-images --image-id $AMIID --query 'Images[].EnaSupport'
[]

2016.03のAMIからM5を利用する

EnaSupportが有効となっていないAMIからM5を利用することはできないのでしょうか?まずは、AWS Management Consoleから起動を試してみます。

そもそもM5を選択することができませんでした。

それでは、一旦他のインスタンスタイプで起動してから変更ならできるかな?と試してみました。確かにインスタンスタイプの変更まではできるのですが、いざ、M5に変更済のインスタンスを起動しようとすると、、、

やはり起動ができませんでした。

そこで、EnaSupportの設定を今回はAWS CLIから変更してみました。設定をする際には、EC2インスタンスが停止している必要があります。

$ IID=i-0123456789012345678

### 事前確認
$ aws ec2 describe-instances \
  --instance-ids $IID \
  --query 'Reservations[].Instances[].EnaSupport'
[]

### 変更
$ aws ec2 modify-instance-attribute \
  --instance-id $IID \
  --ena-support
(空)

### 事後確認
$ aws ec2 describe-instances \
  --instance-ids $IID \
  --query 'Reservations[].Instances[].EnaSupport'
[
    true
]

この設定だけ行えば、無事に2016.03でM5インスタンスを利用することができました。

ちなみに、ENAドライバのバージョンについては、以下となっていました。

$ modinfo ena
filename:       /lib/modules/4.4.11-23.53.amzn1.x86_64/kernel/drivers/amazon/net/ena/ena.ko
version:        0.6.6
license:        GPL
description:    Elastic Network Adapter (ENA)
author:         Amazon.com, Inc. or its affiliates
srcversion:     3141E47566402C79D6B8284
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.4.11-23.53.amzn1.x86_64 SMP mod_unload modversions
parm:           debug:Debug level (0=none,...,16=all) (int)
parm:           push_mode:Descriptor / header push mode (0=automatic,1=disable,3=enable)
			  0 - Automatically choose according to device capability (default)
			  1 - Don't push anything to device memory
			  3 - Push descriptors and header buffer to device memory (int)
parm:           enable_wd:Enable keepalive watchdog (0=disable,1=enable,default=1) (int)
parm:           enable_missing_tx_detection:Enable missing Tx completions. (default=1) (int)
parm:           numa_node_override_array:Numa node override map
 (array of int)
parm:           numa_node_override:Enable/Disable numa node override (0=disable)
 (int)

前述のところでご紹介しました公式ドキュメント内には、0.6.6が最小推奨バージョンとの記載がありましたので、ギリギリ要件を満たしているようでした。2016.03よりもさらに古いインスタンスをご利用の場合には、ENAドライバのバージョンもご確認をいただき、バージョンアップ対応をしておいた方が望ましいと思います。ENAドライバのバージョンアップについては、下記記事を参考にしていただければと思います。

【機能拡張】Amazon EC2で最大25Gbpsのネットワーク帯域幅が使えるようになりました

まとめ

Amazon Linuxで、NITRO世代(C5、M5)のインスタンスを利用するときは、以下を確認しましょう。

  • 2015.09以降であれば、NVMeドライバはOK、それより前ならkernelアップデート
  • 2016.09以降であれば、ENA有効なのでOK、それより前ならENA有効化と必要に応じてENAドライバのバージョンアップが必要

他のOSのパターンも検証してみようと思います。

どこかの誰かのお役に立てば嬉しいです。