0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】完成したポートフォリオをAWSにデプロイするpart4 (ALB,RDS)

Posted at

はじめに

こんにちは。アメリカ在住で独学エンジニアを目指している Taira です。
ついにMVPが完成し、あとはデプロイするだけ!というところまで来ました。
今回は、ALB(Application Load Balancer)とRDS(Relational Database Service)の設定手順を紹介します。

前提条件

  • 今回はReact × Rails × Docker × PostgreSQLの構成です
  • AWSアカウントを持っていること
  • ドメインを取得していること(私はお名前.comで取得しました)
  • ALBとRDSの基礎知識があること
  • 公開リージョンは東京リージョン(ap-northeast-1)
  • 著者は2025年10月11日に記事を書いています

現時点で想定している構成図は以下の通りです。なおこれから若干変更する可能性がありますのでご了承ください

infra.png

1. ALB(Application Load Balancer)の設定

ALBとは、Application Load Balancerの略で、アプリケーション層(レイヤー7)で動作するロードバランサーです。
ALBは、HTTPおよびHTTPSトラフィックの負荷分散に特化しており、複数のターゲット(EC2インスタンス、コンテナ、IPアドレスなど)にトラフィックを分散します。これがマルチAZ構成を実現するための重要な要素となります。
しかし、今回はシングルAZ構成なのにも関わらずなぜ使うのでしょうか。理由は以下の通りです

  1. HTTPS終端(ACM):アプリ側はHTTPでOK。
  2. 安定エンドポイント:ECSタスクのIP変動を吸収。

1.1 ALBの作成

では早速ALBを作成していきます。リージョンが東京リージョンであることを確認してください。

  1. EC2のダッシュボードから左のタブにある「ロードバランサー」をクリックします。
  2. 「ロードバランサーを作成」をクリックします。
  3. 「アプリケーションロードバランサー」を選択し、「作成」をクリックします。
  4. 名前タグに任意の名前を入力します。(例: yourappname-alb)
  5. スキームは「インターネット向け」を選択します。
  6. IPアドレスタイプは「ipv4」を選択します。
  7. VPCは先ほど作成した以前作成したVPCを選択します。
  8. アベイラビリティーゾーンは2つのAZを選択し、先ほど作成したパブリックサブネットを選択します。
  9. セキュリティグループは以前作成したALB用のセキュリティグループを選択します。
  10. リスナーはHTTP(80)を選択します。通信はhttpではなくhttps として通信したいのでhttps にリダイレクトするように以下の画像を参考に設定します
    スクリーンショット 2025-10-11 134543.png
    スクリーンショット 2025-10-11 134721.png
  11. 「リスナーを追加」をクリックしてHTTPS(443)を選択します。
  12. ターゲットグループへ転送を選択し、「新しいターゲットグループを作成」をクリックします。

ここでターゲットグループとはALBがリクエストを転送する先のグループのことです。
私の場合ALBからECS(Fargate)にリクエストを転送します。
では次のセクションでターゲットグループを作成していきます。

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

  1. ターゲットタイプは「IP」を選択します。
  2. 名前タグに任意の名前を入力します。(例: yourappname-target-group)
  3. プロトコルはHTTPします。少しややこしいのですが、ALBでHTTPS終端するので、ALBとECS(Fargate)間はHTTPで通信します。

図で表すとこんな感じです

ユーザー --HTTPS--> ALB(ここでhttpsが終端される) --HTTP--> ECS(Fargate)
  1. ポートはECS(Fargate)で待ち受けているポート番号を入力します。(例: rails なら3000)
  2. IPv4を選択します。
  3. vpcは以前作成したVPCを選択します。
  4. プロトコルバージョンはHTTP1を選択します。
  5. ヘルスチェックの設定はデフォルトのままでOKで、次をクリック
  6. ネットワークは以前作成したVPCを選択されていることを確認
  7. 「IP を指定してポートを定義する」がありますが、今回はFargateのタスクがまだないので、すでに10.0.0と書いてあるがそれは削除してください
  8. 「ターゲットグループを作成」をクリックします。

(追記)
もし、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の再設定

  1. 先ほどのALBの作成画面に戻り、先ほど作成したターゲットグループを443のリスナーに設定します。
    スクリーンショット 2025-10-11 140911.png
  2. セキュアリスナーの設定
  3. セキュリティポリシーはデフォルトのままでOK
  4. SSL証明書はACMで発行した証明書を選択します。
  5. クライアント証明書の処理はチェック不要です。
  6. 「ロードバランサーを作成」をクリックします。

これでALBの作成が完了しました。

1.4 Route53でドメインをALBに紐付ける

  1. Route53のダッシュボードから左のタブにある「ホストゾーン」をクリックします。
  2. 先ほど取得したドメインをクリックします。
  3. 「レコードを作成」をクリックします。
  4. レコード名にサブドメインを入力します。(例: api)
  5. レコードタイプはA - IPv4アドレスを選択します。
  6. エイリアスを有効にします。
  7. エンドポイントの種類は「Application and Classic Load Balancer」を選択します。
  8. リージョンは東京リージョンを選択します。
  9. ロードバランサーは先ほど作成したALBを選択します。
  10. 「レコードを作成」をクリックします。

ALBはIPv6にも対応しているので、必要に応じてAAAAレコードも同様に作成してください。

2. RDS(Relational Database Service)の設定

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

RDSを作成する前にRDSのサブネットグループを作成します。サブネットグループは、「RDSを配置できるサブネットの範囲をまとめたグループ」です。

  1. RDSのダッシュボードから左のタブにある「サブネットグループ」をクリックします。
  2. 「DBサブネットグループを作成」をクリックします。
  3. 名前タグに任意の名前を入力します。(例: yourappname-db-subnet-group)
  4. 説明に任意の説明を入力します。(例: yourappnameのDBサブネットグループ)
  5. VPCは先ほど作成したVPCを選択します。
  6. アベイラビリティーゾーンはap-northeast-1a, ap-northeast-1cを選択します。
  7. サブネットには先ほど作成したプライベートサブネットをそれぞれ1つずつ選択します。
  8. 「DBサブネットグループを作成」をクリックします。

サブネットグループで2つのプライベートサブネットを選択していますが、マルチAZ構成の設定にしなければシングルAZ構成として使用できます

2.2 RDSの作成

RDSはかなり設定が細かいのでスクショを多めに載せています

  1. RDSのダッシュボードから左のタブにある「データベース」をクリックします。
  2. 「データベースを作成」をクリックします。
  3. 「標準作成」をクリックします。
  4. エンジンの選択は自分がアプリで使用しているデータベースを選択します。
  5. バージョンは自分がアプリで使用しているデータベースのバージョンを選択します。
  6. テンプレートは「無料利用枠」を選択します。
  7. デプロイオプションは「シングルAZ配置」を選択します。
    画像9.png
  8. DBインスタンス識別子に任意の名前を入力します。(例: yourappname-db)
  9. マスターユーザー名に任意の名前を入力します。(例: dbadmin)
  10. Secret Managerを使用してパスワードを管理するか、自分でパスワードを設定します。私はほかの環境変数もSecret Managerで管理する予定なのでSecret Managerを使用します
    スクリーンショット 2025-10-11 154521.png
  11. DBインスタンスクラスは「db.t3.micro」を選択します。
  12. ストレージは「汎用 SSD(gp2)」を選択し、サイズは20GBにします。
    画像10.png
  13. コンピューティングリソースは「EC2コンピューティングリソースに接続しない」を選択します。
    この設定は「EC2インスタンス上で動くアプリ(Railsなど)からRDSへ簡易接続したい」場合に使う機能です。
    ECS(Fargate)はEC2ではないため、この自動設定機能は対象外。
  14. ネットワークモードはIPv4を選択します。
  15. VPCは先ほど作成したVPCを選択します。
  16. サブネットグループは先ほど作成したRDSのサブネットグループを選択します。
    画像11.png
  17. パブリックアクセスは「いいえ」を選択します。
  18. VPCセキュリティグループは以前作成したRDS用のセキュリティグループを選択します。
  19. アベイラビリティーゾーンは実際ににRDSを配置したいAZを選択します。
  20. 認証機関はデフォルトのままでOKです。
    画像12.png
  21. データベースの認証は「パスワード認証」を選択します。
    Railsアプリの場合、database.yml に ENV["DB_PASSWORD"] を渡す構成 が一般的です。
    画像13.png
  22. モニタリングはデフォルトの「データベースインサイト- スタンダード」を選択します。
  23. performance Insightsを有効化し、保持期間は7日間を選択します。
    画像14.png
  24. その他のモニタリング設定のログのエクスポートで「PostgreSQLログ」を選択します。
  25. 「データベースを作成」 をクリックします。

これでRDSの作成が完了しました。お疲れさまでした。

まとめ

今回はALB(Application Load Balancer)とRDS(Relational Database Service)の設定手順を紹介しました。
次回はECS(Fargate)の設定手順を紹介します。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?