(AWS初心者) EC2インスタンスタイプが覚えられない


# はじめに
re:Invent 2020でインスタンスタイプが発表されていましたが、「D3en」という文字を見て、「えっと、Dってなんだっけ…？」となってしまった方（＝私）のための、初心者による初心者向け記事です。

何番煎じかわかりませんが、数ある良記事・資料と比べて、さらに一段階ハードルさげたつもりです。

# AWSインスタンスタイプの記法
インスタンスタイプの記法については説明を省略します。以下をご参照ください。

- AWS Black Belt Online Seminar Amazon EC2
https://www2.slideshare.net/AmazonWebServicesJapan/20190305-aws-black-belt-online-seminar-amazon-ec2/19

- AWS ドキュメント「インスタンスタイプ」
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/instance-types.html


# まずはこれだけ！インスタンスタイプの基礎4種類
上のBlack Belt資料を含む様々なウェブサイト等で、各インスタンスタイプについて詳細に、丁寧に説明にされているのですが、私が初めてAWSを学習した時は、種類が多くて、何をどう覚えてよいか混乱してしまいました。

というわけで、本当に初めてAWSを学習する方には、**まずはC, M, R, Tの4種類だけ覚える**ことをおすすめします。

インスタンスというのは、基本的にCPUリソースとメモリリソースの組み合わせで出来ているので、リソースの配分が**CPU寄りか、メモリ寄りか、あるいはその間（Middle）か**、で覚えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109270/93f1a026-9462-90ea-78bf-efdb9f269748.png)

この3つに次いで重要なのがTタイプです。この4つは必須です。
**TタイプはMと同じく汎用型のタイプですが、負荷に応じてCPUパフォーマンスがバーストする機能（Turbo機能）を持っています。**

ちなみにTタイプはこの機能に加え、C, M, Rには無い、nano, micro, smallといった非常に小さなリソース（特にメモリ）をもつサイズを持ち、とても安価に利用できるため、開発環境等でよく使われます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109270/1b333344-68ec-c4e4-20d3-2e86ef4f0397.png)


EC2には他にもいろいろなインスタンスタイプがありますが、**Managed Serviceで選択可能なインスタンスタイプ（ノードタイプ）は基本的にこの4種類**なので、やはりこの3つは最低限抑えておくのが良いと思います。

|サービス名|C|M|R|T|その他|
|:---|:---|:---|:---|:---|:---|
|Amazon Aurora|-|-|〇|〇|-|
|Amazon RDS|-|〇|〇|〇|-|
|Amazon ElastiCache|-|〇|〇|〇|-|
|Amazon Elasticsearch Service|-|〇|〇|〇|I|

# 残りは気合い
残りは気合で覚えるしかないのですが、大きく汎用プロセッサ系、ストレージ系、ネットワーク系、特殊用途系に分けられます。ざっくりどの種類に当てはまるかさえ把握できればニュースや記事を見たときに困らないレベルになるかなと思っています。

## インスタンスタイプ
インスタンスタイプについては、C,M,R,T以外は「なんだっけ？」となっても正直問題ないと思っています。Xがメモリ、H,D,Iがストレージとだけわかっているとちょっと楽かも。あとは都度調べるで良いのかなーと。
最近は3文字のものが増えてわかりやすくなりました。

|分類|AWSにおけるカテゴリ|タイプ|説明|覚え方|
|:---|:---|:---|:---|:---|
|汎用プロセッサ系|汎用|A|Arm Neoverseコアを搭載したAWS Gravitonプロセッサを使用（graviton2以降は「g」で表現）|**A**RM|
|メモリ系|メモリ最適化|X|大きなメモリを積んでいて、RAM 1GiB あたりの価格が最も低い|e **X** tra-Large Memory|
|ストレージ系|ストレージ最適化|H|HDDのローカルストレージを持つ|**H**DD|
|ストレージ系|ストレージ最適化|D|より高密度のHDDのローカルストレージ|**D**ense|
|ストレージ系|ストレージ最適化|I|ローカルNVMe SSDストレージを持つ（最近は「d」で表現）|high **I**/O performance|
|特殊用途系|高速コンピューティング*1|G|GPU搭載でグラフィック処理が得意|**G**PU|
|特殊用途系|高速コンピューティング*1|P|GPU搭載でMLやその他汎用用途で使用|GPUだけどグラフィック特化じゃないほう(G **P** U)|
|特殊用途系|高速コンピューティング*1|F|FPGA搭載|**F**PGA|
|特殊用途系|高速コンピューティング*1|Inf|Deep Learningに最適なInferentiaチップを搭載（Inf1, Inf2）|**Inf** erentia|
|特殊用途系|高速コンピューティング*1|Trn|Deep Learningに最適なTrainiumチップを搭載|**Tr** ai **n** ium|
|特殊用途系|高速コンピューティング*1|Hpc|HPCのワークロードに最適化|**HPC**|

*1 なんらかのハードウェアアクセラレーター使用

## 追加機能/補足情報
インスタンスタイプと世代の後ろについて、小文字で表される補足情報があります。こちらはインスタンスタイプと組み合わせで使われ、慣れてないとどれがどれかわからなくなりやすいです。i(intel),a(amd),g(graviton=arm)は覚えやすいのでこれらは覚えてしまうとして、あとは都度で良い気がしますが、よく目にするので優先的に覚えておくと良いのは、d,nあたりでしょうか。 

|分類|表記|説明|覚え方|例|
|:---|:---|:---|:---|:---|
|汎用プロセッサ系|i|Intel プロセッサを使用|**I**ntel|c6i,m6i,r6i|
|汎用プロセッサ系|a|AMD EPYC プロセッサを使用|**A**MD|c5a,m5a,t3a,r5a|
|汎用プロセッサ系|g|AWS Graviton（ARM プロセッサ）を搭載|**G**raviton|c6g,m6g,t4g,r6g|
|メモリ系|e|追加のメモリ・ストレージリソースを持つ|e **X** tra storage/memory|d3en, X1e|
|ストレージ系|b|EBS帯域幅の拡張などEBS最適化|E **B** S最適化|r5b|
|ストレージ系|d|ローカルNVMe SSDストレージを持つ|**D**irectly-Attached NVMe Storage|c5d,m5d,r5d|
|ネットワーク系|n|ネットワーク帯域幅の拡張等ネットワーク最適化|**N**etwork拡張|c5n,m5n,r5n|
|特殊用途系|z|周波数が高い|高いGH**z**|m5zn,r7iz|