AWS勉強備忘録5 - EC2（Elastic Compute Cloud）

## 1. AWS EC2の強み

- **柔軟性**: EC2は様々なインスタンスタイプを提供しており、CPU、メモリ、ストレージといったリソースのニーズに合わせて最適なものを選べます。
- **スケーラビリティ**: 需要に応じてリソースを即座にスケールアップ・ダウンできるため、トラフィックの変動に柔軟に対応できます。
- **コスト効率**: 従量課金制で、使用した分だけ料金を支払うため、余分なコストがかかりません。
- **セキュリティ**: Amazon VPC（Virtual Private Cloud）を利用して、インスタンスをプライベートネットワーク内に隔離し、セキュリティを強化できます。
- **グローバルアクセス**: 複数の地理的リージョンとアベイラビリティーゾーンを利用できるため、グローバルにわたって高可用性と低遅延を実現できます。

## 2. アンマネージドサービスについて

EC2はアンマネージドサービスです。アンマネージドサービスとは、基本的にはプロバイダーから提供されるリソースやサービスの管理・運用をユーザー自身が行う形態のことです。

**メリット**:
- **カスタマイズ性**: システムのすべてを自分のニーズに合わせてカスタマイズできる。
- **コントロール**: システム上で実行されるすべての面に対して完全なコントロールを持てる。

**デメリット**:
- **管理負担**: ソフトウェアのアップデートやセキュリティパッチの適用など、運用に関する全ての責任がユーザーにあります。
- **スキル要件**: 効果的に管理するためには、高い技術スキルが必要になります。

## 3. インスタンスとは

AWSでの「インスタンス」とは、仮想サーバーのことです。AWSのEC2サービスを利用すると、物理的なハードウェア上に複数の仮想サーバーを立ち上げて利用することができます。

## 4. アップデートの管理

AWSでは、アンマネージドサービスを使用している場合でも、AWS Personal Health DashboardやAmazon CloudWatch Eventsを通じて、AWS側のアップデートやメンテナンス情報を受け取ることができます。これらのツールを使うことで、AWS環境に影響を与える可能性のある変更を事前に知ることができ、適切な対策を講じることが可能です。

## 5. EC2の即時性のメリットとデメリット

**メリット**:
- **柔軟性と迅速性**: 必要に応じてすぐにリソースを増減できるため、ビジネスの要求に素早く対応できます。
- **コスト効率**: 使用していないリソースに対するコストを削減できます。必要な時にのみリソースを利用し、不要になったらすぐに解放できるためです。

**デメリット**:
- **管理の複雑さ**: 頻繁にインスタンスを作成・削除することは、管理を複雑にする可能性があります。特に、適切な監視や自動化が行われていない場合には、コストの見積もりが困難になることもあります。
- **データの持続性**: インスタンスを削除すると、それに関連付けられた一時的なデータも失われます。重要なデータは、EBSボリュームや外部ストレージサービスに保存する必要があります。

これらのポイントを押さえることで、AWS EC2の強みを最大限に活かしつつ、潜在的な課題を管理することができます。


### 5-1. EBSボリューム

EBSボリュームは、EC2インスタンスに接続できる高性能なブロックレベルストレージです。EBSボリュームは、仮想ハードドライブとして機能し、インスタンスとは独立して存在するため、インスタンスを停止または終了してもデータが保持されます。EBSボリュームは、特に以下の用途に適しています：

- データベースやファイルシステムなど、持続的なデータストレージが必要なアプリケーション。
- 高いパフォーマンスやI/O操作が求められるワークロード。
- データのバックアップや復元、スナップショットを取ることで、データの耐久性を高める場合。

### 5-2. 外部ストレージ

外部ストレージは、EC2インスタンス外でデータを保存するために使用される、さまざまなAWSストレージサービスを指します。これには以下のようなサービスが含まれます
    
- **Amazon S3（Simple Storage Service）**: インターネット経由でアクセスできるオブジェクトストレージサービス。ウェブサイトのコンテンツ、バックアップ、アーカイブなど、大量のデータを保存するのに適しています。
- **Amazon Glacier**: 長期間のアーカイブやバックアップに特化した低コストストレージサービス。アクセス頻度が低いデータの保存に適しています。
- **AWS Storage Gateway**: オンプレミス環境とAWSクラウド間でシームレスにデータを統合し、バックアップやアーカイブ、災害復旧ソリューションを提供するサービス。

これら外部ストレージオプションを使用することで、EC2インスタンスから独立してデータを保存・管理でき、データアクセスの柔軟性、耐久性、スケーラビリティを実現できます。また、データの種類やアクセス頻度に応じて、コスト効率の良いストレージソリューションを選択することが可能です。

### 5-3. EBSとS3の比較
EBS（Elastic Block Store）とS3（Simple Storage Service）は、AWS内で提供される異なる種類のストレージサービスで、それぞれ異なる用途と特性を持っています。

#### EBS（Elastic Block Store）

- **タイプ**: ブロックレベルストレージ。
- **主な用途**: EC2インスタンスに接続されるドライブとして機能し、データベースやファイルシステムなどの持続的なデータストレージに使用されます。
- **特性**: 高性能で、IOPS（Input/Output Operations Per Second）を要するアプリケーションに適しています。EBSボリュームは、特定のEC2インスタンスに接続され、インスタンスとは独立して存在し、インスタンスの停止や終了後もデータを保持します。
- **アクセス**: EC2インスタンスから直接アクセスされます。

#### S3（Simple Storage Service）

- **タイプ**: オブジェクトストレージ。
- **主な用途**: ウェブサイトのコンテンツ、バックアップ、アーカイブ、大規模データセットなど、インターネット経由でアクセス可能な任意の量のデータを保存するために使用されます。
- **特性**: データはオブジェクトとして保存され、各オブジェクトは一意のキーで識別されます。S3は非常にスケーラブルで、世界中からアクセス可能です。また、データの耐久性と可用性が非常に高いです。
- **アクセス**: ウェブ経由でグローバルにアクセス可能で、HTTPを通じてデータにアクセスできます。

### EBSとS3の違い

- **アクセス方法**: EBSはブロックレベルでのアクセスを提供し、主にEC2インスタンス内からアクセスされます。一方、S3はHTTPを通じたオブジェクトレベルのアクセスを提供し、インターネット経由でどこからでもアクセスできます。
- **使用ケース**: EBSはデータベースやファイルシステムを実行するEC2インスタンスに最適です。S3は静的ウェブサイトのホスティング、データバックアップ、コンテンツ配信など、広範な用途に適しています。
- **データの永続性**: EBSボリュームはEC2インスタンスに接続されて使用され、インスタンスとは独立して存在します。S3は独立したサービスであり、EC2インスタンスのライフサイクルとは無関係にデータを保存します。


## 6. AWSでのマシンタイプとマシン

AWSにおける「マシンタイプ」とは、EC2インスタンスの種類を指します。これは、仮想サーバーのCPU、メモリ、ストレージの容量などのハードウェアの構成を表します。「マシン」とは、このコンテキストでは、EC2インスタンスそのもの、つまりAWSクラウド上で動作する仮想サーバーを意味します。

マシンタイプは、用途に応じて選択することができ、一般的な用途、コンピュート最適化、メモリ最適化、ストレージ最適化など、さまざまなカテゴリーがあります。例えば、計算処理が重いアプリケーションにはコンピュート最適化タイプが、大量のデータを扱うデータベースにはメモリ最適化タイプが適しています。

## 7. 選択可能なOS

AWS EC2では、複数のオペレーティングシステム（OS）を選択できます。主に以下のようなOSが利用可能です：

- **Linux系**: Amazon Linux, Ubuntu, CentOS, Red Hat Enterprise Linux (RHEL), SUSE Linux Enterprise Server (SLES)など。
- **Windows系**: Windows Serverの複数のバージョン。

## 8. AMIについて

AMIは「Amazon Machine Image」の略で、EC2インスタンスを起動するためのテンプレートです。AMIには、OS、アプリケーションサーバー、アプリケーション、設定情報など、インスタンス起動に必要な情報が含まれています。

AMIを使用することで、必要なソフトウェアがプリインストールされた状態で、簡単かつ迅速に新しいインスタンスを立ち上げることができます。また、カスタムAMIを作成することも可能で、特定の設定やソフトウェアを含むインスタンスからAMIを作成し、それを使用して同じ環境のインスタンスを複数起動することができます。

## 9. AMI選択の具体例

AMIを選択する際の条件は、目的や要件によって変わります。ここでいくつかの例を挙げましょう：

- **一般的なWebサーバー**: Amazon Linux AMIにApacheやNginxをプリインストールしたAMIを選択すると、Webサーバーを迅速にデプロイできます。
- **データベースサーバー**: RHELやSLESにMySQLやPostgreSQLをプリインストールしたAMIを選択すると、データベースサーバーのセットアップが容易になります。
- **Windowsベースのアプリケーション**: Windows Server AMIを選択し、必要な.NETアプリケーションやその他のソフトウェアをインストールすることで、Windowsベースのアプリケーションを実行できます。

カスタムAMIを作成することで、特定の設定や追加ソフトウェアを含むインスタンスからAMIを作り、それを利用して同じ設定のインスタンスを迅速に複数立ち上げることができる、というのが一例です。これにより、デプロイメントの時間を大幅に削減し、一貫性と再現性を確保することが可能になります。