AWS マルチAZの作り方②(1つ目のEC2&RDS&ALB)

## はじめに
今回はマルチAZを全部手動で作りたいので、下記のAWS構成図のように作っていきます
※全て東京リージョンで行っております

:::note warn
EC2インスタンスへSSH接続して作業する際はパブリックサブネット(NATゲートウェイからインターネットゲートウェイ接続)へ切り替えてください。
:::

:::note info
RDSはコストの関係で1個しか今回は設定しないです
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4021963/cdccdf8a-de48-4b0d-a876-c05a40bacbe7.png)

最終的には下記を作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4021963/a958ffca-9f3c-4ae3-bcdc-45dd69e28e58.png)

こちらのページは下記のサイトの続きとなっております。

https://qiita.com/myaX/items/0994b3f419426892d761

## 手順1：EC2のセキュリティグループ作成
### 基本的な詳細
| 設定項目 | 入力内容 |
|:-----------|:------------|
| セキュリティグループ名 | `sample-ec2-security-group` |
| 説明 | 適当に入力(例：`First Security Group for sample-ec2`) |
| VPC | `sample-vpc` |

### インバウンドルール
インバウンドルール1
| 設定項目 | 入力内容 |
|:-----------|:------------|
| タイプ | HTTP |
| リソースタイプ | マイ IP |

インバウンドルール2(EC2にSSH接続する場合に入力してください)
| 設定項目 | 入力内容 |
|:-----------|:------------|
| タイプ | SSH |
| リソースタイプ | マイ IP |

入力が完了しましたら、`セキュリティグループを作成`をクリックします

## 手順2：EC2インスタンスを作成
`インスタンスを起動`をクリック
### 名前とタグ
| 設定項目 | 入力内容 |
|:-----------|:------------|
| 名前 | `sample-ec2-1a` |

### アプリケーションおよびOSイメージ(Amazon マシンイメージ)
| 設定項目 | 入力内容 |
|:-----------|:------------|
| Amazon マシンイメージ(AMI) | Amazon LinuxのAmazon Linux 2023 AMI |

### インスタンスタイプ
| 設定項目 | 入力内容 |
|:-----------|:------------|
| インスタンスタイプ | t2.micro |

### キーペア (ログイン)
`新しいキーペアの作成`をクリック
| 設定項目 | 入力内容 |
|:-----------|:------------|
| キーペア名 | `sample-ec2` |
| キーペアのタイプ | ED25519 |
| プライベートキーファイル形式 | .pem |

入力が完了しましたら、`キーペアを作成`をクリックします

### ネットワーク設定
| 設定項目 | 入力内容 |
|:-----------|:------------|
| VPC | `sample-vpc` |
| サブネット | `sample-vpc-private-1a-ec2` |
| パブリックIPの自動割り当て | 有効化(SSH接続しない場合は無効化) |
| ファイアウォール(セキュリティグループ) | 既存のセキュリティグループを選択する |
| 共通のセキュリティグループ | `sample-ec2-security-group` |

:::note info
パブリックIPの自動割り当てを解除したい場合、インスタンスを停止してから`アクション`→`ネットワーキング`→`IPアドレスの管理`のページで解除できます
:::

### ストレージを設定
8GiB, gp2を設定

入力が完了しましたら、`インスタンスを起動`をクリックします
作成したインスタンスが「実行中」と表示されていれば、起動は成功です

## 手順3：DBサブネットグループを作成
### サブネットグループの詳細
| 設定項目 | 入力内容 |
|:-----------|:------------|
| 名前 | `sample-db-subnet-group` |
| 説明 | 適当に入力 |
| VPC | `sample-vpc` |

### サブネットを追加
| 設定項目 | 入力内容 |
|:-----------|:------------|
| アベイラビリティーゾーン | `ap-northeast-1a` |
| サブネット | `sample-vpc-private-1a-rds`, `sample-vpc-private-1c-rds` |

入力が完了しましたら、`作成`をクリックします

## 手順4：RDSを作成
1. Aurora and RDSの`データベースの作成`をクリック
2. 「データベースの作成方法を選択」を「標準作成」を選択

### エンジンのオプション
| 設定項目 | 入力内容 |
|:-----------|:------------|
| エンジンのタイプ | MySQL |
| エディション | MySQL Community |
| エンジンバージョン | MySQL 8.0.41 |

### テンプレート
「無料利用枠」を選択

### 可用性と耐久性
「シングル AZ DB インスタンスデプロイ (1 インスタンス)」を選択

### 設定
| 設定項目 | 入力内容 |
|:-----------|:------------|
| DB インスタンス識別子 | `sample-db` |
| マスターユーザー名 | `sample_mysql` |
| 認証情報管理 | セルフマネージド |
| マスターパスワード | 自由に入力 |
| マスターパスワードを確認 | マスターパスワードと同じものを入力 |

### インスタンスの設定
| 設定項目 | 入力内容 |
|:-----------|:------------|
| インスタンス | db.t4g.micro |

### ストレージ
| 設定項目 | 入力内容 |
|:-----------|:------------|
| ストレージタイプ | 汎用 SSD(gp2) |
| ストレージ割り当て | 20GiB |
| ストレージの自動スケーリング | 有効にする |
| 最大ストレージしきい値 | 1000GiB |

### 接続
| 設定項目 | 入力内容 |
|:-----------|:------------|
| コンピューティングリソース | EC2 コンピューティングリソースに接続しない |
| ネットワークタイプ | IPv4 |
| Virtual Private Cloud (VPC) | `sample-vpc` |
| DB サブネットグループ | `sample-db-subnet-group` |
| パブリックアクセス | なし |
| VPC セキュリティグループ (ファイアウォール) | 新規作成 |
| 新しい VPC セキュリティグループ名 | `sample-rds-vpc-security-group` |
| アベイラビリティーゾーン | ap-northeast-1a |
| RDS Proxy | 設定しない |
| 認証機関 - 任意 | デフォルト |
| データベースポート | 3306 |

### データベース認証
| 設定項目 | 入力内容 |
|:-----------|:------------|
| データベース認証オプション | パスワード認証 |

### モニタリング
「データベースインサイト - スタンダード」を選択

### 追加設定
| 設定項目 | 入力内容 |
|:-----------|:------------|
| 最初のデータベース名 | `sample` |

入力が完了しましたら、`データベースの作成`をクリックします

## 手順5：RDS作成後の設定
### EC2接続のセットアップ
1. `sample-db`をクリック
2. 「アクション」をクリックし、EC2接続のセットアップをクリック
3. EC2インスタンスの選択で作成したEC2(`sample-ec2-1a`)を選択し、`続行`をクリック
4. 「見直しと確認」ページで、特に問題がなければ、`セットアップ`をクリック

## 手順6：ALBのセキュリティグループ作成
### 基本的な詳細
| 設定項目 | 入力内容 |
|:-----------|:------------|
| セキュリティグループ名 | `sample-alb-security-group` |
| VPC | `sample-vpc` |

### インバウンドルール
#### パブリックサブネットにあるEC2で作業する場合
:::note info
コストの関係上、パブリックサブネットにあるEC2で作業する場合、セキュリティリスクを低くするため、自身のパブリックIPでしか接続できないようにする
:::
#### パブリックサブネットにあるEC2で作業する場合
| 設定項目 | 入力内容 |
|:-----------|:------------|
| タイプ | HTTPS |
| リソースタイプ | マイ IP |

#### プライベートサブネットにあるEC2で作業する場合
| 設定項目 | 入力内容 |
|:-----------|:------------|
| タイプ | HTTPS |
| リソースタイプ | Anywhere-IPv4 |

入力が完了しましたら、`セキュリティグループを作成`をクリックします

## 手順7：ALBを作成
1. EC2のロードバランサーの`ロードバランサーの作成`をクリック
2. Application Load Balancerの`作成`をクリック

### 基本的な設定
| 設定項目 | 入力内容 |
|:-----------|:------------|
| ロードバランサー名 | `sample-alb` |
| スキーム | インターネット向け |
| ロードバランサーのIPアドレスタイプ | IPv4 |

### ネットワークマッピング
| 設定項目 | 入力内容 |
|:-----------|:------------|
| VPC | `sample-vpc` |
| アベイラビリティーゾーンとサブネット | `ap-northeast-1a`の`sample-vpc-public-1a`, `ap-northeast-1c`の`sample-vpc-public-1c` |

### セキュリティグループ
| 設定項目 | 入力内容 |
|:-----------|:------------|
| セキュリティグループ | `sample-alb-security-group` |

### リスナーとルーティング
`ターゲットグループの作成`をクリック
#### ターゲットグループの作成
##### 基本的な設定
| 設定項目 | 入力内容 |
|:-----------|:------------|
| ターゲットタイプの選択 | インスタンス |
| ターゲットグループ名 | `sample-alb-target-group` |
| プロトコル : ポート | アプリがリッスンしているポート(例：HTTPの80) |
| IPアドレスタイプ | IPv4 |
| VPC | `sample-vpc` |
| プロトコルバージョン | HTTP1 |

##### ヘルスチェック
| 設定項目 | 入力内容 |
|:-----------|:------------|
| ヘルスチェックプロトコル | HTTP |
| ヘルスチェックパス | `/healthz` |

入力が完了しましたら、`次へ`をクリックします

#### ターゲットを登録
`sample-ec2-1a`を選択し、`保留中として以下を含める`、`保留中のターゲットの登録`をクリックし、`ターゲットグループの作成`をクリックします

ALB作成画面に戻って、下記を入力します
#### SSL証明書を取得している場合
| 設定項目 | 入力内容 |
|:-----------|:------------|
| プロトコル | HTTPS |
| ポート | 443 |
| デフォルトアクション | `sample-alb-target-group` |

#### SSL証明書を取得していない場合
| 設定項目 | 入力内容 |
|:-----------|:------------|
| プロトコル | HTTP |
| ポート | 80 |
| デフォルトアクション | `sample-alb-target-group` |


### セキュアリスナーの設定
| 設定項目 | 入力内容 |
|:-----------|:------------|
| セキュリティカテゴリ | すべてのセキュリティポリシー |
| ポリシー名 | 推奨されているものを選択 |
| 証明書の取得先 | ACM |
| 証明書 (ACM から) | 取得したドメイン名を選択 |

入力が完了しましたら、`ロードバランサーの作成`をクリックします

## 手順8：EC2のセキュリティグループのインバウンドルールを修正
インバウンドルール1を下記に変更
| 設定項目 | 入力内容 |
|:-----------|:------------|
| タイプ | HTTP |
| リソースタイプ | カスタム |
| ソース | `sample-alb-security-group` |

またインバウンドルール2にあるSSH接続するためのルールは使わなくなった場合削除してください

## おまけ：EC2のパブリックIPを解除方法
対象のEC2インスタンスを停止 → 「アクション」→「ネットワーキング」→「IPアドレスの管理」 → パブリック IP の自動割り当てをOFF

## まとめ
マルチAZ構成のAWSインフラを手動で構築する手順を、EC2・RDS・ALBなどの設定とともに詳しく解説しました