こんにちは、技術3課、大阪勤務の全(ちょん)です。
令和と共にサーバーワークスに入社して、日々、AWSの勉強中であります。
EC2インスタンスのインスタンスタイプ変更の落とし穴について、自分の備忘録含め、共有したいと思います。
はじめに
AWSでは用途や状況に合わせて、インスタンスタイプを変更することでサーバースペックを自在に(かつ簡単に)変更できる柔軟性が魅力的だと感じています。
変更方法については弊社、杉村がわかりやすく投稿しているので、ご紹介させていただきます。
http://blog.serverworks.co.jp/tech/2017/04/19/instance-type-difference/
しかし、以前から可動しているインスタンスのタイプ変更について、特に非Nitro世代インタンスからNitro世代インスタンスは一旦、ストップです。
Nitro世代インスタンスは以下の通りとなります。
・A1、C5、C5d、C5n、I3en、M5、M5a、M5ad、M5d、p3dn.24xlarge、R5、R5a、R5ad、R5d、T3、T3a、および z1d
・ベアメタル: i3.metal, m5.metal, m5d.metal, r5.metal, r5d.metal, u-6tb1.metal, u-9tb1.metal, u-12tb1.metal, and z1d.metal
Nitro世代の詳細はこちらのリンクをお読みください。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances
じゃあどうすれば?の答えは
「NVMeドライバーのインストール」
「インスタンスにおける Elastic Network Adapter(以下、ENA)を使用した拡張ネットワーキングの有効化」
するのです。(Amazon Linuxの場合)
実際に変更してみた
今回、Amazon Linux プラットフォーム(t2.micro)のインスタンスタイプを変更してみました。
インスタンスを停止
インスタンスタイプをt3.microへ
インスタンスを起動
あれ?できる、、、
こちら、企画倒れを演じてみましたが最近のAMIはデフォルトでENAが有効になっているため、エラーになりません。
なので、これから新規インスタンスを構築する場合は特に意識する必要はありません。
このまま企画倒れするわけにもいかないので、すこし(数年)前のAMIから作成したインスタンスのタイプ変更すると、以下の「インスタンス開始のエラー」が表示されます。
NVMeドライバー
下記、公式ドキュメントを参考としています。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/nvme-ebs-volumes.html
https://aws.amazon.com/jp/premiumsupport/knowledge-center/boot-error-linux-m5-c5/
以下、ドキュメントに記載があったc5_m5_checks_scriptの実行結果となります。
実行結果を見ると、変更対象のインスタンスについては既にNVMeドライバーがインストールされているため、作業の必要がありませんでしたが、必要に応じて、NVMeドライバーのインストール作業を実施してください。
ENAの有効化
下記、公式ドキュメントを参考としています。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/enhanced-networking-ena.html
対象インスタンスにログインして、ena モジュールがインストールされているか確認します。
modinfo ena
コマンドの結果、インストールされていないことが確認できます。
yum update で ena モジュール含めアップデートを実施します。
※既に本番環境等で稼働しているインスタンスの場合、事前にテスト環境で実施する等、影響範囲を確認してから本番環境を更新してください。
sudo yum update
アップデート後、ena モジュールがインストールされているはずなので、もう一度、確認します。
modinfo ena
無事、インストールが完了しました。変更がない場合はインスタンスを再起動することで表示が変わるはずです。
続いて、aws cli でインスタンスに拡張ネットワーキングの enaSupport 属性が設定されているか確認します。
aws ec2 describe-instances --instance-ids instance_id --query "Reservations[].Instances[].EnaSupport
※instance_id を対象インスタンスidに書き換えて実行してください。
コマンド結果、まだ ena モジュールは有効ではありません。
対象インスタンスを停止し、aws cli で拡張ネットワーキングの属性を有効化します。
※インスタンスを停止しないと、コマンドがエラーとなります。
aws ec2 modify-instance-attribute --instance-id instance_id --ena-support
※instance_id を対象インスタンスidに書き換えて実行してください。
有効化されているはずなので、もう一度、確認します。
aws ec2 describe-instances --instance-ids instance_id --query "Reservations[].Instances[].EnaSupport"
コマンドの結果で ture と返ってくれば ena モジュールは有効となっています。
再度、インスタンスタイプを変更してみます。
インスタンスタイプをt3.microへ
インスタンスを起動
無事、t3 へインスタンスタイプを変更できました。
まとめ
今回はAmazon Linux 環境で非Nitro世代からNitro世代インスタンスへ変更しました。
本番環境では十分な検証を行い、臨んでください。
また、別プラットフォームについてはいずれチャレンジして、ブログ記事として作成したいです。