AWSコンソールでALB + EC2(Tomcat) + RDS 3層構成を構築する手順【ヘルスチェック / SG-to-SG制御】

AWS Basic
スポンサーリンク
スポンサーリンク
  1. はじめに
  2. キーワード解説
  3. 前フェーズとの違い
  4. 使用するAWSサービス
  5. 構築するリソース一覧
  6. 全体の作業順序
  7. ⓪ 自分のIPアドレスの確認
  8. ① キーペアの作成
  9. ② VPCの作成
  10. ③ サブネットの作成(4つ)
  11. ④ インターネットゲートウェイの作成・アタッチ
    1. 作成
    2. VPCへのアタッチ
  12. ⑤ ルートテーブルの設定
    1. 5-1. パブリック用ルートテーブル
    2. 5-2. プライベート用ルートテーブル
  13. ⑥ セキュリティグループの作成
    1. 6-1. ALB用セキュリティグループ
    2. 6-2. EC2用セキュリティグループ
    3. 6-3. RDS用セキュリティグループ
  14. ⑦ IAMロールの作成
    1. 信頼されたエンティティ
    2. 許可ポリシー
    3. ロール名
  15. ⑧ SSM Parameter Storeの作成
  16. ⑨ RDS DBサブネットグループの作成
  17. ⑩ RDS MySQL インスタンスの作成
    1. エンジンの選択
    2. テンプレート
    3. 設定
    4. インスタンスの設定
    5. ストレージ
    6. 接続
    7. 追加設定
  18. ⑪ EC2インスタンスの起動
    1. 基本設定
    2. ネットワーク設定
    3. IAMロール
    4. UserData
    5. タグ
  19. ⑫ ターゲットグループの作成
    1. ターゲットタイプとプロトコル
    2. ヘルスチェック
    3. ターゲットの登録
  20. ⑬ ALBの作成・リスナー設定
    1. 基本的な設定
    2. ネットワークマッピング
    3. セキュリティグループ
    4. リスナーとルーティング
  21. ⑭ 動作確認
    1. 14-1. ALBのヘルスチェック確認
    2. 14-2. ALB経由でWebアクセス確認
    3. 14-3. EC2にSSH接続する
    4. 14-4. Parameter StoreからDBパスワードを取得する
    5. 14-5. RDSへのMySQL接続テスト
    6. 14-6. SSH接続を切断する
  22. ⑮ リソースの削除
    1. 削除順序
    2. 1. ALBを削除する
    3. 2. ターゲットグループを削除する
    4. 3. EC2インスタンスを終了する
    5. 4. RDSインスタンスを削除する
    6. 5. RDS DBサブネットグループを削除する
    7. 6. SSM Parameter Storeのパラメータを削除する
    8. 7. セキュリティグループを削除する
    9. 8. ルートテーブルを削除する
    10. 9. インターネットゲートウェイをデタッチ・削除する
    11. 10. サブネットを削除する(4つ)
    12. 11. VPCを削除する
    13. 12. IAMロールを削除する
    14. 13. キーペアを削除する(任意)
  23. トラブルシューティング
  24. まとめ

はじめに

「EC2のIPが変わるたびに接続先を変えるのは面倒」「EC2を複数台に増やしてトラフィックを分散したい」——これを解決するのが ALB(Application Load Balancer) です。

この記事では、AWSコンソール(GUI)のみを使って、ALB・EC2(Tomcat)・RDS MySQLの3層構成をゼロから手動構築するハンズオンを紹介します。

インターネット
  ↓ HTTP(80)  ← ALB SGで全IPから許可
ALB(my-alb-alb)
  [パブリックサブネット1: 10.0.1.0/24 AZ-a]
  [パブリックサブネット2: 10.0.2.0/24 AZ-c]  ← ALBの2AZ要件
  ↓ HTTP(8080)  ← EC2 SGでALB SGからのみ許可(SG-to-SG)
EC2(my-alb-ap-instance)
  Tomcat(Javaアプリケーションサーバ)
  [パブリックサブネット1: 10.0.1.0/24 AZ-a]
  ↓ MySQL(3306)  ← RDS SGでEC2 SGからのみ許可(SG-to-SG)
RDS MySQL(my-alb-rds-mysql)
  [プライベートサブネット1: 10.0.3.0/24 AZ-a]

DBサブネットグループ
  ├── プライベートサブネット1(10.0.3.0/24)[AZ-a]
  └── プライベートサブネット2(10.0.4.0/24)[AZ-c]  ← 2AZ必須

このハンズオンで体験できること:

  • ALBのリスナー・ターゲットグループ・ヘルスチェックの概念を理解
  • EC2(Tomcat)をALBの後ろに隠して直接アクセスを遮断する設計
  • SG-to-SGを2段階で使う3層制御(インターネット→ALB→EC2→RDS)
  • ヘルスチェックで「Healthy」になるまでALBがトラフィックを転送しない仕組みを体験

このハンズオンのポイント:

前フェーズ(EC2 + RDS 2層構成)ではEC2に直接アクセスしていましたが、今回はALBを前段に追加します。ALBのDNS名でアクセスし、EC2のIPアドレスが変わっても影響を受けない設計になります。


この記事は CloudFormation版ハンズオン の比較記事です。
コンソール操作でALB・ターゲットグループ・ヘルスチェックを視覚的に学びたい方向けです。


-->

スポンサーリンク

キーワード解説

用語意味
ALB(Application Load Balancer)HTTP/HTTPSトラフィックをEC2に振り分けるL7ロードバランサー。EC2の死活監視も行う
ターゲットグループALBのトラフィック転送先(EC2インスタンスなど)をまとめたグループ
リスナーALBがトラフィックを受け付けるポート・プロトコルの設定(今回はHTTP:80)
ヘルスチェックALBがバックエンドEC2に定期的にHTTPリクエストを送り正常性を確認する仕組み。Unhealthyなインスタンスへはトラフィックを転送しない
TomcatJavaアプリケーションサーバーのOSS実装。デフォルトポート8080
SG-to-SG制御セキュリティグループのルールでソースにIPでなく別SGを指定する設定

スポンサーリンク

前フェーズとの違い

比較項目Phase 2-1(EC2 + RDS)Phase 2-2(ALB + EC2 + RDS)今回
アクセス方法EC2のパブリックIPに直接アクセスALBのDNS名でアクセス
WebサーバApache httpdTomcat(Java APサーバ)
ロードバランシングなし(EC2 1台)ALBによるHTTP負荷分散
ヘルスチェックなしALBが定期的にEC2の死活監視
EC2の直接公開ポート80で直接公開ポート8080はALB SGからのみ許可
サブネット数3つ4つ(ALBの2AZ要件のため)

使用するAWSサービス

サービス役割料金
VPCカスタムネットワーク空間無料
EC2(t2.micro)APサーバ(Tomcat)月750時間まで無料枠あり
RDS MySQL(db.t3.micro)マネージドDBサーバ月750時間まで無料枠あり
ALBロードバランサー約$0.008/時間 + LCU料金(無料枠なし
SSM Parameter StoreDBパスワードの安全な保管スタンダード層は無料
IAMEC2にSSM・Parameter Store権限を付与無料

注意: ALBは無料枠がありません。ハンズオン後は必ず削除してください。


構築するリソース一覧

順序リソース役割
(確認)自分のIPアドレスSGの設定に使用
キーペア(my-alb-keyEC2へのSSH認証鍵
VPC(my-alb-vpc独立したネットワーク空間
サブネット × 4パブリック2 + プライベート2
インターネットゲートウェイ(my-alb-igwVPCをインターネットに接続
ルートテーブル × 2パブリック/プライベートの通信経路
セキュリティグループ × 3ALB用・EC2用・RDS用
IAMロール(my-alb-ec2-roleEC2がSSM・Parameter Storeを使う権限
SSM Parameter StoreDBパスワードの保管
RDS DBサブネットグループRDSを配置できるサブネットを登録
RDS MySQL インスタンスマネージドDBサーバ(作成に10〜15分)
EC2インスタンス(my-alb-ap-instanceAPサーバ(Tomcat)
ターゲットグループ(my-alb-tgALBのトラフィック転送先の定義
ALB(my-alb-alb)+ リスナーロードバランサー本体
動作確認ALB → EC2 → RDS接続テスト
リソース削除課金停止

全体の作業順序

⓪ 自分のIPアドレスを確認
      ↓
① キーペア作成
      ↓
② VPC作成
      ↓
③ サブネット作成(4つ)
      ↓
④ インターネットゲートウェイ作成・アタッチ
      ↓
⑤ ルートテーブル設定(IGWルート追加 → サブネット関連付け)
      ↓
⑥ セキュリティグループ作成(ALB用・EC2用・RDS用)
      ↓
⑦ IAMロール作成
      ↓
⑧ SSM Parameter Store作成
      ↓
⑨ RDS DBサブネットグループ作成
      ↓
⑩ RDS MySQL インスタンス作成(※約10〜15分かかる)
      ↓
⑪ EC2インスタンス起動(Tomcat)
      ↓
⑫ ターゲットグループ作成
      ↓
⑬ ALB作成・リスナー設定
      ↓
⑭ 動作確認(ALB → EC2 → RDS)
      ↓
⑮ リソース削除

⓪ 自分のIPアドレスの確認

ブラウザで以下のURLを開くか、コマンドで確認します。

https://checkip.amazonaws.com

控えておく情報: 自分のIPアドレス(例: 203.0.113.1

セキュリティグループで 203.0.113.1/32 の形式(末尾に /32)で使用します。


① キーペアの作成

AWSコンソール → EC2 → キーペア → 「キーペアを作成」

設定項目
名前my-alb-key
キーペアのタイプRSA
プライベートキーファイル形式.pem

「キーペアを作成」をクリック。ダウンロードされた .pem ファイルを保存します。

C:\Users\ユーザー名\.ssh\my-alb-key.pem

② VPCの作成

AWSコンソール → VPC → VPC → 「VPCを作成」

設定項目
作成するリソースVPCのみ
名前タグmy-alb-vpc
IPv4 CIDR10.0.0.0/16

「VPCを作成」をクリック。


③ サブネットの作成(4つ)

AWSコンソール → VPC → サブネット → 「サブネットを作成」

VPCに my-alb-vpc を選択して、以下の4つを1回の操作で作成します(「新しいサブネットを追加」で追加できます)。

名前AZIPv4 CIDR用途
my-alb-public-subnet-1ap-northeast-1a10.0.1.0/24ALB + EC2
my-alb-public-subnet-2ap-northeast-1c10.0.2.0/24ALB(2AZ必須)
my-alb-private-subnet-1ap-northeast-1a10.0.3.0/24RDS配置
my-alb-private-subnet-2ap-northeast-1c10.0.4.0/24DBサブネットグループ用

「サブネットを作成」をクリック。

ALBが2AZを必要とする理由: ALBは高可用性のため複数AZにまたがって配置されます。VPCを選択すると「少なくとも2つのAZのサブネットを指定してください」というバリデーションが入ります。


④ インターネットゲートウェイの作成・アタッチ

作成

AWSコンソール → VPC → インターネットゲートウェイ → 「インターネットゲートウェイを作成」

設定項目
名前タグmy-alb-igw

「インターネットゲートウェイを作成」をクリック。

VPCへのアタッチ

作成したIGWを選択 → 「アクション」→「VPCにアタッチ」→ my-alb-vpc を選択 → 「インターネットゲートウェイのアタッチ」


⑤ ルートテーブルの設定

注意: EC2を起動する前にこの手順を完了させてください。IGWルートがない状態でEC2を起動すると、UserDataのTomcatインストールが失敗します。

5-1. パブリック用ルートテーブル

AWSコンソール → VPC → ルートテーブル → 「ルートテーブルを作成」

設定項目
名前my-alb-public-rt
VPCmy-alb-vpc

作成後、my-alb-public-rt を選択 → 「ルート」タブ → 「ルートを編集」→「ルートを追加」

送信先ターゲット
0.0.0.0/0インターネットゲートウェイ my-alb-igw

「変更を保存」をクリック。

次に「サブネットの関連付け」タブ → 「サブネットの関連付けを編集」→ パブリックサブネット2つにチェック → 保存

  • my-alb-public-subnet-1
  • my-alb-public-subnet-2

5-2. プライベート用ルートテーブル

同様に「ルートテーブルを作成」

設定項目
名前my-alb-private-rt
VPCmy-alb-vpc

「サブネットの関連付けを編集」→ プライベートサブネット2つにチェック → 保存

  • my-alb-private-subnet-1
  • my-alb-private-subnet-2

⑥ セキュリティグループの作成

6-1. ALB用セキュリティグループ

AWSコンソール → EC2 → セキュリティグループ → 「セキュリティグループを作成」

設定項目
セキュリティグループ名my-alb-sg
説明ALB SG - HTTP from internet
VPCmy-alb-vpc

インバウンドルール:

タイプポートソース説明
HTTP800.0.0.0/0HTTP from internet

「セキュリティグループを作成」をクリック。

なぜ 0.0.0.0/0(全開放)なのか: これまでのハンズオンではEC2が直接インターネットに露出していたため自分のIPだけに制限していました。今回はEC2の前にALBを置く3層構成のため、不特定多数のユーザーが使うWebサービスの入口であるALBは全開放が正しい設計です。

EC2(Tomcat)のセキュリティは次の6-2で設定するEC2 SGの「ALB SGからのみ8080を許可」によって守られます。

6-2. EC2用セキュリティグループ

設定項目
セキュリティグループ名my-alb-ec2-sg
説明EC2 Tomcat SG - Tomcat:8080 from ALB SG, SSH from MyIP
VPCmy-alb-vpc

インバウンドルール:

タイプポートソース説明
カスタムTCP8080my-alb-sgSGを選択Tomcat from ALB SG only
SSH22自分のIP/32SSH from my IP

アウトバウンドルール(変更しない):

タイププロトコル送信先
すべてのトラフィックすべて0.0.0.0/0

アウトバウンドルールを変更してはいけない理由: EC2がTomcatのインストール(Javaのダウンロードなど)でインターネットにアクセスするために必要です。誤って削除するとEC2からの通信が遮断されます。

SG-to-SG制御: ポート8080のソースにIPアドレスではなく my-alb-sg のSGを指定します。ALBを経由したトラフィックのみEC2に到達でき、インターネットから直接8080番ポートへのアクセスは不可になります。

6-3. RDS用セキュリティグループ

設定項目
セキュリティグループ名my-alb-rds-sg
説明RDS MySQL SG - MySQL:3306 from EC2 SG only
VPCmy-alb-vpc

インバウンドルール:

タイプポートソース説明
MySQL/Aurora3306my-alb-ec2-sgSGを選択MySQL from EC2 SG only


⑦ IAMロールの作成

AWSコンソール → IAM → ロール → 「ロールを作成」

信頼されたエンティティ

設定項目
信頼されたエンティティタイプAWSのサービス
サービスEC2

許可ポリシー

以下の2つのポリシーを検索して追加します。

ポリシー名用途
AmazonSSMManagedInstanceCoreSession Manager接続用
AmazonSSMReadOnlyAccessParameter Storeからパスワードを読み取る

ロール名

設定項目
ロール名my-alb-ec2-role

「ロールを作成」をクリック。


⑧ SSM Parameter Storeの作成

AWSコンソール → Systems Manager → パラメータストア → 「パラメータの作成」

設定項目
名前/my/alb/db-password
説明RDS MySQL master password for ALB hands-on
スタンダード
タイプ安全な文字列(SecureString・推奨)
KMS キーIDalias/aws/ssm(デフォルト)
Handson1234!

「パラメータの作成」をクリック。

「安全な文字列」(SecureString)とは: パスワードなどの機密情報をKMSで暗号化して保存するタイプです。取得時は --with-decryption オプションが必要です。CloudFormation版はString型で作成しますが、コンソールではSecureStringを推奨します。


⑨ RDS DBサブネットグループの作成

AWSコンソール → Aurora and RDS → サブネットグループ → 「DBサブネットグループの作成」

設定項目
名前my-alb-rds-subnet-group
説明RDS subnet group for ALB hands-on
VPCmy-alb-vpc

アベイラビリティーゾーンとサブネットの追加:

AZサブネット
ap-northeast-1amy-alb-private-subnet-1
ap-northeast-1cmy-alb-private-subnet-2

「作成」をクリック。


⑩ RDS MySQL インスタンスの作成

AWSコンソール → Aurora and RDS → データベース → 「データベースの作成 ▲」→「フル設定」

注意: RDSの作成は約10〜15分かかります。

エンジンの選択

設定項目
エンジンのタイプMySQL
エンジンバージョンMySQL 8.0.x(最新)

テンプレート

設定項目
テンプレート無料利用枠

設定

設定項目
DBインスタンス識別子my-alb-rds-mysql
マスターユーザー名admin
マスターパスワードHandson1234!

インスタンスの設定

設定項目
DBインスタンスクラスdb.t3.micro

ストレージ

設定項目
ストレージタイプ汎用SSD (gp2)
割り当てられたストレージ20 GiB
ストレージの自動スケーリングチェックを外す

接続

設定項目
コンピューティングリソースEC2コンピューティングリソースに接続しない
VPCmy-alb-vpc
DBサブネットグループmy-alb-rds-subnet-group
パブリックアクセスなし
VPCセキュリティグループ既存の選択my-alb-rds-sgdefault は削除)
アベイラビリティーゾーンap-northeast-1a

追加設定

「追加設定」を開きます。

設定項目
最初のデータベース名sampledb
自動バックアップを有効にするチェックを外す

「データベースの作成」をクリック。

控えておく情報: 作成完了後に表示される「エンドポイント」のホスト名

my-alb-rds-mysql.xxxxxxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com

⑪ EC2インスタンスの起動

注意: EC2を起動する前に⑤のルートテーブル設定が完了していることを確認してください。IGWルートがない状態で起動するとTomcatのインストールが失敗します。

AWSコンソール → EC2 → インスタンス → 「インスタンスを起動」

基本設定

設定項目
名前my-alb-ap-instance
AMIAmazon Linux 2023 AMI
インスタンスタイプt2.micro
キーペアmy-alb-key

ネットワーク設定

「編集」をクリックして以下を設定します。

設定項目
VPCmy-alb-vpc
サブネットmy-alb-public-subnet-1
パブリックIPの自動割り当て有効化
ファイアウォール(セキュリティグループ)既存のセキュリティグループを選択
セキュリティグループmy-alb-ec2-sg

IAMロール

「高度な詳細」→「IAMインスタンスプロファイル」→ my-alb-ec2-role を選択

UserData

「高度な詳細」→「ユーザーデータ」に以下を貼り付けます。

Tomcatバージョンの確認: TOMCAT_VERSION の値は https://archive.apache.org/dist/tomcat/tomcat-10/ で利用可能なバージョンを確認して設定してください。

#!/bin/bash
set -xe
exec > >(tee /var/log/user-data.log) 2>&1

dnf update -y
dnf install -y java-17-amazon-corretto wget

# https://archive.apache.org/dist/tomcat/tomcat-10/
TOMCAT_VERSION="10.1.28"
cd /opt
wget -q https://archive.apache.org/dist/tomcat/tomcat-10/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz
tar xzf apache-tomcat-${TOMCAT_VERSION}.tar.gz
mv apache-tomcat-${TOMCAT_VERSION} tomcat
chmod +x /opt/tomcat/bin/*.sh

# テスト用Webアプリのデプロイ
cat > /opt/tomcat/webapps/ROOT/index.html << 'HTMLEOF'
<!DOCTYPE html>
<html>
<body>
<h1>AP Server - Phase 2-2 ALB + Tomcat + RDS</h1>
<p>This server is load balanced by ALB and connects to RDS MySQL.</p>
</body>
</html>
HTMLEOF

# Tomcat起動
/opt/tomcat/bin/startup.sh

タグ

キー
Cost(任意)

「インスタンスを起動」をクリック。起動完了まで約2〜3分待ちます。

Tomcatの起動について: EC2の「実行中」状態になった後、UserDataによるTomcatのインストール・起動にさらに約5〜10分かかります。ALBのヘルスチェックが「Healthy」になるまで待ってからアクセスしてください。

控えておく情報: インスタンスのパブリックIPアドレス


⑫ ターゲットグループの作成

AWSコンソール → EC2 → ターゲットグループ → 「ターゲットグループの作成」

ターゲットタイプとプロトコル

設定項目
ターゲットタイプインスタンス
ターゲットグループ名my-alb-tg
プロトコルHTTP
ポート8080
VPCmy-alb-vpc
プロトコルバージョンHTTP1

ヘルスチェック

設定項目
ヘルスチェックプロトコルHTTP
ヘルスチェックパス/

「次へ」をクリック。

ターゲットの登録

「使用可能なインスタンス」から my-alb-ap-instance を選択します。

設定項目
ポート8080

「保留中として以下を含める」をクリック → 下部の「ターゲットを確認」にインスタンスが表示されたことを確認して「次へ」をクリック。

「ターゲットグループの作成」をクリック。

ヘルスチェックとは: ALBが定期的にEC2のポート8080の / にHTTPリクエストを送り、正常(HTTP 200)が返るか確認する仕組みです。ステータスが「Healthy」になるまではALBはそのEC2にトラフィックを転送しません。


⑬ ALBの作成・リスナー設定

AWSコンソール → EC2 → ロードバランサー → 「ロードバランサーの作成」

「Application Load Balancer」の「作成」をクリック。

基本的な設定

設定項目
ロードバランサー名my-alb-alb
スキームインターネット向け
IPアドレスタイプIPv4

ネットワークマッピング

設定項目
VPCmy-alb-vpc
アベイラビリティーゾーンap-northeast-1amy-alb-public-subnet-1)と ap-northeast-1cmy-alb-public-subnet-2)の両方を選択

ALBは必ず2つ以上のAZを選択します。 1つのAZだけを選ぶとエラーになります。

セキュリティグループ

my-alb-sg のみを選択(デフォルトSGは削除)。

リスナーとルーティング

設定項目
プロトコルHTTP
ポート80
デフォルトアクションmy-alb-tg に転送

「ロードバランサーの作成」をクリック。

控えておく情報: 「DNS名」(例: my-alb-alb-1234567890.ap-northeast-1.elb.amazonaws.com


⑭ 動作確認

14-1. ALBのヘルスチェック確認

EC2 → ターゲットグループ → my-alb-tg → 「ターゲット」タブ

my-alb-ap-instance のステータスが 「Healthy」 になるまで待ちます(5〜10分)。

ステータス意味
initial初期ヘルスチェック中(待つ)
healthy正常(トラフィック転送される)
unhealthy異常(Tomcatが起動していない可能性)

unhealthy が続く場合はEC2にSSH接続して sudo cat /var/log/user-data.log でUserDataのエラーを確認してください。

14-2. ALB経由でWebアクセス確認

ブラウザで以下のURLにアクセスします。

http://(⑬で控えたALBのDNS名)

「AP Server - Phase 2-2 ALB + Tomcat + RDS」と表示されれば正常です。

EC2のパブリックIPに直接アクセスしても表示されません(ポート8080はALB SGからのみ許可しているため)。これが3層構成のポイントです。

14-3. EC2にSSH接続する

ssh -i C:\Users\ユーザー名\.ssh\my-alb-key.pem ec2-user@(EC2パブリックIP)

14-4. Parameter StoreからDBパスワードを取得する

aws ssm get-parameter \
  --name "/my/alb/db-password" \
  --query "Parameter.Value" \
  --output text \
  --region ap-northeast-1 \
  --with-decryption

Handson1234! と表示されれば成功です。

--with-decryption について: コンソールでSecureStringとして作成した場合は必須です。このフラグがないと暗号化されたままの文字列が返ってきます。

14-5. RDSへのMySQL接続テスト

MySQLクライアントをインストールします(Amazon Linux 2023では mariadb105 を使います)。

sudo dnf install -y mariadb105
# 変数にエンドポイントを代入(⑩で控えた値に置き換える)
RDS_ENDPOINT="my-alb-rds-mysql.xxxxxxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com"

# Parameter StoreからDBパスワードを取得して接続
DB_PASSWORD=$(aws ssm get-parameter \
  --name "/my/alb/db-password" \
  --query "Parameter.Value" \
  --output text \
  --region ap-northeast-1 \
  --with-decryption)

mysql -h $RDS_ENDPOINT -u admin -p"$DB_PASSWORD" sampledb

接続成功後、SQL操作を確認します。

-- テーブル作成
CREATE TABLE items (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100),
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- データ挿入
INSERT INTO items (name) VALUES ('Apple'), ('Banana');

-- データ確認
SELECT * FROM items;

-- 後片付け
DROP TABLE items;

EXIT;

14-6. SSH接続を切断する

exit

⑮ リソースの削除

課金を止めるために、ハンズオン完了後は必ず削除します。

ALBの課金について: ALBはインスタンスが稼働している間は課金されます(約$0.008/時間 + LCU料金)。不要になったら必ず削除してください。

削除順序

依存関係があるため、必ずこの順番で削除します。

1. ALBを削除
2. ターゲットグループを削除
3. EC2インスタンスを終了
4. RDSインスタンスを削除(約10〜15分)
5. RDS DBサブネットグループを削除
6. SSM Parameter Storeのパラメータを削除
7. セキュリティグループを削除(RDS用 → EC2用 → ALB用の順)
8. ルートテーブルの関連付け解除・削除
9. インターネットゲートウェイをデタッチ・削除
10. サブネットを削除(4つ)
11. VPCを削除
12. IAMロールを削除
13. キーペアを削除(任意)

1. ALBを削除する

EC2 → ロードバランサー → my-alb-alb を選択 → 「アクション」→「削除」

確認フィールドに 確認 と入力 → 「削除」をクリック。

ALBを削除するとリスナーも一緒に削除されます。

2. ターゲットグループを削除する

EC2 → ターゲットグループ → my-alb-tg を選択 → 「アクション」→「削除」

3. EC2インスタンスを終了する

EC2 → インスタンス → my-alb-ap-instance を選択 → 「インスタンスの状態」→「インスタンスを終了」

「終了済み」になるまで待ちます(2〜5分)。

4. RDSインスタンスを削除する

Aurora and RDS → データベース → my-alb-rds-mysql を選択 → 「アクション」→「削除」

項目操作
最終スナップショットを作成チェックを外したまま
「私は〜を了承します。」チェックを入れる
確認フィールドdelete me と入力

「削除」をクリック。削除完了まで約10〜15分かかります。

5. RDS DBサブネットグループを削除する

Aurora and RDS → サブネットグループ → my-alb-rds-subnet-group → 「削除」

RDSインスタンスが完全に削除されてから行います。

6. SSM Parameter Storeのパラメータを削除する

Systems Manager → パラメータストア → /my/alb/db-password → 「削除」

7. セキュリティグループを削除する

EC2 → セキュリティグループ

依存関係があるため以下の順番で削除します。

  1. my-alb-rds-sg → 「アクション」→「セキュリティグループを削除」
  2. my-alb-ec2-sg → 「アクション」→「セキュリティグループを削除」
  3. my-alb-sg → 「アクション」→「セキュリティグループを削除」

8. ルートテーブルを削除する

VPC → ルートテーブル

  1. my-alb-public-rt → 「サブネットの関連付け」→「編集」→ チェックを全て外す → 「保存」→「アクション」→「ルートテーブルの削除」
  2. my-alb-private-rt → 同様に操作

9. インターネットゲートウェイをデタッチ・削除する

VPC → インターネットゲートウェイ

  1. my-alb-igw を選択 → 「アクション」→「VPCからデタッチ」→「デタッチ」
  2. 「アクション」→「インターネットゲートウェイの削除」

10. サブネットを削除する(4つ)

VPC → サブネット

4つのサブネットをすべて選択 → 「アクション」→「サブネットの削除」

  • my-alb-public-subnet-1
  • my-alb-public-subnet-2
  • my-alb-private-subnet-1
  • my-alb-private-subnet-2

11. VPCを削除する

VPC → お使いのVPC → my-alb-vpc を選択 → 「アクション」→「VPCの削除」

12. IAMロールを削除する

IAM → ロール → my-alb-ec2-role を選択 → 「削除」

13. キーペアを削除する(任意)

EC2 → キーペア → my-alb-key を選択 → 「アクション」→「削除」


トラブルシューティング

症状原因対処
ALBに繋がらない(タイムアウト)ALB SGのインバウンドルールにHTTP:80がないALB SGを確認・修正
ALBに繋がるが502エラーTomcatがまだEC2で起動していない5〜10分待つか sudo cat /var/log/user-data.log 確認
ALBに繋がるが503エラーターゲットグループにHealthyなインスタンスがないTG → ターゲットのステータスを確認
Unhealthyが続くTomcatの起動失敗SSH接続して sudo /opt/tomcat/bin/startup.sh を手動実行
Unhealthyが続く(UserDataも失敗)EC2 SGのアウトバウンドルールが削除されているEC2 SG → アウトバウンドルールに「すべてのトラフィック 0.0.0.0/0」を追加
EC2にSSH接続できないSGのSSH許可IPが違うEC2 SGのインバウンドSSH規則を現在のIPに更新
MySQLに接続できないRDS SGのソースがEC2 SGのIDでないRDS SGのインバウンドルールを確認
ERROR 1049: Unknown database 'sampledb'RDS作成時にDB名を指定し忘れたMySQLに接続して CREATE DATABASE sampledb; を実行

まとめ

ステップ内容
①〜⑤VPC / サブネット4つ / IGW / ルートテーブルの設定
3段階のSG(ALB SG → EC2 SG → RDS SG)でSG-to-SG制御
⑦⑧IAMロール + Parameter Store(SecureString)でパスワードを安全に管理
⑨⑩DBサブネットグループ + RDS MySQL 8.0
EC2起動(UserDataでTomcat自動セットアップ)
⑫⑬ターゲットグループ + ALB作成。Healthyになるまで待つ
ALB DNS名でアクセス → EC2 → Parameter Store → RDS への接続テスト

前フェーズ(EC2 + RDS)との最大の違いは、EC2がインターネットに直接露出しない点です。ALBがHTTP:80のトラフィックを受け取り、EC2にはALBを経由したポート8080のみが開放されています。スケールアウト時はターゲットグループにEC2を追加するだけで負荷分散できます。

CloudFormationで同じ構成を自動化したい場合は、CloudFormation版ハンズオンを参照してください。コマンド1本で27リソースを一括デプロイできます。

コメント