ブログ

進化する AWS | 新世代 EC2 インスタンスへのタイプ変更

Amazon Web Services (AWS) は日々新たなサービスをローンチし、また既存のサービスに対しても進化や改善を続けることでユーザーにより良い環境を提供し続けています。

その中で AWS のクラウドサービスが開始された初期のころから提供されている Amazon Elastic Compute Cloud (Amazon EC2) も例にもれず進化を繰り返しており、各インスタンスファミリーの新世代インスタンスや新たなインスタンスファミリーが毎年のようにリリースされています。

通常、世代が新しくなるとパフォーマンスが向上するため、旧世代から新世代インスタンスへの移行を検討することも少なくないのではないでしょうか。

本ブログでは、新世代 EC2 インスタンスへタイプ変更するときのポイントや、新しいインスタンスファミリーの互換性について説明させていただきます。

進化する AWS | Amazon EC2 とは

Amazon Elastic Compute Cloud (Amazon EC2) は、多種類のプロセッサ、ストレージ、オペレーティングシステムを選択でき、様々なお客様のニーズに対応できるよう、多種多様なインスタンスを提供しています。

プロセッサは、Intel、AMD、Arm をはじめ、Apple (M1) が提供されています。ストレージは従来からのハードディスクドライブ(HDD)だけでなく、SSD も選択が可能で、それぞれにハイパフォーマンスタイプも用意され、目的に応じて選択することができます。オペレーティングシステムは、AWS が提供しサポートする Amazon Linux を始め、各種 Linux や Windows、更に macOS から選択が可能です。ネットワークは 400G bps のイーサネットを備え、ストレージ用に専用のネットワークを利用するため、コンピューター内部の通信負荷が、外部ネットワークに影響しません。

これらの組み合わせにより、ユースケースにマッチするコストパフォーマンスの高いコンピューティング環境を提供できるのが、Amazon EC2 です。

進化する AWS | EC2 インスタンスタイプ(種類)について

ここで、インスタンスタイプの見方について改めておさらいしておきましょう。
インスタンスタイプは、基本的に以下のフォーマットで表記されます。

  • 最初の英文字(列): インスタンスファミリー
  • 次の数字: 世代
  • 数字に続く英文字列: CPU ベンダーやオプションなど
  • ドット以降: サイズ

進化する AWS | EC2 タイプ変更のポイント① - インスタンスタイプ間の互換性

タイプ変更(選択)には、世代に関係なく移行できないケースが存在します。

1つ目はアーキテクチャの違いです。

同じインスタンスファミリーでもアーキテクチャーが異なる場合は、タイプ変更できません。これは以下のようにプロセッサで判断できます。

  • AWS Gravitons 系 ← NG → Intel Xeon, AMD EPYC
  • Apple M1 ← NG → Mac Intel Core i7

2つ目は GPU の有無で、変更元がグラフィックプロセッサ(GPU)を標準装備するインスタンスタイプかつ、GPU を利用するアプリケーションがインストールされている場合です。

仮に GPU を装備していないタイプに変更して起動できたとしても、アプリケーションが動作しないか、おそらく実用に耐えられないパフォーマンスになると考えられます。ただし、GPU が標準でない場合でもグラフィックオプションが選択できる場合は利用できる可能性があります。

3つ目はオペレーティングシステム(OS)の問題です。

これはタイプ変更ではありませんが、Windows OS は現時点では Arm アーキテクチャーに対応する AMI (OS) を提供していないため、新規構築の際に d オプションの付いたインスタンスタイプ(AWS Graviton 系)を選択できません。

進化する AWS | EC2 タイプ変更のポイント② - 世代間の互換性

インスタンスファミリーの変更と比べ、比較的多いのが同じインスタンスファミリーでの世代更新です。一般的に世代の新しいインスタンスタイプは、旧世代と比較してパフォーマンスが向上しているため、コストを意識することなく性能の向上を図ることができます。

世代により単純にタイプ変更が可能な場合もありますが、ある世代間でネットワークインターフェースの仕様が変更されたため、アップデート作業が必要になる場合があります。

具体的には「Elastic Network Adapter (ENA) を使用した拡張ネットワーキング」に対応している場合に世代変更は可能ですが、対応してない場合は、拡張ネットワーキングの有効化が必要になります。

次の AMI には必要な ENA モジュールが含まれており、ENA のサポートが有効になっています(対象の AMI から新たに EC2 インスタンスを構築する場合)。

■ ENA のサポートが有効になっているインスタンス

Linux インスタンス

  • Amazon Linux 2
  • Amazon Linux AMI 2018.03
  • Ubuntu 14.04 (linux-awsカーネル) 以降
  • Red Hat Enterprise Linux 7.4 以降
  • SUSE Linux Enterprise Server 12 SP2 以降
  • CentOS 7.4.1708 以降
  • FreeBSD 11.1 以降
  • Debian GNU/Linux 9 以降

Windows インスタンス

Windows Server バージョンENA ドライバーバージョン
Windows Server 20222.4.0 以降
Windows Server 2019最新
Windows Server 2016最新
Windows Server 2012 R2最新
Windows Server 2012最新
Windows Server 2008 R22.2.3 以前

これらの ENA モジュールが含まれている AMI から構築された EC2 の場合は問題ありませんが、以前に構築された EC2 インスタンスの場合、ENA モジュールが含まれていない可能性があります。

拡張ネットワーキングがリリースされる前から存在するインスタンスタイプの場合、拡張ネットワーキングの有効化が必要になる場合があります。

以下に有効化が必要になる可能性がある、主なインスタンスタイプを記載いたします。

  • 汎用 M1〜4, T1, T2
  • コンピューティング最適化 C1〜4 
  • メモリ最適化 R1〜4

進化する AWS | EC2 タイプ変更のポイント③ - 拡張ネットワーキングの確認

新世代へのタイプ変更の際に必須となるのが、拡張ネットワーキングが有効であること、もしくは無効の場合でも有効化が可能であることです。

そのため、現在の拡張ネットワーキングの状態を確認する必要があります。

■ Linux インスタンスの場合

拡張ネットワーキングが既に有効になっているかどうかをテストするには、ena モジュール がインスタンスにインストールされていることと、enaSupport 属性が設定されていることを確認します。インスタンスがこれら 2 つの条件を満たしている場合は、ethtool -i ethn コマンドによって、ネットワークインターフェイスで使用されているモジュールが表示されます。

カーネルモジュール (ena)

enaモジュールのインストール状況の確認には、modinfoコマンドを使用します。

[ec2-user ~]$ modinfo ena
filename:       /lib/modules/4.14.33-59.37.amzn2.x86_64/kernel/drivers/amazon/net/ena/ena.ko
version:        1.5.0g
license:        GPL
description:    Elastic Network Adapter (ENA)
author:         Amazon.com, Inc. or its affiliates
srcversion:     692C7C68B8A9001CB3F31D0
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:
retpoline:      Y
intree:         Y
name:           ena
...

※この Amazon Linux  のケースでは ena モジュールはインストールされています

ubuntu:~$ modinfo ena
ERROR: modinfo: could not find module ena

※この Ubuntu インスタンスでは、モジュールはインストールされていないため、まずインストールする必要があります

■ Linux / Windows インスタンス共通

拡張ネットワーキングが既に有効になっているかどうかをテストするには、ドライバーがインスタンスにインストールされていることと、enaSupport 属性が設定されていることを確認します。

インスタンス属性 (enaSupport)

インスタンスに拡張ネットワーキングの enaSupport 属性が設定されているかどうかを確認するには、次のいずれかのコマンドを使用します。属性が設定されている場合、レスポンスは true です。

describe-instances (AWS CLI/AWS CloudShell) の場合
aws ec2 describe-instances --instance-ids instance_id --query "Reservations[].Instances[].EnaSupport"
Get-EC2InstanceTools for Windows PowerShell の場合
(Get-EC2Instance -InstanceId instance-id).Instances.EnaSupport

イメージ属性 (enaSupport)

AMI に拡張ネットワーキングの enaSupport 属性が設定されているかどうかを確認するには、次のいずれかのコマンドを使用します。属性が設定されている場合、レスポンスは true です。

describe-images (AWS CLI/AWS CloudShell) の場合
aws ec2 describe-images --image-id ami_id --query "Images[].EnaSupport"
Get-EC2Image (Tools for Windows PowerShell) の場合
(Get-EC2Image -ImageId ami_id).EnaSupport

■ Linux インスタンスの場合

ネットワークインターフェイスドライバー

次のコマンドを使用して、ena モジュールが特定のインターフェイスで使用されていることを確認し、確認するインターフェイス名に置き換えます。単一のインターフェイス (デフォルト) を使用している場合は、eth0 です。オペレーティングシステムで予測可能なネットワーク名がサポートされている場合は、ens5 のような名前にすることができます。

次の例で、リストされているドライバーは vif であるため、ena モジュールはロードされていません。

[ec2-user ~]$ ethtool -i eth0
driver: vif
version:
firmware-version:
bus-info: vif-0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no

この例では、ena モジュールがロードされており、最小推奨バージョンです。このインスタンスでは、拡張ネットワーキングが適切に設定されています。

[ec2-user ~]$ ethtool -i eth0
driver: ena
version: 1.5.0g
firmware-version:
expansion-rom-version:
bus-info: 0000:00:05.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no

進化する AWS | 新世代 EC2 インスタンスへのタイプ変更(まとめ)

旧世代の EC2 インスタンスをご利用中の場合、新世代のインスタンスタイプに変更するだけで、通常はコストパフォーマンスが向上します。ご利用中のインスタンスが新世代インスタンスタイプに対応している場合は、できるだけ早くタイプ変更していただくことを推奨いたします。

おおよその目安として、2017年頃までに構築された古い世代のインスタンスタイプでは、残念ながら多くの場合、タイプ変更のみでの対応は出来ません。しかし新世代のインスタンスタイプへの変更が不可能というわけではありませんので、旧世代から新世代への移行をご希望のお客様で、ご希望やご検討中のお客様は、ぜひ弊社までご相談くださいませ。


参考)AWS 公式ドキュメント

元記事発行日: 2022年09月29日、最終更新日: 2023年03月28日