EC2インスタンスを指定したサブネット内に作成する

# AWS初心者のためのEC2インスタンス構築ガイド - WindowsのWSL環境からSSH接続まで

## はじめに

AWSのEC2（Elastic Compute Cloud）は、クラウド上で仮想サーバーを起動・管理できるサービスです。本記事では、Windows上のUbuntu（WSL - Windows Subsystem for Linux）環境からEC2インスタンスを作成し、SSHで接続する方法を解説します。前回の記事で構築したVPC環境を活用し、実際に使えるサーバーを立ち上げていきましょう。

## 前提条件

この記事は以下の環境・知識があることを前提としています：

1. AWSアカウントを持っていること
2. Windows 10/11にWSL2がインストールされており、Ubuntu環境が利用可能であること
3. 基本的なLinuxコマンドの知識があること
4. VPC環境が構築済みであること
   - VPC（CIDR: 10.0.0.0/16）
   - パブリックサブネット（例：public-a: 10.0.0.0/24）
   - インターネットゲートウェイとルートテーブルの設定

## 本記事のゴール

以下の手順を通じて、EC2インスタンスを構築し、WSL上のUbuntuからSSH接続できるようになることを目指します：

1. EC2用のキーペアを作成
2. Elastic IPアドレスを取得
3. EC2インスタンスをパブリックサブネットに作成
4. Elastic IPをインスタンスに関連付け
5. WSL（Ubuntu）からSSHで接続

## EC2の基本概念

### EC2とは

EC2（Elastic Compute Cloud）は、AWSが提供する仮想サーバーサービスです。様々なスペックのサーバーを必要に応じて起動・停止でき、使った分だけ料金が発生します。

### AMI（Amazon Machine Image）

AMIはEC2インスタンスを作成するための「テンプレート」です。オペレーティングシステムや事前にインストールされたソフトウェアが含まれています。Ubuntuや Amazon Linux、Windows Serverなど様々なOSから選択できます。

### EBS（Elastic Block Store）

EBSは、EC2インスタンスに接続して使用する永続的なストレージです。「仮想ハードディスク」と考えるとわかりやすいでしょう。EC2インスタンスを停止・終了しても、EBSボリュームのデータは保持されます（明示的に削除しない限り）。

**料金について**: EBSは使用しているボリュームに対して、EC2インスタンスの状態（起動中/停止中）に関わらず常に料金が発生します。不要なボリュームは明示的に削除する必要があります。

### キーペア

EC2インスタンスへのSSHアクセスに使用する公開鍵と秘密鍵のペアです。AWSは公開鍵をインスタンスに保存し、ユーザーは秘密鍵（pemファイル）を安全に保管して接続に使用します。

### Elastic IP

Elastic IPは、動的に変化しない静的なパブリックIPアドレスです。EC2インスタンスを再起動しても変わらないIPアドレスが必要な場合に使用します。

## ハンズオン：EC2インスタンスの起動とSSH接続

### 1. キーペアの作成

1. AWS Management Consoleにログインし、EC2ダッシュボードに移動します
2. 左側のナビゲーションパネルから「キーペア」を選択します
3. 「キーペアを作成」ボタンをクリックします
4. 以下の設定を行います：
   - 名前：`ec2`（任意の名前）
   - キーペアのタイプ：`RSA`
   - プライベートキーファイル形式：`.pem`（OpenSSH互換）
5. 「キーペアを作成」ボタンをクリックします
6. pemファイルが自動的にダウンロードされます（例：`test-dev.pem`）
   - **重要：** このファイルは安全な場所に保存してください。紛失するとインスタンスに接続できなくなります

### 2. Elastic IPの取得

固定IPアドレスを確保するために、Elastic IPを取得します：

1. EC2ダッシュボードの左側のナビゲーションパネルから「Elastic IP」を選択します
2. 「Elastic IPアドレスの割り当て」ボタンをクリックします
3. デフォルト設定のままで、以下の設定を行います：
   - タグ：必要に応じて「Name」などのタグを追加（例：`test-ec2`）
4. 「割り当て」ボタンをクリックします
5. 緑色の成功メッセージが表示されたら、Elastic IPの取得は完了です

### 3. EC2インスタンスの作成

1. EC2ダッシュボードから「インスタンスを起動」ボタンをクリックします
2. インスタンスの名前を入力します（例：`test-ec2`）
3. AMIを選択します：
   - 「Amazon Linux 2 AMI (HVM)」を選択（無料利用枠対象）
4. インスタンスタイプを選択します：
   - `t2.micro`（無料利用枠対象）
5. キーペアを設定します：
   - 先ほど作成したキーペアを選択
6. ネットワーク設定を行います：
   - VPC：前回作成したVPCを選択
   - サブネット：パブリックサブネット（例：`public-a`）を選択
   - **パブリックIPの自動割り当て：「無効化」**（Elastic IPを使用するため）
   - セキュリティグループ：新しいセキュリティグループを作成
     - セキュリティグループ名：`test-sg`（任意）
     - 説明：適切な説明を入力
     - インバウンドルール：
       - SSH（ポート22）：任意の場所からのアクセスを許可（本番環境では特定のIPに制限すべき）
       - HTTP（ポート80）：任意の場所からのアクセスを許可
7. ストレージ設定：
   - デフォルトの8GBのままでOK（無料利用枠内）
8. 詳細設定：
   - デフォルトのままでOK
9. 「インスタンスを起動」ボタンをクリックします

起動プロセスが完了するまで少し時間がかかります（1〜2分程度）。インスタンスの状態が「実行中」になったら次のステップに進みます。

### 4. Elastic IPの関連付け

作成したEC2インスタンスに、取得したElastic IPを関連付けます：

1. EC2ダッシュボードの左側のナビゲーションパネルから「Elastic IP」を選択します
2. 先ほど取得したElastic IPを選択します
3. 「アクション」ボタンをクリックし、「Elastic IPアドレスの関連付け」を選択します
4. 以下の設定を行います：
   - リソースタイプ：「インスタンス」
   - インスタンス：先ほど作成したEC2インスタンスを選択
   - プライベートIPアドレス：表示されるプライベートIPアドレスを選択
5. 「関連付ける」ボタンをクリックします
6. 「正常に関連付けられました」というメッセージが表示されたら成功です

これで、EC2インスタンスに固定のパブリックIPアドレス（Elastic IP）が関連付けられました。

### 5. WSL（Ubuntu）からのSSH接続設定

#### 5.1 WSLのホームディレクトリに.sshフォルダを作成

1. WSL（Ubuntu）ターミナルを開きます
2. 以下のコマンドでホームディレクトリにエクスプローラーを開きます：
   ```bash
   explorer.exe .
   ```
3. エクスプローラーが開いたら、`.ssh`フォルダを作成します（既に存在する場合は作成不要）
4. ダウンロードした`test-dev-keypair-ec2.pem`ファイルをWindowsからこの`.ssh`フォルダにコピーします

#### 5.2 pemファイルのパーミッション設定

WSL（Ubuntu）ターミナルに戻り、以下のコマンドを実行してpemファイルのパーミッションを設定します：

```bash
chmod 600 ~/.ssh/txxxxx.pem
```

パーミッションが正しく設定されていないとSSH接続時にエラーになります。

#### 5.3 SSHでEC2インスタンスに接続

以下のコマンドを実行してEC2インスタンスに接続します：

```bash
ssh -i ~/.ssh/test-xxxxxx.pem ec2-user@あなたのElasticIP
```

`あなたのElasticIP`の部分には、取得したElastic IPアドレスを入力します。

初回接続時は以下のような警告が表示されますが、`yes`と入力して続行します：

```
The authenticity of host 'xx.xx.xx.xx (xx.xx.xx.xx)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
```

正常に接続できると、以下のようなプロンプトが表示されます：

```
       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-10-0-0-xx ~]$ 
```

これでEC2インスタンスにSSH接続することができました！

## 重要なポイントとベストプラクティス

### セキュリティ

1. **キーペアの管理**：
   - pemファイルは絶対に公開しないでください
   - 安全な場所に保存し、バックアップを取っておくことをお勧めします

2. **セキュリティグループの設定**：
   - 本番環境では、SSHアクセスを特定のIPアドレス範囲に制限するべきです
   - 必要なポートだけを開放し、不要なポートは閉じておきましょう

### コスト管理

1. **EC2インスタンス**：
   - 使用していないインスタンスは停止しましょう（停止中は計算リソースの料金は発生しません）
   - 完全に不要になったインスタンスは終了（削除）しましょう

2. **Elastic IP**：
   - EC2インスタンスに関連付けられていないElastic IPには料金が発生します
   - 不要なElastic IPは解放しましょう

3. **EBSボリューム**：
   - EBSボリュームはEC2インスタンスが停止していても料金が発生します
   - インスタンスを終了する際、デフォルトではルートボリュームは削除されますが、確認しておきましょう

## トラブルシューティング

### SSH接続ができない場合

1. **pemファイルのパーミッション**：
   ```bash
   chmod 600 ~/.ssh/your-key.pem
   ```

2. **セキュリティグループの設定**：
   - インバウンドルールでSSH（ポート22）が許可されているか確認

3. **ネットワーク設定**：
   - VPCのルートテーブルが正しく設定されているか
   - インターネットゲートウェイがVPCにアタッチされているか

4. **ユーザー名の確認**：
   - Amazon Linux 2: `ec2-user`
   - Ubuntu: `ubuntu`
   - RHEL: `ec2-user`または`root`
   - Debian: `admin`

5. **タイプミスの確認**：
   - IPアドレスが正しいか
   - pemファイルの名前とパスが正しいか

### その他の一般的な問題

1. **インスタンスが起動しない**：
   - インスタンス制限に達していないか
   - 選択したリージョンで指定のインスタンスタイプが利用可能か

2. **Elastic IPの関連付けができない**：
   - EC2インスタンスが「実行中」状態か
   - 同じリージョンにあるか

## 応用例

### Webサーバーのセットアップ

EC2インスタンスに接続できたら、以下のコマンドでApacheウェブサーバーをインストールできます：

```bash
# パッケージの更新
sudo yum update -y

# Apacheのインストール
sudo yum install -y httpd

# Apacheの起動
sudo systemctl start httpd

# 自動起動の有効化
sudo systemctl enable httpd

# 簡単なWebページの作成
echo "<html><body><h1>Hello from AWS EC2!</h1></body></html>" | sudo tee /var/www/html/index.html
```

インストールが完了したら、ブラウザでElastic IPアドレスにアクセスすると、作成したWebページが表示されます。

### インスタンスの停止・再起動

作業が終わったら、料金を節約するためにインスタンスを停止しておくことをお勧めします：

1. EC2ダッシュボードでインスタンスを選択
2. 「インスタンスの状態」→「インスタンスを停止」
3. 再開する場合は「インスタンスの状態」→「インスタンスを開始」

## まとめ

本記事では、AWS EC2インスタンスの作成からWindowsのWSL（Ubuntu）環境からのSSH接続までの手順を解説しました。主なポイントは以下の通りです：

1. キーペアの作成とElastic IPの取得
2. 適切なVPCとサブネットへのEC2インスタンスのデプロイ
3. Elastic IPの関連付け
4. WSL環境からのSSH接続設定
5. セキュリティとコスト管理のベストプラクティス

この基盤を元に、Webサーバー、データベース、アプリケーションサーバーなど、様々なワークロードをAWS上に構築していくことができます。次のステップとして、より高度なサービスとの連携や、自動スケーリング、監視の設定なども検討してみてください。

## 参考リソース

- [Amazon EC2公式ドキュメント](https://docs.aws.amazon.com/ec2/)
- [Amazon Linux 2 ユーザーガイド](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/amazon-linux-2-virtual-machine.html)
- [AWS無料利用枠について](https://aws.amazon.com/free/)
- [WSL2のインストールガイド](https://docs.microsoft.com/windows/wsl/install)