【アップデート速報】「Instance Types」機能が追加され、EC2のインスタンスタイプの比較が楽にできるようになりました!

人肌もとい猫肌が恋しい今日この頃です。

▲ 猫ちゃんが寄ってくる季節になりましたね

寒いと布団の事しか考えられなくなるようです。こんにちは、AWS事業本部のShirotaです。
最近の寒さに、全てが布団の範囲で片付けば良いのになぁとぼやいてしまいます。
そんな不自由さを抱えた私とは対照的に、AWSはどんどん便利かつ新しいサービスや機能をアップデートしているようです。
今日は、そんなアップデートの一つを紹介させて頂こうと思います!

EC2のインスタンスタイプの比較に使える機能が追加されました

2019年11月22日、AWSは以下のアップデートを発表しました。

Amazon EC2 makes it easier for customers to discover and compare EC2 instance types

一般のAWSユーザーが利用できる全てのリージョンで、インスタンスタイプの比較に使える「Instance Types」機能が追加されました。
コンソール上で使える「Instance Types」と同時に、APIでも同様の機能が使える「describe-instance-types」と「describe-instance-type-offerings」が追加されています。

今までのEC2のインスタンス比較

この機能が追加されるまでは、AWS公式ページを見て比較したり、コンソールでEC2インスタンス作成画面を開き「インスタンスタイプの選択」で調べていたのではないでしょうか。

Amazon EC2 インスタンスタイプ

または、以下のような外部サイトを利用していた方も多いのではないかと思われます。

EC2Instances.info

こちらについては、弊社 濱田の以下ブログで分かりやすく解説しておりますので、そちらも参考にして下さい。

EC2インスタンスの比較検討が超効率的にできるサイト[EC2Instances.info]の紹介

実際、今回追加されたInstance Types機能の使い心地、 気になります
という訳で、早速触ってみてレビューしてみましょう。

早速使ってみた

まずは、コンソールに追加された「Instance Types」を試してみました。

コンソール編

Instance Typesを試すにあたり、現在決まっている要件を仮定して、該当するインスタンスタイプの比較をしてみようと思います。

例えば、

  • 東京リージョンにEC2インスタンスを立てたい
  • インスタンスファミリーは汎用のm5
  • デフォルトのコア数は4
  • メモリサイズは32MB

といった要件を仮定してみます。
EC2インスタンスを立てたいリージョンでInstance Typesを開き、仮定していた条件を入れてフィルタリングします。

▲ 最近実装されているUIだった

すると、条件に合致したインスタンスタイプがフィルタリングされて表示されました。
この中から、「m5.2xlarge」「m5a.2xlarge」「m5d.2xlarge」の3つを比較してみます。
比較したいインスタンスタイプのチェック欄をチェックして、下部に表示される「詳細」を見てみます。

▲ 一目で各スペックの比較ができる!

例えば、AWS公式ページで同様の要件に合致したインスタンスを調べようとすると、以下のようにタブでページが分かれている為並べての比較がしづらいです。

▲ m5のタブはm5の情報しか見られない

コンソールでEC2インスタンス作成画面を開き「インスタンスタイプの選択」で調べようとしても、各インスタンスタイプが点在していて比較しづらいです。

▲ 頑張る必要がある

こうして、今までのやり方と比較してみると 格段に見やすさが上がった事が分かるのではないでしょうか

ちなみに右上にあるボタンから、比較したインスタンスタイプの情報をCSVファイルとしてダウンロードする事もできます。

▲ クリックするだけ

▲ 比較した情報を渡すのも簡単

表示する内容のカスタマイズや、インスタンスタイプの数も右上にある歯車を押す事で変更する事ができます。

▲ 流石に50のインスタンスタイプを一気に比較するかは分からないが

コンソールで比較できる情報の一覧は以下のようになっています。
これらの要素でのフィルタリングが可能です。

  • インスタンスタイプ
  • インスタンスファミリー
  • インスタンスサイズ
  • アベイラビリティーゾーン
  • 無料利用枠の対象
  • ベアメタル
  • Hypervisor
  • vCPU のデフォルト数
  • サポートされているアーキテクチャ
  • デフォルトのコア数
  • 有効なコア
  • コアあたりのデフォルトのスレッド数
  • コアあたりのスレッド
  • 基本クロック速度 (GHz)
  • メモリサイズ (MiB 単位)
  • Storage (GB)
  • ローカルインスタンス ストレージ
  • ディスクタイプ
  • ディスク数
  • EBS 暗号化のサポート
  • EBS 最適化のサポート
  • ネットワークパフォーマンス
  • ENA 対応
  • ネットワークインターフェイスの最大数
  • インターフェイスあたりの IPv4 アドレス
  • インターフェイスあたりの IPv6 アドレス
  • IPv6 support
  • サポートされているプレイスメントグループ戦略
  • GPU
  • FPGA
  • 自動復旧のサポート
  • サポートされているルートデバイス
  • Dedicated Host のサポート
  • オンデマンド休止のサポート
  • バースト可能パフォーマンスのサポート
  • 現行世代
  • On-Demand Linux pricing
  • On-Demand Windows pricing

また、以下の要素に関しては最小/最大範囲を指定するフィルタリングも可能となっています。

  • vCPU のデフォルト数
  • デフォルトのコア数
  • コアあたりのデフォルトのスレッド数
  • 基本クロック速度 (GHz)
  • メモリサイズ (MiB 単位)
  • Storage (GB)
  • ローカルインスタンス ストレージ
  • ディスク数
  • ネットワークインターフェイスの最大数
  • インターフェイスあたりの IPv4 アドレス
  • インターフェイスあたりの IPv6 アドレス
  • GPU
  • FPGA
  • On-Demand Linux pricing
  • On-Demand Windows pricing

例えば、vCPU数が16以上欲しい場合はvCPUの最低値(Min)を「16」にして調べると、該当するインスタンスタイプが絞り込まれて表示されます。

▲ vCPU数が16以上のインスタンスタイプが表示された

昇順/降順でのソートができない点に関してはちょっと不便に感じました。

それでも、今までの比較方法に比べると格段に情報が得やすく、やりたい事がやりやすくなっています。

AWS CLI編

同時に提供が始まったAPIについては、AWS CLIで試してみました。

利用できるAWS CLIのバージョン

1.16.290以降で利用可能となっていました。
2019年11月24日時点での最新版が 1.16.290 なので、お手持ちのAWS CLIを最新版にアップグレードすれば使えるようになります。

describe-instance-types

AWS CLIのプロファイルに設定しているリージョンにおける、インスタンスタイプの情報を返してくれます。
特にフィルタリングしないと全てのインスタンスタイプの情報を返す為、出力の量がかなり多くなります。
出力が多く一度に表示できない場合には「NextToken」が末尾に出力されます。
その場合は、オプション「--next-token」で出力されたトークンを指定してあげると続きが出力されます。
実際に利用する場合は、フィルタリングオプションを使い、またJSON形式の出力なので整形して欲しい情報を絞り込んだりすると使いやすくなるかと思われます。JSON整形が捗りますね!

実際に、以下の条件でAWS CLIを実行してみました。

  • m5.large,m5.xlarge,m5.2xlargeの中でvCPUのデフォルトのコア数が4つのインスタンスタイプの情報を表示する

結果は、以下のようになりました。

  
$ aws ec2 describe-instance-types --instance-types m5.large m5.xlarge m5.2xlarge --filters Name=vcpu-info.default-cores,Values=4
{
    "InstanceTypes": [
        {
            "InstanceType": "m5.2xlarge",
            "CurrentGeneration": true,
            "FreeTierEligible": false,
            "SupportedUsageClasses": [
                "spot",
                "on-demand"
            ],
            "BareMetal": false,
            "Hypervisor": "nitro",
            "ProcessorInfo": {
                "SupportedArchitectures": [
                    "x86_64"
                ],
                "SustainedClockSpeedInGhz": 3.1
            },
            "VCpuInfo": {
                "DefaultVCpus": 8,
                "DefaultCores": 4,
                "DefaultThreadsPerCore": 2,
                "ValidCores": [
                    2,
                    4
                ],
                "ValidThreadsPerCore": [
                    1,
                    2
                ]
            },
            "MemoryInfo": {
                "SizeInMiB": 32768
            },
            "InstanceStorageSupported": false,
            "EbsInfo": {
                "EbsOptimizedSupport": "default",
                "EncryptionSupport": "supported"
            },
            "NetworkInfo": {
                "NetworkPerformance": "Up to 10 Gigabit",
                "MaximumNetworkInterfaces": 4,
                "Ipv4AddressesPerInterface": 15,
                "Ipv6AddressesPerInterface": 15,
                "Ipv6Supported": true,
                "EnaSupport": "required"
            },
            "PlacementGroupInfo": {
                "SupportedStrategies": [
                    "partition",
                    "spread",
                    "cluster"
                ]
            },
            "HibernationSupported": true,
            "BurstablePerformanceSupported": false,
            "DedicatedHostsSupported": true,
            "AutoRecoverySupported": true
        }
    ]
}

JSON形式で出力された値や、オプションに関しては以下の公式ガイドを参照して下さい。

describe-instance-types

describe-instance-type-offerings

インスタンスタイプがリージョン内のどのアベイラリティゾーン(AZ)、AZ-IDで利用可能かという情報を返してくれます。

例として、以下について調べてみました。

  • ap-northeast-1dで利用可能なインスタンスタイプの情報を表示する
  
$ aws ec2 describe-instance-type-offerings --location-type availability-zone --filter Name=location,Values=ap-northeast-1d
{
    "InstanceTypeOfferings": [
        {
            "InstanceType": "t3a.xlarge",
            "LocationType": "availability-zone",
            "Location": "ap-northeast-1d"
        },
        {
            "InstanceType": "c4.4xlarge",
            "LocationType": "availability-zone",
            "Location": "ap-northeast-1d"
        },
        {
            "InstanceType": "m5.16xlarge",
            "LocationType": "availability-zone",
            "Location": "ap-northeast-1d"
        },
        {
            "InstanceType": "r4.2xlarge",
            "LocationType": "availability-zone",
            "Location": "ap-northeast-1d"
        },
        {
            "InstanceType": "r5n.12xlarge",
            "LocationType": "availability-zone",
            "Location": "ap-northeast-1d"
        },
以下略  

また、実際にJSONを加工してインスタンスタイプ名のみを表示するようにしてみました。

  
$ aws ec2 describe-instance-type-offerings --location-type availability-zone --filter Name=location,Values=ap-northeast-1d | jq -r '.InstanceTypeOfferings[].InstanceType'
d2.8xlarge
t2.small
d2.xlarge
z1d.large
m5d.large
m5.2xlarge
r5d.xlarge
m5d.2xlarge
c5.9xlarge
r5a.xlarge
z1d.xlarge
x1.16xlarge
r5dn.16xlarge
c5n.4xlarge
c4.2xlarge
以下略  

コマンドを実行すると分かるのですが、インスタンスタイプの取得順は特に固定されていないようです。
使いたいインスタンスタイプによっては提供されているAZが限られている事もある為、このように一撃でそれが調べられるのは嬉しいです。

JSON形式で出力された値や、オプションに関しては以下の公式ガイドを参照して下さい。

describe-instance-type-offerings

痒いところに手が届くようになるアップデートに今後も期待!

今回のアップデートは、 痒いところに手が届くようになるアップデート だったのではないでしょうか。
個人的には、 コンソールでの複数インスタンスタイプの比較 がまさにそれで、来てくれてありがたいなぁと感じました。
re:Invent前ですがこのようなアップデートがまだまだ来ると予想されますので、アンテナを張ってお得な情報を取りこぼさないようにしていきたいですね。