AWS超入門〜Amazon EC2編〜

## ◾️ はじめに
　前回の記事では、AWSの基本的な理解や、実際のビジネスでの活用方法についてご説明しました。
まだご覧いただけていない方は[こちら](https://qiita.com/1998_i-airi/items/50bd6ebf50f5e75b4bc9)からご覧ください。
今回は、Amazon EC2についてアウトプットしようと思います。
興味のある方はぜひ最後まで読んでいただけると幸いです。

## ◾️ EC2（Amazon Elastic Compute Cloud）とは
　ビジネスやアプリケーションを運用するためにはサーバーが必要です。AWSでは、物理サーバーを所有せずに仮想サーバーを利用できます。この仮想サーバーにアクセスし、インターネット上で活用できるようにするのがEC2というAWSの一つのサービスです。

**使用目的**
EC2を利用することで、インターネット経由でサーバーを借りることが可能になり、次のような作業が可能になります。
- ウェブサイトの公開
- アプリケーションの動作
- データベースの管理

## ◾️ EC2を使用するメリット
　EC2を使用するメリットは以下になります。
- 高い柔軟性
必要に応じてサーバーの性能を変更できます。
- 高いコスト効率
使用した分だけ支払う従量課金制なので、無駄なコストが発生しません。
- 迅速
サーバーを数分で起動し、すぐに作業を開始できます。

**具体例**
もし、自分で物理サーバーを購入して運用する場合、次のようなステップを踏む必要があります。

1. サーバーのスペックや台数を調査
2. サーバーを注文
3. 実際にサーバーが届くのを待つ
4. 設置・接続作業を行い、稼働させる

これには、時間もコストもかかります。
また、サーバーを購入したら、使わなくても保守や維持費が発生します。

**EC2を利用すると、この問題を回避できます。**

- AWSのデータセンターで安全に運用されるため、独自にハードウェアを購入する必要はありません。
- サーバーはすでに設置済みで、オンラインですぐに利用できます。
- 必要なときにEC2インスタンスをリクエストするだけで、数分以内にサーバーが起動します。

さらに、作業が終わったらサーバーを停止・削除できるため、不要なサーバーを維持する必要もありません。

## ◾️ EC2インスタンスを起動してみよう！
**前提条件**
- AWSアカウントを作成済み
- リージョンをアジアパシフィック (東京)に設定

1. サービス検索でEC2を検索
AWS Management Consoleにログインし、サービス検索バーで「EC2」を入力して選択します。
2. インスタンス起動をクリック
![スクリーンショット 2024-09-25 19.14.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748502/991d0e6a-72eb-497d-ba1d-9ea75d730be7.png)
3. 以下を設定します
- **アプリケーションおよびOSイメージ（Amazon マシンイメージ）**
仮想サーバーを起動するために必要なソフトウェア設定を選択してください。

今回は、Ubuntuを選択します。
![スクリーンショット 2024-09-25 19.42.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748502/b2c55fe4-e0a8-b864-a7ca-291263ee459b.png)

- **インスタンスタイプ**
EC2インスタンスタイプは、EC2サービスで利用可能な仮想サーバーのハードウェアを構成するものであり、仮想サーバーの性能や処理能力を決定づける重要な要素です。
今回は、無料利用枠の対象を選択します。
※無料利用枠がなければ、以下を元に選択いただければと思います。

### ◾️ インスタンスタイプ
**インスタンスタイプの主要なカテゴリ**
1. 汎用インスタンス
コンピューティング、メモリ、ネットワークのリソース間のバランスをとります。
例）t3, m5

2. コンピューティング最適化インスタンス
高性能のウェブサーバー、計算負荷の高いアプリケーションサーバー、専用のゲームサーバーに最適です。
例）c5

3. メモリ最適化インスタンス
メモリ内で大規模なデータセットを処理するワークロードで高速パフォーマンスを実現できます。
例）r5, x1

4. 高速コンピューティングインスタンス
グラフィックス処理や機械学習、科学計算など、GPUを利用するアプリケーションに特化しています。
例）p3, g4

5. ストレージ最適化インスタンス
高速なストレージパフォーマンスを提供し、大規模なデータ処理に適しています。
例）i3, d2

:::note warn
**インスタンスタイプの選び方**
- アプリケーションの要件
使用するアプリケーションが必要とするリソースに基づいて選択します。たとえば、データベースはメモリ最適化インスタンスを、計算集約型タスクには計算最適化インスタンスを選ぶことが一般的です。
- コスト
インスタンスタイプによって料金が異なるため、予算に応じて適切なタイプを選ぶことが重要です。
- スケーラビリティ：
将来的にリソースの増減が予想される場合、スケーラビリティを考慮してインスタンスタイプを選択することも大切です。
:::

- **キーペア（ログイン）**
インスタンス（仮想サーバー）にアクセスするための鍵ペアを作成または既存のものを選択します。
今回は、新しいキーペアの作成し、そのファイルを保存します。
![スクリーンショット 2024-09-25 20.35.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748502/1c2ae5dd-9caf-71dd-1d00-53a26abb11dd.png)
![スクリーンショット 2024-09-25 20.43.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748502/239c154f-203e-4acc-72c8-e5ad04963924.png)


- **ネットワーク設定**

**1.VPC（Virtual Private Cloud）の選択**
EC2インスタンスは、VPC（仮想プライベートクラウド）内に配置されます。初めてEC2インスンスを起動する場合、デフォルトVPCが自動的に選択されますが、特別な要件がない限り、デフォルトVPCで問題ありません。

**2.パブリックIPの設定**
パブリックIPの自動割り当てオプションを有効にすることで、インスタンスにパブリックIPが割り当てられます。
これを有効にすることで、インターネットから直接SSH接続などができるようになります。

#### 補足：パブリックIPとは
インターネットから直接アクセスできるアドレスです。
パブリックIPにより、他のネットワーク上のデバイスがEC2インスタンスに通信できます。

#### 注意点
- **パブリックIP設定の無効化：**
パブリックIPの設定を無効にすると、そのインスタンスにはパブリックIPアドレスが付与されません。このため、インターネットから直接アクセスできなくなります。

- **既存インスタンスにパブリックIPを付与する場合：**
一度パブリックIPの割り当てが無効化された既存のインスタンスには、後からパブリックIPを付与することができません。そのため、パブリックIPを有効化した新しいインスタンスを作成する必要があります。

- **パブリックIP設定の有効化に伴う料金：**
パブリックIPの設定を有効にすると、そのインスタンスが稼働している間は時間単位で料金が発生します。ただし、インスタンスを終了（削除）すると、そのインスタンスに割り当てられていたパブリックIPも解放され、課金も停止します。

**3.セキュリティグループの設定**
セキュリティグループは、EC2インスタンスへのデータの流れを管理・制限する役割を担っています。
新しいセキュリティグループを作成し、以下のように設定します。

:::note info 
**インバウンドルール（SSH）**
タイプ： SSH
ポート：22
ソース： 自分のIPアドレス
:::
![スクリーンショット 2024-09-27 10.19.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748502/eb064ae1-2813-f6c8-011f-188196aab7fd.png)

- **インスタンスの起動**
設定を確認後、「インスタンスを起動」をクリックし、インスタンスが起動するまで待ちます。以下の画面が表示されたら、インスタンス起動が成功しています。

![スクリーンショット 2024-09-27 9.46.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748502/a5035f82-f5aa-8bb3-5279-d9aaba7db792.png)

「インスタンスの起動を正常に開始しました」横のリンクをクリックしていただくと起動したEC2インスタンスの一覧画面に遷移します。
![スクリーンショット 2024-09-26 10.35.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748502/3f4eabb2-6e81-3f30-747a-0c8dcb7edc71.png)

この後のSSH接続に必要なため、**パブリックIPv4アドレス**を控えておいてください。

## ◾️ SSHで接続確認してみよう！
**1.ターミナルで.sshディレクトリに移動し、VSCodeを開く**
```
cd ~/.ssh
code .
```
**2.先ほどキーペアを作成した際に保存したファイルを.ssh直下に設置する**
![スクリーンショット 2024-09-25 20.57.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748502/8ec810d4-4248-382b-3563-ca08e116f4d5.png)

**3.configに以下を設定**
- .ssh/configファイルが存在しない場合は、新規作成し、以下の内容を追加します。
```
Host EC2_Test
    HostName <インスタンス作成後に表示されたIPアドレスをここに設定>
    User ubuntu
    IdentityFile ~/.ssh/EC2Test.pem
```
#### 注意点
`<インスタンス作成後に表示されたIPアドレスをここに設定>`の部分には、先ほどEC2インタンスの一覧画面で取得したパブリックIPv4アドレスを入力します。

#### 補足
SSHを使用してEC2インスタンスに接続する際、パブリックIPアドレスを設定するのは、外部のネットワークからそのインスタンスにアクセスするためです。パブリックIPを指定することで、SSHクライアントが正しいインスタンスに通信ができるようになります。

**4.ファイルのパーミッションを確認**
セキュリティ上、.pemファイルのパーミッションが適切であることを確認します。
ターミナルで.sshディレクトリに移動し、以下のコマンドを実行してパーミッションを設定します。
```
chmod 400 EC2Test.pem
```
**5.SSH接続の確認**
設定が完了したら、以下のコマンドを実行してEC2インスタンスにSSH接続します。
```
ssh -i ~/.ssh/EC2Test.pem ubuntu@<インスタンス作成後に表示されたIPアドレス>
```
接続が成功すると、次のようなメッセージが表示されます。
```
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-1012-aws x86_64)
```

## ◾️ 最後に注意すべきこと
　AWS のサービスは従量課金制のため、このまま放置すると不要な料金が発生する可能性があります。これを防ぐために、EC2 インスタンスの停止や削除を必ず行いましょう！

### ◾️  EC2インスタンスを停止する
手順：
1.AWS管理コンソールにログインします。

2.サービス検索バーで「EC2」を検索し、EC2ダッシュボードにアクセスします。

3.左側のメニューで「インスタンス」をクリックします。

4.停止したいインスタンスを選択します（チェックボックスをオンにします）。

5.右上の「インスタンスの状態」をクリックし、ドロップダウンメニューから「停止」を選択します。

注意：
- インスタンスの停止により、料金の発生が一部抑えられますが、アタッチされた EBS ボリュームの料金は引き続き発生することがあります。
- 必要に応じて、後で「開始」からインスタンスを再開することが可能です。

![スクリーンショット 2024-09-26 10.49.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748502/17336233-a71c-12dc-87a1-658ca275c919.png)

### ◾️  EC2インスタンスを終了（削除）する

インスタンスを完全に終了（削除）する場合、停止と異なり、インスタンスが完全に破棄されます。
この操作は不可逆的で、終了したインスタンスは再起動できません。

手順：
1.AWS管理コンソールでEC2ダッシュボードにアクセスします。

2.左メニューの「インスタンス」を選びます。

3.削除（終了）したいインスタンスを選択します。

4.右上の「インスタンスの状態」をクリックし、「終了」を選択します。

「終了」を実行すると、インスタンスは完全に削除され、すべてのデータや設定は失われます。
削除後は、そのインスタンスを再度使用することはできません。

:::note warn
今回は使用していませんが、もし**EBS（Amazon Elastic Block Store）** を使用している場合は、EC2インスタンスを停止・終了しても、アタッチされたEBSボリュームにデータが残ります。この場合、EBSボリュームの料金が引き続き発生します。
:::

#### 補足：EBS（Amazon Elastic Block Store）とは
　EC2インスタンスを作成すると、作成したEC2インスタンスのタイプに応じて**インスタンスストアボリューム**と呼ばれるローカルストレージが提供されます。これらのボリュームはホストにアタッチされており、EC2インスタンスはその上で実行されているため、EC2インスタンスを終了または削除するとインスタンスストアボリュームに書き込まれたすべてのデータが削除されてしまいます。このような仕組みになっているのは、削除されたインスタンスを再度開始されると、EC2インスタンスが別のホストで作成されることがあるためです。
 
　EC2インスタンスを終了または削除してもデータが消えないようにするために、EBSのサービスを使用します。EBSを使用すると、EBSボリュームと呼ばれる仮想ハードドライブを作成し、EC2インスタンスにアタッチできます。EBS ボリュームはインスタンスストアボリュームとは異なり、EC2 を実行しているホストには直接の関連付けがされていません。これにより、EBS ボリュームに書き込むデータは、EC2 インスタンスを削除しても存続できるのです。

### ◾️  不要なリソース（ボリューム、セキュリティグループ、キーペア）の削除
インスタンスを終了しても、ボリュームやセキュリティグループ、キーペアなどのリソースは残る場合があります。不要であれば、これらも削除できます。


**EBSボリュームの削除：**「ボリューム」から不要なEBSボリュームを削除します。
**セキュリティグループの削除：**「セキュリティグループ」から不要なグループを削除します。
**キーペアの削除：** 「キーペア」から不要なキーペアを削除します。

![スクリーンショット 2024-09-27 11.13.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748502/746f0cf4-f088-270a-a49c-57c756fd6a30.png)