はじめに
AWSでCentOS7で動いているEC2インスタンスをNitro世代(C5、M5、T3、…)に変更する際に
ハマったので、誰かの助けになればと思いメモっておきます。
通常の手順
Nitroシステムを使うにはENAを有効にする必要があり、AWSの公式リファレンスやググってみると
以下のような手順が出ます
- ixgbevfモジュールを入れる
- enaモジュールを入れる(kernelアップデート)
- インスタンス停止
- modify-instance-attributeでena-supportを有効にする
- インスタンスタイプ変更
- インスタンス起動
CentOS7の場合、上記だけで対応できない部分があったので、その解決方法を紹介します。
ハマりポイント
CentOS7からNIC名はensXのような名前となり、従来のethXではなくなっています。
ですが、AWS EC2インスタンスのNitro世代前のインスタンスタイプでは、デフォルトでeth0が
使われます。
これをNitro世代に変更するとensXという名称が使われるようになります。
(カーネル起動オプションなどで固定はできますが、クラウド上でそこいじりたくない、という前提)
そのままENA有効化して起動してもネットワークが繋がりません。
以下のその際にシスログに出力される内容です。MetaDataアクセスができていません。
Jun 25 10:47:02 sva0110 journal: [CLOUDINIT] url_helper.py[WARNING]: Calling 'http://169.254.169.254/2009-04-04/meta-data/instance-id' failed [87/120s]: unexpected error ['NoneType' object has no attribute 'status_code']
変更後の手順
- ixgbevfモジュールを入れる
- enaモジュールを入れる(kernelアップデート)
- cloud-initアップデート
- インスタンス停止
- modify-instance-attributeでena-supportを有効にする
- AMI作成
- AMIからNitro世代インスタンスタイプを指定して起動
解説
最新版のcloud-init(現時点:18.2-1)ではインスタンス初回起動時の処理でethXからensXへの
変更も行ってくれるようです!
なので、AMIを作ってAMIからインスタンス作成すればNitro世代でも起動できるようになります。
まとめ
書いている途中に カーネル起動オプションを修正している公式な手順が見つかりました!!
https://aws.amazon.com/jp/premiumsupport/knowledge-center/install-ena-driver-rhel-ec2/
ということで、意味のない記事になってしまいましたが、もしかしたらこっちの手順の方がよいという
人もいるかもしれないので、そのまま公開します。
最後に、こっちもハマりどころだと思うので紹介しておきます。
NITRO世代(T3など)へのEC2インスタンスタイプ変更ではfstabに注意