[t2→t3]EC2インスタンスタイプ変更時の注意点と実際の変更手順

Blog-Thumbnail_Linux-01 Amazon

はじめに

こんにちは、KUDs です。

今回の記事では、AWS EC2 Linux のインスタンスタイプを変更について、注意点とその確認方法、および実際の変更手順について解説します。

本記事では実際にインスタンスタイプを t2.micro から t3.micro へ変更します。
t2.micro は AWS 無料利用枠の対象なので、利用開始から 12 ヶ月経過後に t3.micro への変更を考える人も多いのではないでしょうか。
このような方にも参考になるかと思います。是非是非ご参照ください。

EC2 ではインスタンスタイプ変更時にいくつかの注意点があります。
これらをクリアせずにインスタンスタイプを変更しないでください。
最悪、インスタンスが起動しなくなる場合があります
この記事では、絶対に確認すべき点と、とっても簡単な確認方法を解説します。

ちなみに、タイトルでは「t2 から t3」と記載しました。
しかし、厳密には「Xen から Nitro」にする時の注意点と言えます。
つまり、「m4 から m5」や「c4 から c5」への変更にも適用できるものです。

Nitro についての詳細は本記事では割愛します。
該当するインスタンスタイプ及び詳細は以下の公式ドキュメントをご参照ください。

AWS Nitro System 上に構築されたインスタンス - Amazon EC2
現行世代の EC2 インスタンスの基盤である AWS Nitro System について説明します。

前提

EC2 インスタンスタイプを変更するにあたり、メモリや CPU 、アーキテクチャの確認は必須です。
(というか、それらを変えたいからインスタンスタイプを変更するという認識です)

今回の記事では、これらスペックの確認は前提として実施済みであるものとして進めます。

まだインスタンスタイプのスペックを確認していない人は、要件整理してどのインスタンスタイプにするかを決めるところから始めてください。

注意すべきこと

Xen から Nitro に変更するとき、以下のような要因でインスタンスタイプが起動できなくなる可能性があります。

  • Elastic Network Adapter (ENA) の enaSupport 属性がインスタンスに対して無効になっている。
  • ENA モジュールがインスタンスにインストールされていない
  • NVMe モジュールがインスタンスにインストールされていない
    または NVMe モジュールがインストールされているのにインスタンスの initramfs イメージにロードされていない
  • 起動時にデバイス名を使用して「/etc/fstab」ファイルにファイルシステムをマウントしようとしている

公式の資料としては以下の re:Post 記事が参考になります。

Linux Nitro ベースの EC2 インスタンスでの起動エラーを解決する
Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスを Nitro ベースのインスタンスタイプに変更したところ、起動しなくなりました。

これらの要因に該当しないかを事前にチェックしておくことが必須です。

事前の確認項目を実際にチェックする

では実際に確認してみましょう。

ENA サポートの確認

以下の AWS CLI で簡単にチェックできます。

aws ec2 describe-instances --instance-id <インスタンス ID> --query "Reservations[].Instances[].EnaSupport"

以下は実際の出力例です。

[kuds@local-pc ~]
$ aws ec2 describe-instances --instance-id <インスタンス ID> --query "Reservations[].Instances[].EnaSupport"
[
    true
]

サポートされている場合は true が返されます。

NVMe, ENA モジュール、fstab の確認

以下の項目は、一括で確認可能です。

  • NVMe モジュールの確認
  • ENA モジュールの確認
  • fstab の確認

上記を一括で実施できるスクリプトは NitroInstanceChecks です。
以下 GitHub で公開されています。

aws-support-tools/EC2/NitroInstanceChecks/nitro_check_script.sh at master ?? awslabs/aws-support-tools
Tools and sample code provided by AWS Premium Support. - awslabs/aws-support-tools

上記のスクリプトを実行することで、一括で簡単にチェックできます。

具体的には、インスタンスに SSH 接続して以下の手順でスクリプトを実行しましょう。

curl -o nitro_check_script.sh https://raw.githubusercontent.com/awslabs/aws-support-tools/master/EC2/NitroInstanceChecks/nitro_check_script.sh
chmod +x nitro_check_script.sh
./nitro_check_script.sh

以下は実際の出力例です。

[root@wordpress /tmp]
# curl -o nitro_check_script.sh https://raw.githubusercontent.com/awslabs/aws-support-tools/master/EC2/NitroInstanceChecks/nitro_check_script.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  8128  100  8128    0     0  26112      0 --:--:-- --:--:-- --:--:-- 26135
[root@wordpress /tmp]
# ll nitro_check_script.sh
-rw-r--r-- 1 root root 8128 Jul  1 09:58 nitro_check_script.sh
[root@wordpress /tmp]
# chmod +x nitro_check_script.sh
[root@wordpress /tmp]
# ll nitro_check_script.sh
-rwxr-xr-x 1 root root 8128 Jul  1 09:58 nitro_check_script.sh
[root@wordpress /tmp]
# ./nitro_check_script.sh
------------------------------------------------

OK     NVMe Module is installed and available on your instance


OK     ENA Module with version 2.12.0g is installed and available on your instance


OK     fstab file looks fine and does not contain any device names.

------------------------------------------------

上記のように、 3 項目全て OK が出ていることを確認しましょう。

インスタンスタイプを実際に変更する

問題なければ、いよいよインスタンスタイプを変更しましょう。

今回は t2.micro から t3.micro に変更します。

インスタンスタイプの変更を行う際にはインスタンスを停止する必要があります。

CLI で実施する手順は以下です。

# インスタンスを停止
$ aws ec2 stop-instances --instance-ids <インスタンス ID>
{
    "StoppingInstances": [
        {
            "CurrentState": {
                "Code": 64,
                "Name": "stopping"
            },
            "InstanceId": "<インスタンス ID>",
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        }
    ]
}
# インスタンスタイプを変更
$ aws ec2 modify-instance-attribute \
>     --instance-type t3.micro \
>     --instance-id <インスタンス ID>
# インスタンスを開始
$ aws ec2 start-instances --instance-ids <インスタンス ID>
{
    "StartingInstances": [
        {
            "CurrentState": {
                "Code": 0,
                "Name": "pending"
            },
            "InstanceId": "<インスタンス ID>",
            "PreviousState": {
                "Code": 80,
                "Name": "stopped"
            }
        }
    ]
}

補足: IncorrectInstanceState Error

補足ですが、インスタンスが停止中 (stopping) の時にインスタンスタイプを変更しようとすると IncorrectInstanceState エラーが出るので注意です。

[kuds@local-pc ~]
$ aws ec2 modify-instance-attribute \
>     --instance-type t3.micro \
>     --instance-id <インスタンス ID> 

An error occurred (IncorrectInstanceState) when calling the ModifyInstanceAttribute operation: The instance '<インスタンス ID>' is not in the 'stopped' state.

メッセージの通り、 stopped ステータスである必要があります。
少し時間を空けてからインスタンスタイプを変更しましょう。

さいごに

今回、インスタンスタイプ変更前の確認項目と、実際の変更手順を確認しました。

確認項目を一括でチェックできる NitroInstanceChecks は非常に便利ですが、OS サポートは以下の通りです。

  • Red Hat の派生製品: Red Hat Linux、Red Hat Enterprise Linux、CentOS
  • Amazon Linux、Amazon Linux 2、および Amazon Linux 2023
  • Debian の派生製品: Debian、Ubuntu

今回紹介した方法以外に、AWS Systems Manager Automation runbook 「AWSSupport-MigrateXenToNitroLinux 」 を利用するという手もあります。

詳細については以下をご参照ください。

AWSSupport-MigrateXenToNitroLinux - AWS Systems Manager オートメーションランブックリファレンス
Amazon EC2 Linux Xen インスタンスをクローンして Nitro インスタンスタイプに移行します。

以上です。

コメント