生成AI:3.システムアーキテクチャー設計書(環境構築CloudFormation)

Note)本設計書及びプログラムの最新版はGitHubのRayoo-Nakano/InventoryAllocationに常時更新しています。

システムアーキテクチャ設計書

1. 概要

本設計書は、AWS上に構築されるシステムのアーキテクチャについて説明します。このシステムは、東京リージョンのVPC内にパブリックサブネットとプライベートサブネットを持ち、RDS(PostgreSQL)、API Gateway、Cognito User Poolsを活用して、セキュアかつスケーラブルなアプリケーションを提供します。

2. アーキテクチャ概要

このアプリケーションは、以下のAWSリソースを使用して構築されます:

graph TB
    subgraph VPC
        subgraph Public Subnet
            IGW[Internet Gateway]
            ALB[Application Load Balancer]
        end
        subgraph Private Subnet 1
            RDS1[RDS - PostgreSQL]
            Lambda1[Lambda Function]
        end
        subgraph Private Subnet 2
            RDS2[RDS - PostgreSQL]
            Lambda2[Lambda Function]
        end
    end
    IGW --> ALB
    ALB --> Lambda1
    ALB --> Lambda2
    Lambda1 --> RDS1
    Lambda2 --> RDS2
    Client((Client)) --> IGW
    APIGateway[API Gateway] --> ALB
    Cognito[Cognito User Pools] --> APIGateway

このアーキテクチャの説明:

  • VPCは、パブリックサブネットとプライベートサブネットで構成されています。
  • パブリックサブネットには、インターネットゲートウェイ(IGW)とアプリケーションロードバランサー(ALB)が配置されています。
  • プライベートサブネットには、RDSインスタンス(RDS1とRDS2)が配置されています。
  • Lambda関数(Lambda1とLambda2)は、図ではプライベートサブネット内に配置されていますが、実際にはAWS Lambdaサービスによって管理されており、VPC外部で実行されます。
  • クライアントからのリクエストは、インターネットゲートウェイ(IGW)を経由してアプリケーションロードバランサー(ALB)に到達します。
  • ALBは、トラフィックをLambda関数(Lambda1とLambda2)に分散します。
  • Lambda関数は、対応するRDSインスタンス(RDS1とRDS2)と通信し、必要なデータ処理を実行します。
  • 処理結果はLambda関数からALBを経由してクライアントに返されます。
  • API Gatewayは、アプリケーション用のAPIエンドポイントを提供します。
  • Cognito User Poolsは、ユーザー認証と認可を処理し、API Gatewayへのセキュアなアクセスを提供します。

4. コンポーネント

パラメータ (parameters.json)

環境構築時に以下のパラメータを使用します:

パラメータ名説明デフォルト値
EnvironmentName環境名dev
VpcCIDRVPCのCIDRブロック10.0.0.0/16
PublicSubnet1CIDRパブリックサブネット1のCIDRブロック10.0.1.0/24
PrivateSubnet1CIDRプライベートサブネット1のCIDRブロック10.0.2.0/24
PrivateSubnet2CIDRプライベートサブネット2のCIDRブロック(パラメータ)
DBMasterUsernameRDSマスターユーザー名mydbuser
DBMasterUserPasswordRDSマスターパスワードmydbpassword

4.1 VPC

コンポーネント名称説明設定値
VPCdev-VPCアプリケーション全体を含むバーチャルプライベートクラウドCIDR: 10.0.0.0/16
パブリックサブネットdev-Public-Subnet-1インターネットアクセス可能なサブネットCIDR: 10.0.1.0/24, AZ: ap-northeast-1a
プライベートサブネットdev-Private-Subnet-1インターネットアクセスができないサブネットCIDR: 10.0.2.0/24, AZ: ap-northeast-1a
プライベートサブネットdev-Private-Subnet-2インターネットアクセスができないサブネットCIDR: (パラメータ), AZ: ap-northeast-1c
インターネットゲートウェイdev-IGWVPCをインターネットに接続-
NATゲートウェイNatGateway1プライベートサブネットからインターネットへのアクセスを提供-

4.2 RDS (PostgreSQL)

コンポーネント名称説明設定値
RDS (PostgreSQL)RDSInstanceアプリケーションデータを保存インスタンスクラス: db.t3.micro, ストレージ: 20GB, マスターユーザー名: mydbuser, マスターパスワード: mydbpassword

4.3 API Gateway

コンポーネント名称説明設定値
API Gatewaydev-APIアプリケーション用のAPI Gatewayリソース: items, orders

4.4 Cognito User Pools

コンポーネント名称説明設定値
Cognito ユーザープールdev-UserPoolユーザー認証と認可を処理ユーザープール名: dev-UserPool

5. ロール関係

コンポーネントロール名称ロール
VPCVPCRoleアプリケーション全体のネットワーク環境を提供
パブリックサブネットPublicSubnetRoleインターネットアクセス可能なリソースを配置
プライベートサブネットPrivateSubnetRoleインターネットアクセスを制限し、セキュリティを強化
インターネットゲートウェイInternetGatewayRoleVPCとインターネット間の通信を可能にする
NATゲートウェイNATGatewayRoleプライベートサブネットからインターネットへのアクセスを提供
RDS (PostgreSQL)RDSInstanceRoleアプリケーションデータを保存
API GatewayAPIGatewayRoleアプリケーション用のAPIエンドポイントを提供
Cognito ユーザープールCognitoUserPoolRoleユーザー認証と認可を処理

6. データフロー

sequenceDiagram
    Client->>API Gateway: リクエスト
    API Gateway->>Cognito User Pools: 認証と認可
    Cognito User Pools-->>API Gateway: 認証と認可の結果
    API Gateway->>Lambda: リクエストの転送
    Lambda->>RDS: データの読み書き
    RDS-->>Lambda: データの返却
    Lambda-->>API Gateway: レスポンスの返却
    API Gateway-->>Client: レスポンス

このデータフロー図は、システム内のコンポーネント間のデータの流れを示しています。クライアントからのリクエストは、API Gateway、Cognito User Pools、Lambda、RDSを経由して処理され、最終的にクライアントにレスポンスが返されます。

7. スケーラビリティと保守性

  • API Gatewayは、トラフィックに応じて自動的にスケールアップまたはスケールダウンします。
  • RDSは、必要に応じて手動でスケーリングできます。
  • Lambda関数は、トラフィックに応じて自動的にスケールアップまたはスケールダウンします。
  • 各コンポーネントは独立しており、必要に応じて個別に更新または変更できます。

8. セキュリティ

  • RDSはプライベートサブネットに配置され、インターネットから直接アクセスできません。
  • API GatewayとCognito User Poolsは、APIエンドポイントへのセキュアなアクセスを提供します。
  • Lambda関数は、VPC外部で実行されるため、VPC内のリソースへのアクセスを制限できます。

9. 結論

このアーキテクチャ設計は、スケーラビリティ、保守性、セキュリティを考慮しながら、AWS上でモダンなアプリケーションを構築するための基盤を提供します。各コンポーネントは、それぞれの役割を果たし、全体としてシームレスに連携します。Lambda関数の追加により、アプリケーションのロジックを柔軟に実装し、スケーラビリティを向上させることができます。