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 再まとめ。CloudFront → ALB → Cognito 認証 → SPA / API を実現する AWS 構成(Vue.js × Spring Boot)

Posted at

image.png

はじめに

SPA(Vue.js)を AWS で公開する場合、

  • CloudFront + S3
  • ALB + Cognito
  • ECS(Fargate)による API 実行

どう組み合わせるか は悩みどころです。

本記事では、

  • Route53 → CloudFront
  • CloudFront → ALB
  • ALB で Cognito 認証を実施
  • ALB のルールで SPA のファイルパスを制御
  • SPA / API ともに認証必須

という構成で、
ログインしないと画面そのものにアクセスできない Web システムを構築した事例を紹介します。

全体構成

構成の考え方

  • エントリポイントは CloudFront
  • 認証・ルーティングは ALB に集約
  • S3 は非公開(ALB 経由のみ)
  • アプリ側に認証ロジックを持たせない

システム構成図(イメージ)

[ User ]
   |
   | https://dev.test.cm
   v
[ Route53 ]
   |
   v
[ CloudFront ]
   |
   v
[ ALB ]
   |  (Cognito 認証)
   |
   +--> [ S3 (Vue.js) ]
   |
   +--> [ ECS Fargate (API) ]
            |
            v
      [ Aurora PostgreSQL ]

CloudFront は配信・キャッシュに専念し、
認証と制御は ALB 側で行う構成です。

処理の流れ

① ユーザーアクセス

  1. ユーザーが https://dev.test.cm にアクセス
  2. Route53 → CloudFront へルーティング
  3. CloudFront のオリジンとして ALB に転送

② Cognito マネージドログイン

  1. ALB のリスナールールで Cognito 認証をチェック
  2. 未認証の場合
    → Cognito のマネージドログイン画面へリダイレクト
  3. 認証成功後、ALB にリダイレクト

③ SPA(Vue.js)の配信

  1. 認証済みユーザーのみ
  2. ALB → S3 から index.html を取得
  3. Vue.js SPA が表示される

SPA 向けパス制御

SPA のルーティングに対応するため、

  • /*

などのアクセスは
ALB のルールで /index.html に変換しています。

④ APIアクセス

  1. Vue.js から API を呼び出し
  2. CloudFront → ALB
  3. Cognito 認証を確認
  4. ALB → ECS Fargate(Spring Boot API)
  5. Aurora PostgreSQL へアクセス

⑤ バッチ処理

  1. EventBridge のスケジュールで起動
  2. ECS Fargate のバッチタスクを実行
  3. Aurora PostgreSQL を操作
  4. 処理完了後、自動停止

ざっくりの構築手順

① Route53 / SSL

  • Route53 でドメイン作成(例:dev.test.cm)
  • ACM で SSL 証明書発行
  • CloudFront に関連付け

② CloudFront

  • オリジン:ALB
  • HTTPS 強制
  • キャッシュポリシー設定

③ Cognito

  • User Pool 作成
  • マネージドログイン有効化
  • コールバック URL に ALB の URL を設定

④ ALB

  • HTTPS リスナー作成
  • リスナールール
    • Cognito 認証
    • SPA パスを /index.html に変換
    • 転送先
      • S3(Vue.js)
      • ECS(API)

⑤ S3(Vue.js)

  • Vue.js をビルド
  • S3 に配置
  • バケットは非公開
  • 静的 Web ホスティングは使用しない

⑥ ECS / ECR

  • Spring Boot(API / バッチ)を Docker 化
  • ECR に push
  • ECS Fargate サービス / タスク作成

⑦ DB

  • Aurora PostgreSQL 作成
  • ECS からの接続を許可(Security Group)

ポイント

① CloudFront × ALB の役割分離

役割 サービス
CDN / キャッシュ CloudFront
認証 / ルーティング ALB
実行 ECS(Fargate)
静的ファイル S3
DB Aurora PostgreSQL

② SPA を完全に認証必須にできる

  • ログイン前に画面を表示しない
  • URL 直叩き防止
  • 社内システム・管理画面向け構成

③ 認証ロジックをアプリに持たせない

  • 認証は ALB + Cognito に集約
  • Spring Boot は業務ロジックに専念
  • 実装と保守がシンプル

④ SPA のパス制御を ALB で完結

  • /users/1/index.html
  • フロント実装を汚さない
  • CloudFront Functions 不要

おわりに

本構成により、

  • CloudFront のパフォーマンス
  • ALB + Cognito の強固な認証
  • SPA に最適なパス制御
  • ECS Fargate による運用負荷削減

をすべて両立できました。

SPA を
「公開サイト」ではなく「業務システム」 として運用したい場合、この構成は非常に有効だと感じています。


参考(感謝)

  • AIに聞きながら
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?