0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ALB → EC2 → RDS のWebシステム構成を構築してみました。

✅ はじめに

はじめてAWS上でWebシステム構成(ALB → EC2 → RDS)を構築したので
手順と学んだポイントを復習も兼ねてまとめてみました。

  • 構築経験を積む目的(可視化しやすい構成)
  • NAT Gatewayあり(SSMログイン対応)
  • Webアプリは表示しない構成(導通確認メイン)

🧱 構成図

Diagram_Websystem_1.png

ALB (Public Subnet)
 ↓
EC2 (Private Subnet)
 ↓
RDS (同じPrivate Subnet)

🧪 最終的な導通確認ポイント

経路 確認内容
ALB → EC2 HTTPアクセスで Hello from<hostname> を確認
EC2 → RDS SSMログインして MySQL クライアントで接続確認

🌐 VPCとサブネット作成

名称 CIDR 用途 備考
VPC 10.0.0.0/16 全体ネットワーク
Public Subnet A/C 10.0.0.0/24 / 10.0.1.0/24 ALB IGW接続あり
Private Subnet A/C 10.0.10.0/24 / 10.0.11.0/24 EC2 & RDS共用 NAT Gateway経由で外部通信可能

📡 NAT Gateway作成(SSMログインのため)

  • Public Subnet に NAT Gateway を設置
  • Elastic IP を割当
  • Private Subnet のルートテーブルに 0.0.0.0/0 → NAT Gateway を追加

🔁 ルートテーブル作成

ルートテーブル 関連付けサブネット 設定
PublicRT Public Subnet A/C 0.0.0.0/0 → IGW
PublicRT Public Subnet A/C 10.0.0.0/16 → local
PrivateRT Private Subnet A/C 0.0.0.0/0 → NGW
PrivateRT Private Subnet A/C 10.0.0.0/16 → local

🔐 セキュリティグループ設定

3つ作成

インバウンド

SG名 許可内容 備考
ALB-SG TCP 80 from 0.0.0.0/0 公開
EC2-SG TCP 80 from ALB-SG ALB経由のみ許可
RDS-SG TCP 3306 from EC2-SG DB接続用

アウトバウンド(デフォルト)

SG名 許可内容 備考
全てのSG すべてのトラフィック 80 from 0.0.0.0/0 公開

🛠️ EC2構築(UserDataあり)

AMI:Amazon Linux 2023

インスタンスタイプ:t3.micro

Subnet:Private Subnet A または C

パブリックIPなし

インスタンスプロファイル:AmazonSSMManagedInstanceCore をアタッチ
(SSMログイン用 IAMロール)

UserDataを記入↓

🔧 EC2 UserData 内容(Amazon Linux 2023)

Amazon Linux 2023 では yum install mysql が利用できないため、
(yumコマンドとmysqlコマンドが、OS起動そのままでは使用不可)
代わりに MariaDB クライアントをインストールしました。
RDSの作成画面ではMySQLを選択。

#!/bin/bash
dnf update -y
dnf install -y httpd mariadb105
systemctl start httpd
systemctl enable httpd
echo "Hello from $(hostname)" > /var/www/html/index.html

ALB → EC2 (Apache) → HTML表示

📦 UserData 実行結果(cloud-init)

EC2に設定したUserDataが正常に動いているか確認

Apache & MariaDB パッケージのインストールログ(抜粋):

sudo cat /var/log/cloud-init-output.log
#(抜粋)
Installed:
  httpd-2.4.62-1.amzn2023.x86_64
  mariadb105-10.5.29-1.amzn2023.0.1.x86_64
...
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.

🔍 EC2 内部確認(SSM接続にて)

Apache のステータス:

$ sudo systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: active (running)

index.html 内容:

$ cat /var/www/html/index.html
Hello from ip-10-0-10-250 #(ここはhostnameが表示される)

#表示されるhostnameを変えて遊びたい人向け
sudo hostnamectl set-hostname 新しいホスト名

🌐 ALB経由アクセス確認

ALBのDNS名:

ALBのDNS名をブラウザで検索

ALB_DNS.png

アクセス結果(ブラウザまたは curlコマンド):

ALB_DNS_result.png

ApacheサーバーがALB経由で正しく応答していることを確認。


✅ 確認完了ポイント

  • EC2起動時にUserDataが実行され、ApacheとMariaDBがインストール
  • httpdサービスが有効・起動状態
  • index.htmlが /var/www/html/ に生成済み
  • ALBからのHTTPアクセスでindex.htmlの内容が確認できた

RDSの作成(詳細手順)

🔸 ステップ 1:DBサブネットグループの作成

AWSコンソール → RDS → サブネットグループ

「サブネットグループの作成」

名前:おまかせ

VPC:VPCを選択

サブネット:Private Subnet A/C を追加

🔸 ステップ 2:RDSインスタンスの作成

AWSコンソール → RDS → 「データベースを作成」

スタンダード作成を選択

エンジン:MySQL

バージョン:任意(例:8.0系)

テンプレート:開発/テスト

設定

DB識別子:おまかせ

マスターユーザー名:admin

パスワード:任意(後で使用するので控える)
RDS_passwd.png



・いくつかの項目はデフォルト

接続

EC2 コンピューティングリソースに接続しないを選択し

作成済みのVPCを選択

サブネットグループ:ステップ1で作成したもの

パブリックアクセス:オフ

VPCセキュリティグループ:(作成済みのセキュリティグループを選択)
RDS_SG_select.png

ストレージやバックアップ等は任意で調整

「データベースの作成」で完了


✅ 疎通確認(EC2 → RDS)

以下コマンドで RDS(MySQL)への接続確認を行いました。
EC2にSSMログインして実施

# EC2にSSMログイン後
mysql -h <RDSエンドポイント> -u admin -p

SHOW DATABASES;

出力結果
SHOW_DATEBASE.png

🔻 リソース削除リスト

本構成はAWS料金が時間単位またはストレージ単位で発生するリソースを含むため、検証完了後は不要リソースを削除・解放することでコストの最小化を図ります。

✅ 削除・解放が必要なリソース一覧

リソース 削除理由・メモ
NAT Gateway 高額な時間単位・データ転送量課金が発生。使っていなければ即削除が必須
RDS インスタンス 常時課金されるマネージドサービス。検証終了後は削除 or スナップショット取得後削除。
RDS スナップショット ストレージ課金あり。
EC2 インスタンス 停止中でもEBS料金が発生。不要であれば削除。
Elastic IP (EIP) アタッチされていないと料金が発生。使用中でなければ解放する。
ALB(ロードバランサー) 稼働時間とリクエスト数で課金。
ターゲットグループ ALBと同様に削除。
IAM ロール(EC2用SSM) AmazonSSMManagedInstanceCoreなど。他用途と兼用でなければ削除検討。

💡 任意で整理(課金はされない)

リソース
VPC・サブネット セキュリティグループ
サブネットグループ(RDS用) ルートテーブルなど

★構成メモ

  • 構成簡素化のため、Webサーバー(EC2)とデータベース(RDS)は同一のプライベートサブネットに配置

  • NAT Gatewayは1つのみ作成し、複数のプライベートサブネットから共通で利用する構成としました。可用性を高めるには、各AZにNAT Gatewayを1つずつ配置し、ルートテーブルもAZごとに分ける必要があります。

  • 通信信経路は基本インバウンドを記入

  • RDSパブリックアクセス無効(非公開)にしていれば、外部からアクセスできない
    RDSから外部に出ていくこともない(パッチ適用時以外)
    なので、同じサブネット内のルートテーブルに 0.0.0.0/0 → NAT GW があっても、セキュリティ的に大きなリスクにはならない。

  • SSMログインを可能にするための条件
    EC2に必要な3つの準備(これをすべて満たせばOK)

項目 内容 状態
IAMロールのアタッチ            AmazonSSMManagedInstanceCore                                                       ポリシー付きのロール ✅ 必須
SSM Agentのインストール               Amazon Linux 2/2023 なら最初から入ってる ✅ 通常OK
SSMと通信できる経路 インターネット接続 or VPCエンドポイント

書簡

・自分で構成してみて、
 ターゲットグループがunhealthy状態になったり、
 UserDataが正常に実行されなかったり
 EC2からSSM接続ができなかったりと上手くいかない場面がありました。
 しかし、解決まで考えることで多くの知見を得られよかったです。
 (生成AIに感謝)


📝 最後に

今後はこの構成をベースに:

  • Webアプリ付きの構成
  • CloudFormation / Terraform 化
  • サーバレス版への展開
    Lambda + API Gateway + RDS(MySQL)でRDSの中を見る構成

なども取り組んでいきたいです。


githubにも投稿しました。
https://github.com/biginfranner/AWS_otamesi_alb_ec2_rds

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?