はじめに
こんにちは。アメリカ在住で独学エンジニアを目指している Taira です。
ついにMVPが完成し、あとはデプロイするだけ!というところまで来ました。
今回は、ALB(Application Load Balancer)とRDS(Relational Database Service)の設定手順を紹介します。
前提条件
- 今回はReact × Rails × Docker × PostgreSQLの構成です
- AWSアカウントを持っていること
- ドメインを取得していること(私はお名前.comで取得しました)
- ALBとRDSの基礎知識があること
- 公開リージョンは東京リージョン(ap-northeast-1)
- 著者は2025年10月11日に記事を書いています
現時点で想定している構成図は以下の通りです。なおこれから若干変更する可能性がありますのでご了承ください
1. ALB(Application Load Balancer)の設定
ALBとは、Application Load Balancerの略で、アプリケーション層(レイヤー7)で動作するロードバランサーです。
ALBは、HTTPおよびHTTPSトラフィックの負荷分散に特化しており、複数のターゲット(EC2インスタンス、コンテナ、IPアドレスなど)にトラフィックを分散します。これがマルチAZ構成を実現するための重要な要素となります。
しかし、今回はシングルAZ構成なのにも関わらずなぜ使うのでしょうか。理由は以下の通りです
- HTTPS終端(ACM):アプリ側はHTTPでOK。
- 安定エンドポイント:ECSタスクのIP変動を吸収。
1.1 ALBの作成
では早速ALBを作成していきます。リージョンが東京リージョンであることを確認してください。
- EC2のダッシュボードから左のタブにある「ロードバランサー」をクリックします。
- 「ロードバランサーを作成」をクリックします。
- 「アプリケーションロードバランサー」を選択し、「作成」をクリックします。
- 名前タグに任意の名前を入力します。(例: yourappname-alb)
- スキームは「インターネット向け」を選択します。
- IPアドレスタイプは「ipv4」を選択します。
- VPCは先ほど作成した以前作成したVPCを選択します。
- アベイラビリティーゾーンは2つのAZを選択し、先ほど作成したパブリックサブネットを選択します。
- セキュリティグループは以前作成したALB用のセキュリティグループを選択します。
- リスナーはHTTP(80)を選択します。通信はhttpではなくhttps として通信したいのでhttps にリダイレクトするように以下の画像を参考に設定します
- 「リスナーを追加」をクリックしてHTTPS(443)を選択します。
- ターゲットグループへ転送を選択し、「新しいターゲットグループを作成」をクリックします。
ここでターゲットグループとはALBがリクエストを転送する先のグループのことです。
私の場合ALBからECS(Fargate)にリクエストを転送します。
では次のセクションでターゲットグループを作成していきます。
1.2 ターゲットグループの作成
- ターゲットタイプは「IP」を選択します。
- 名前タグに任意の名前を入力します。(例: yourappname-target-group)
- プロトコルはHTTPします。少しややこしいのですが、ALBでHTTPS終端するので、ALBとECS(Fargate)間はHTTPで通信します。
図で表すとこんな感じです
ユーザー --HTTPS--> ALB(ここでhttpsが終端される) --HTTP--> ECS(Fargate)
- ポートはECS(Fargate)で待ち受けているポート番号を入力します。(例: rails なら3000)
- IPv4を選択します。
- vpcは以前作成したVPCを選択します。
- プロトコルバージョンはHTTP1を選択します。
- ヘルスチェックの設定はデフォルトのままでOKで、次をクリック
- ネットワークは以前作成したVPCを選択されていることを確認
- 「IP を指定してポートを定義する」がありますが、今回はFargateのタスクがまだないので、すでに10.0.0と書いてあるがそれは削除してください
- 「ターゲットグループを作成」をクリックします。
(追記)
もし、Rails で/
のルーティングを設定していない場合、ヘルスチェックが失敗します。
その場合、ヘルスチェックのパスを/
から/api/v1/health_check
などに変更し、Rails側で以下のようにルーティングとアクションを追加してください。
# config/routes.rb
Rails.application.routes.draw do
namespace :api do
namespace :v1 do
resource :health_check, only: :show, controller: :health_check
# コントローラーが単数系(health_check_controller.rb)の場合はcontroller: :health_checkを明示
# ...既存...
end
end
end
# app/controllers/api/v1/health_check_controller.rb
class Api::V1::HealthCheckController < ApplicationController
# GET /api/v1/health_check
def show
render json: { status: "ok" }, status: :ok
end
end
これでターゲットグループの作成が完了しました。
1.3 ALBの再設定
- 先ほどのALBの作成画面に戻り、先ほど作成したターゲットグループを443のリスナーに設定します。
- セキュアリスナーの設定
- セキュリティポリシーはデフォルトのままでOK
- SSL証明書はACMで発行した証明書を選択します。
- クライアント証明書の処理はチェック不要です。
- 「ロードバランサーを作成」をクリックします。
これでALBの作成が完了しました。
1.4 Route53でドメインをALBに紐付ける
- Route53のダッシュボードから左のタブにある「ホストゾーン」をクリックします。
- 先ほど取得したドメインをクリックします。
- 「レコードを作成」をクリックします。
- レコード名にサブドメインを入力します。(例: api)
- レコードタイプはA - IPv4アドレスを選択します。
- エイリアスを有効にします。
- エンドポイントの種類は「Application and Classic Load Balancer」を選択します。
- リージョンは東京リージョンを選択します。
- ロードバランサーは先ほど作成したALBを選択します。
- 「レコードを作成」をクリックします。
ALBはIPv6にも対応しているので、必要に応じてAAAAレコードも同様に作成してください。
2. RDS(Relational Database Service)の設定
2.1 RDSのサブネットグループの作成
RDSを作成する前にRDSのサブネットグループを作成します。サブネットグループは、「RDSを配置できるサブネットの範囲をまとめたグループ」です。
- RDSのダッシュボードから左のタブにある「サブネットグループ」をクリックします。
- 「DBサブネットグループを作成」をクリックします。
- 名前タグに任意の名前を入力します。(例: yourappname-db-subnet-group)
- 説明に任意の説明を入力します。(例: yourappnameのDBサブネットグループ)
- VPCは先ほど作成したVPCを選択します。
- アベイラビリティーゾーンはap-northeast-1a, ap-northeast-1cを選択します。
- サブネットには先ほど作成したプライベートサブネットをそれぞれ1つずつ選択します。
- 「DBサブネットグループを作成」をクリックします。
サブネットグループで2つのプライベートサブネットを選択していますが、マルチAZ構成の設定にしなければシングルAZ構成として使用できます
2.2 RDSの作成
RDSはかなり設定が細かいのでスクショを多めに載せています
- RDSのダッシュボードから左のタブにある「データベース」をクリックします。
- 「データベースを作成」をクリックします。
- 「標準作成」をクリックします。
- エンジンの選択は自分がアプリで使用しているデータベースを選択します。
- バージョンは自分がアプリで使用しているデータベースのバージョンを選択します。
- テンプレートは「無料利用枠」を選択します。
- デプロイオプションは「シングルAZ配置」を選択します。
- DBインスタンス識別子に任意の名前を入力します。(例: yourappname-db)
- マスターユーザー名に任意の名前を入力します。(例: dbadmin)
- Secret Managerを使用してパスワードを管理するか、自分でパスワードを設定します。私はほかの環境変数もSecret Managerで管理する予定なのでSecret Managerを使用します
- DBインスタンスクラスは「db.t3.micro」を選択します。
- ストレージは「汎用 SSD(gp2)」を選択し、サイズは20GBにします。
- コンピューティングリソースは「EC2コンピューティングリソースに接続しない」を選択します。
この設定は「EC2インスタンス上で動くアプリ(Railsなど)からRDSへ簡易接続したい」場合に使う機能です。
ECS(Fargate)はEC2ではないため、この自動設定機能は対象外。 - ネットワークモードはIPv4を選択します。
- VPCは先ほど作成したVPCを選択します。
- サブネットグループは先ほど作成したRDSのサブネットグループを選択します。
- パブリックアクセスは「いいえ」を選択します。
- VPCセキュリティグループは以前作成したRDS用のセキュリティグループを選択します。
- アベイラビリティーゾーンは実際ににRDSを配置したいAZを選択します。
- 認証機関はデフォルトのままでOKです。
- データベースの認証は「パスワード認証」を選択します。
Railsアプリの場合、database.yml に ENV["DB_PASSWORD"] を渡す構成 が一般的です。
- モニタリングはデフォルトの「データベースインサイト- スタンダード」を選択します。
- performance Insightsを有効化し、保持期間は7日間を選択します。
- その他のモニタリング設定のログのエクスポートで「PostgreSQLログ」を選択します。
- 「データベースを作成」 をクリックします。
これでRDSの作成が完了しました。お疲れさまでした。
まとめ
今回はALB(Application Load Balancer)とRDS(Relational Database Service)の設定手順を紹介しました。
次回はECS(Fargate)の設定手順を紹介します。