この記事では、独自ドメイン + SSL化されたサイトをAWS上に構築する際に、どういう構造で動いているかを整理し、「役割の分担」と「通信の流れ」を理解するためのメモです。
1. まず登場人物(サービス)を整理する
-
Route 53
独自ドメインの DNS を管理します。example.comにアクセスが来たとき、最終的に ALB の DNS 名 を返すように設定します(A レコードの エイリアス を使う)。 -
ACM(AWS Certificate Manager)
独自ドメイン用の 公開証明書 を発行・自動更新します。証明書は ALB に載せます(EC2 ではなく)。 -
ALB(Application Load Balancer)
入口のゲートです。HTTPS を受ける場所であり、HTTP → HTTPS のリダイレクトもここで行います。アプリ本体(EC2)への転送も ALB が担当します。 -
EC2(アプリサーバ)
WordPress や Rails などアプリ本体を動かすサーバ。80 番ポートで ALB からのリクエストだけを受けます。TLS は ALB に任せるので、EC2 側は平文 HTTP で OK です。 -
RDS(データベース)
データを保存する場所。インターネットからは見えないプライベートな領域に置きます。EC2 からだけ接続を許可します。
2. 名前解決(ドメイン → ALB)
- ユーザーが
https://example.comを開くと、ブラウザはまず DNS に問い合わせます。 - Route 53 のホストゾーンでは、**A レコード(エイリアス)**で ALB の DNS 名 を指すようにしてあります。
- その結果、ブラウザは ALB に接続しに行きます。ここで証明書(ACM)が使われます。
ポイント:Apex(
example.comのようなルート)でも A(エイリアス) を使えば ALB の DNS 名 を指せます。IP を直接書く必要はありません(ALB の IP は固定ではないため)。
3. 通信の流れ(入口からアプリまで)
- ブラウザは 443/TLS(HTTPS) で ALB に接続します。ALB は ACM の証明書で暗号化を終端します。
- ALB は ターゲットグループに登録された EC2 へ 80/TCP で転送します。
- EC2 のアプリがレスポンスを返し、ALB がそれをユーザーへ返します。
- もし最初に
http://で来た場合は、ALB が 301 でhttps://にリダイレクトします(アプリ側にリダイレクト設定は不要)。
ポイント:TLS は ALB に集約し、アプリは 80 番のみでシンプルに運用します。証明書の更新や配布が不要になり、差し替え・横展開が簡単になります。
4. ネットワークの置き場所と境界
-
Public サブネット
インターネットに出られる領域。ALB(と今回は EC2 も)を配置します。Public ルートテーブルには0.0.0.0/0 → IGWが設定されます。 -
Private サブネット
インターネットに直接は出ない領域。RDS を置きます。Public 側のような IGW ルートは持ちません。
最低 2 つのアベイラビリティーゾーンに同種のサブネットを 1 つずつ用意しておくと、可用性が上がります(ALB は自動で複数 AZ にノードを置きます)。
5. セキュリティ(通れる相手を最小限に)
-
ALB のセキュリティグループ
80/443 を全世界から受ける(インターネットの入口のため)。 -
EC2 のセキュリティグループ
80 → 送信元は ALB のセキュリティグループ のみにします。直接の全世界公開はしません。
SSH(22)は 自分の固定 IP からのみ。 -
RDS のセキュリティグループ
3306(MySQL) → 送信元は EC2 のセキュリティグループ のみにします。インターネットからは到達不可。
入口 → アプリ → DB の順に「誰が誰へ通れるか」を グループ単位で絞ると、読みやすく・安全です。
6. ヘルスチェックと切り替え(安全に入れ替える)
- ターゲットグループに ヘルスチェックを設定します。パスは
/でも/healthでも構いません。成功コードは 200–399 にしておくと、リダイレクト応答も正常扱いにできます。 - 新しいアプリ(例:Rails)を別のターゲットグループに登録し、ALB の転送先を切り替えるだけで入れ替えができます。問題があればすぐ戻せます。
入口(DNS・ALB・ACM)はそのまま、裏側の転送先だけを変えるので、安全で早いです。
7. きちんと動いているかを短く確かめる
# DNS が ALB を向いているか(ALB のパブリックIP群が返る)
dig +short yourdomain.com
# HTTP → HTTPS へリダイレクトされるか
curl -I http://yourdomain.com
# HTTPS で応答が返るか(ALB で TLS 終端)
curl -I https://yourdomain.com
8. 片付けとコストの考え方(参考)
課金される主なものは ALB / RDS / EC2(時間課金)です。不要になったら、依存の少ない順に Route 53 レコード → ALB / ターゲットグループ → RDS → EC2 → セキュリティグループ → VPC の順で整理します。ドメイン自体は継続利用できます。
まとめ
- Route 53 は「ドメイン → ALB」を教える係(A エイリアス)
- ACM + ALB は「HTTPS を受ける係」(TLS 終端と HTTP→HTTPS の入口統一)
- EC2 は「アプリを動かす係」(80 番のみで ALB からの通信だけ受ける)
- RDS は「データを守る係」(Private に置き、EC2 からだけ開く)
この分担にしておくと、安全で、運用が軽く、アプリの入れ替えも簡単になります。