はじめに
本記事の目的
本記事は、AWS上での3層アーキテクチャ(Web層・アプリ層・DB層)をわかりやすく解説します。実務でよく使われる設計の考え方や、代表的なAWSサービスの対応づけ、設計時の注意点を順を追って説明します。例えば、ショッピングサイトや社内業務アプリを想定して解説します。
読者対象
- クラウド設計の基礎を学びたい方
- システム構成をAWSで検討しているエンジニアやリード
- 既存システムを分割・再設計したい方
本記事で得られること
- 3層の基本概念が理解できます。
- AWSサービスをどう当てはめるかが分かります。
- スケーラビリティ、可用性、セキュリティを意識した設計ポイントがわかります。
進め方
第2章で概念を説明し、第3章で分割の理由とメリットを述べます。第4章で典型的なAWS構成パターンを具体例で示します。各章は実務で使える視点を重視して書きます。
AWSにおける3層アーキテクチャとは何か
概要
3層アーキテクチャは、システムを「見える部分」「処理部分」「保存部分」の三つに分ける設計です。具体的にはWeb層(プレゼンテーション層)、アプリ層(ビジネスロジック層)、DB層(データ層)に分けます。責任を分けることで見通しが良くなり、運用や拡張が楽になります。
各層の役割
- Web層:ユーザーからのリクエストを受け取り、画面やAPIのレスポンスを返します。例:静的ページはS3+CloudFrontで配信します。
- アプリ層:業務ロジックを実行し、DBや外部サービスと連携します。例:EC2やECS/Fargate、Lambdaで処理します。
- DB層:データを永続化し、読み書きを提供します。例:RDSやAuroraで関係データ、DynamoDBでキー値データを扱います。
AWSでの代表的な対応サービス
- Web層:CloudFront、ALB、S3、API Gateway
- アプリ層:EC2、ECS/Fargate、Lambda
- DB層:RDS/Aurora、DynamoDB、S3(ログやバックアップ)
リクエストの流れ(簡単な例)
- ユーザーがブラウザで商品を検索します。
- CloudFrontやALBが要求を受け、Web層で初期処理します。
- アプリ層が検索ロジックを実行し、DB層に問い合わせます。
- DBから結果を受け取り、Web層からユーザーに返します。
3層に分ける理由とメリット
スケーラビリティと可用性
3層に分けると、層ごとに異なる拡張方法を取れます。例えば、Web/プレゼンテーション層は負荷分散(ALBなど)と自動スケーリングで横に増やしやすく、処理負荷が急増しても素早く対応できます。アプリケーション層はコンテナやオートスケールで調整しやすく、データベースはリードレプリカやマルチAZ配置で読み取り性能と冗長性を確保します。結果としてサービス停止のリスクが下がり、安定性が向上します。
セキュリティの向上
層ごとにネットワークを分離します。一般公開が必要なWeb層はパブリックサブネット、内部処理を行うアプリ層はプライベートサブネット、機密データを持つDB層はさらに厳しく制限したサブネットへ置きます。通信は必要最小限に制限し、セキュリティグループやファイアウォールで内部間のみの接続を許可する設計ができます。外部からの直接アクセスを防げるため、安全性が高まります。
管理と保守の容易さ
各層が独立しているため、UIの変更、ビジネスロジックの改修、DBスキーマ変更を別々に扱えます。テストやデプロイも層単位で行えるため、影響範囲を小さくできます。また、各層に最適なインスタンスやミドルウェアを選べるので、性能を引き出しやすくなります。
コストと運用の最適化
負荷に応じて層ごとにスケールすることで、無駄なリソースを削減できます。例えばアクセスが多い時間帯だけWeb層を増やし、DBは必要最小限に保つといった運用が可能です。また、監視や障害対応を層毎に設定することでトラブル対応の効率が上がります。
具体例(短く)
- Web層:ALB+Auto Scalingで負荷分散
- アプリ層:コンテナ化してスケール
- DB層:RDSのリードレプリカ/マルチAZで可用性向上
以上が、3層に分ける主な理由と得られるメリットです。
典型的なAWS 3層構成パターン
概要
ここでは、LAMPベースの代表的な構成(ALB + EC2 + RDS/Aurora)をわかりやすく説明します。役割を分けて可用性と運用性を高めるのが狙いです。
プレゼンテーション層(ALB)
Application Load Balancer(ALB)がHTTP/HTTPSリクエストを受け、複数のEC2インスタンスに振り分けます。TLS終端で証明書を管理し、ヘルスチェックで異常ノードを自動的に除外します。静的ファイルはS3+CloudFrontに置くと負荷を下げられます。
アプリケーション層(EC2 + Auto Scaling)
EC2上にWebサーバとPHPなどの実行環境を構築します。Auto Scalingで負荷に応じてインスタンスを増減し、AMIや起動スクリプトで同じ環境を再現します。セッションはElastiCacheやデータベースで共有し、状態を持たない設計にするとスケールしやすくなります。
データ層(RDS/Aurora)
Amazon Aurora MySQLやRDS MySQLを使用します。マルチAZ配置やリードレプリカで可用性と読み取り性能を確保し、定期バックアップとポイントインタイムリカバリでデータ保護を行います。
運用上のポイント
セキュリティはセキュリティグループとIAMロールで制御します。監視はCloudWatch、ログはCloudWatch LogsやS3に集約します。継続的デプロイはCodeDeployやCI/CDで自動化すると運用が楽になります。












