AWS勉強備忘録9 - インスタンスタイプとストレージサービス

## インスタンスタイプとは？

AWSでは、**インスタンスタイプ**はマシンの用途を指します。インスタンスタイプによって、CPU、メモリ、ストレージ、ネットワーキングの性能が特化されており、用途に応じて最適なタイプを選択できます。

### 主なインスタンスタイプ

- **汎用 (General purpose)**: バランスの取れたCPUとメモリ。様々なワークロードに適しています。
- **コンピューティング最適化 (Compute optimized)**: 高性能コンピューティングやバッチ処理など、CPUが要求されるワークロードに最適です。
- **メモリ最適化 (Memory optimized)**: 大量のデータをメモリ内で処理するデータベースやメモリキャッシュに適しています。
- **ストレージ最適化 (Storage optimized)**: I/Oが非常に多いワークロードや、大量のデータセットを扱うアプリケーションに適しています。

## ストレージサービス

AWSでは主に、Amazon EBS (Elastic Block Store) と Amazon S3 (Simple Storage Service) の2つのストレージサービスが利用されます。

### Amazon EBS（Elastic Block Store）

**Amazon EBS**は、EC2インスタンスに接続される永続的なブロックストレージサービスで、物理的なHDDやSSDのように機能します。このサービスはオンライン上で提供され、物理的なデバイスの制約から解放された柔軟なストレージソリューションを提供します。主にEC2インスタンスのブートボリューム、データベースのデータファイル保存など、高速アクセスと低レイテンシが求められる用途に適しています。EBSの特徴は、サイズ変更やスナップショットの取得が容易であること、そして特定のEC2インスタンスに密接に結びついていることにより、グローバルなアクセスよりも特定のワークロードに対する高速アクセスに特化しています。

### Amazon S3（Simple Storage Service）

**Amazon S3**は、オブジェクトストレージサービスであり、任意の量のデータを格納し、世界中どこからでもアクセスできるように設計されています。データはオブジェクトとして保存され、一意の識別子によりアクセスされます。静的ファイルの配信、ウェブサイトのコンテンツ、バックアップ、ログファイルなど、大量のデータを格納し、グローバルに分散されたアクセスポイントを通じてどこからでもアクセス可能な用途に最適です。S3の主な利点は、そのスケーラビリティと、データへのグローバルアクセスが容易である点です。

### EBSとS3の違い

| 特徴 | Amazon EBS (Elastic Block Store) | Amazon S3 (Simple Storage Service) |
|---|---|---|
| **ストレージの種類** | ブロックストレージ | オブジェクトストレージ |
| **主な使用用途** | - EC2インスタンスのブートボリューム<br>- データベースのデータストレージ<br>- 高速な読み書きが必要なアプリケーション | - 静的ファイルの配信 (画像、動画、ウェブサイトのコンテンツなど)<br>- バックアップとアーカイブ<br>- 大量のデータを格納し、グローバルからのアクセス |
| **データアクセス** | 特定のEC2インスタンスに接続されている環境内でのみアクセス可能 | インターネット経由でどこからでもアクセス可能 |
| **適用シナリオ** | - システムやアプリケーションの起動ドライブ<br>- 高いI/Oパフォーマンスを要求する用途 | - 大規模なデータセットの保管<br>- コンテンツ配信ネットワーク (CDN) を通じたコンテンツの配信<br>- データレイクとしての利用 |

### オブジェクトストレージとブロックストレージの用途区別

オブジェクトストレージとブロックストレージの主な違いは、データの管理方法とアクセス方法にあります。

- **オブジェクトストレージ:**
データを一意の識別子とメタデータを持つオブジェクトとして保存します。この方法は、大量の非構造化データ（画像、動画、ログファイルなど）を格納し、インターネット経由でアクセスする用途に最適です。しかし、オブジェクトストレージは、データをブロックに分割して低レベルで細かく操作する能力に欠けているため、オペレーティングシステムやデータベースのように、ファイルシステムレベルでの高速アクセスや頻繁な書き込み・読み込みを必要とするアプリケーションには適していません。

- **ブロックストレージ:**
データを固定サイズのブロックとして扱います。これは、ディスクドライブに非常に似ており、オペレーティングシステムが直接管理できるため、EC2インスタンスのブートボリュームやデータベースなど、高速な読み書きが求められる用途に適しています。ブロックストレージは高速アクセスが可能ですが、接続された特定のEC2インスタンスからのみアクセスでき、S3のように直接インターネット経由でグローバルにアクセスすることはできません。

### EBSのデータベース用途とグローバルアクセス

EBSがデータベースに使われる理由は、データベースが要求する高速なディスクI/Oを提供できるからです。EBSボリュームは、特定のEC2インスタンスに密接に結びついており、そのインスタンスが動作している物理的な場所に近いデータセンターに物理的に存在します。これにより、低遅延で高速なアクセスを実現します。

ただし、EBS自体はグローバルにどこからでもアクセスできるわけではありません。EBSボリュームに保存されたデータへのアクセスは、接続されたEC2インスタンスを介してのみ可能です。しかし、データベースサーバーとして機能するEC2インスタンス自体には、インターネット経由で世界中からアクセスすることができます。

## 補足
### 1: 永続的なストレージとは？

データが電源がオフになっても保持されるストレージのことを指します。これに対して、一時的なストレージは電源を切るとデータが失われます。Amazon EBSやAmazon S3はどちらも、データを永続的に保存するためのサービスです。S3も永続的なストレージですが、ブートボリュームやデータベース用途には通常使用されません。これは、S3がオブジェクトストレージサービスであり、主にファイルやデータオブジェクトの保存に適しているためです。

### 2: ブートボリュームとは？

**ブートボリューム**は、オペレーティングシステム(OS)が格納され、コンピュータが起動(ブート)する際に読み込まれるディスクのことを指します。クラウド環境でのブートボリュームは、物理的なハードディスクの代わりに、仮想化されたディスク空間にOSをインストールして使用します。Amazon EBS (Elastic Block Store) は、この用途にしばしば利用されるAWSサービスです。

### 3: ローカル環境におけるEC2に類似する機能

Amazon EC2 (Elastic Compute Cloud) は、仮想コンピューティング環境を提供するサービスです。**ローカル環境のCPUとメモリに相当**します。

### 4: Herokuでのデプロイとストレージ使用

Herokuは、AWSのような低レベルのインフラ管理を抽象化したPaaS (Platform as a Service) です。Herokuにデプロイする際、アプリケーションコードとその依存関係のみを管理し、ストレージはHerokuのダイナオやアドオンを使用して抽象化された形で提供されます。そのため、EBSやS3と直接対話する必要はありませんが、ストレージ使用量に応じてコストは変動します。