はじめに
昔からAPIサーバーとして運用されているEC2インスタンスのインスタンスタイプを変更しようとしたところ、諸々のエラーが出てすんなり変更できなかったため、最終的な更新手順の備忘録です。
#TL;DR
・インスタンスのenaモジュールとカーネルバージョンを確認
・カーネルをアップデートしてenaをインストール
・AWSCLIからenaを有効化
現状の確認
※ 以降の手順でsshでEC2に接続、及び、AWSCLIを使用しますが、環境構築については割愛させていただきます。
最初にt2インスタンスを停止し、インスタンスタイプをt3に切り替えて起動を試みたところ、下記エラーで起動することができませんでした。
エラーについて調べると下記公式の適用手順が見つかったため、これにしたがって進めていきます。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/enhanced-networking-ena.html
1. EC2にsshで接続
2. enaモジュールがインストールされていることを確認
modinfo ena
modinfo: ERROR: Module ena not found.
古いAMIにはenaモジュールが含まれていないため、
enaを含む最新のカーネルとカーネルモジュールでインスタンスを更新
する必要があるようです。
3. カーネルのバージョン確認
uname -srv
Linux 3.14.35-28.38.amzn1.x86_64 #1 SMP Wed Mar 11 22:50:37 UTC 2015
インスタンスの更新
公式の手順に従ってパッケージを更新して確認します。
以前の Amazon Linux AMI を使用してインスタンスを起動し、まだ拡張ネットワーキングが有効になっていない場合、拡張ネットワーキングを有効にするには次の手順を実行します。
##1. パッケージの更新
sudo yum update -y
アップデートが完了したら一旦再起動して再度sshで接続します。
##2. 再起動して確認
ena
modinfo ena
modinfo: ERROR: Module ena not found.
カーネルのバージョン
uname -srv
Linux 3.14.35-28.38.amzn1.x86_64 #1 SMP Wed Mar 11 22:50:37 UTC 2015
なんと、変化がありません...
【CPUの脆弱性対応】古いAmazon Linuxのkernelを最新版にアップデートするによると、yum.conf
ファイルにreleasever
の変数を設定しないと、カーネルのバージョンが固定されてしまい更新できないそうです。
##3. yum.conf
の修正(追加)
sudo vi /etc/yum.conf
~
# of Amazon Linux AMI. If you prefer not to automatically move to
# new releases, comment out this line.
- #releasever=latest
+ releasever=latest
# This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
~
これで再度sudo yum update -y
で更新し、再起動して確認します。
##4. 再起動して確認
ena
modinfo ena
filename: /lib/modules/4.14.146-93.123.amzn1.x86_64/kernel/drivers/amazon/net/ena/ena.ko
version: 2.1.1g
license: GPL
description: Elastic Network Adapter (ENA)
~
カーネルのバージョン
uname -srv
Linux 4.14.146-93.123.amzn1.x86_64 #1 SMP Tue Sep 24 00:45:23 UTC 2019
無事カーネルのアップデートとenaのインストールが完了しました!
続いて、インスタンスのEnaSupportを有効化します。
以降の手順はAWSCLIでローカルPCから実行するため、インスタンスはシャットダウンしておきます。
##5. EnaSupport
の確認
aws ec2 describe-instances --instance-id i-XXXXXXXXXXXX --query 'Reservations[].Instances[].EnaSupport'
[]
無効の場合は空の配列が帰ってきます。
##6. EnaSupport
の有効化
aws ec2 modify-instance-attribute --instance-id i-XXXXXXXXXXXX --ena-support
実行しても反応がないため、有効化されたか確認します。
##7. EnaSupport
の確認
aws ec2 describe-instances --instance-id i-XXXXXXXXXXXX --query 'Reservations[].Instances[].EnaSupport'
[
true
]
有効の場合はtrue
が帰ってきます。
これでインスタンスの更新は完了です!
インスタンスタイプをt2からt3に変更して、無事起動できることを確認します。
まとめ
おそらくあまりにも古いAMIを使用していたため、公式の手順だけでは更新することができませんでした。
定期的にカーネルのバージョンを確認して、最新の状態に保つのが大切ですね。