COLUMN
AWSで3層WebアーキテクチャのLAMP環境を構築をしてみた
「AWSでWebアプリケーションを構築するなら、高負荷に強く、安心できる基盤を作りたいですよね。このコラムでは、定番のLAMPスタックをベースに、AWSの主要サービスを使って、スケーラブルな3層Webアーキテクチャを実現する手順をご紹介します。
1. 概要
WebアプリケーションをAWSで構築する際、スケーラビリティや可用性の確保は非常に重要です。このコラムでは、AWSの主要サービスであるALB (Application Load Balancer)、EC2 (Amazon Elastic Compute Cloud)、そしてMySQL (Amazon Aurora MySQL) を活用し、Web 3層アーキテクチャを用いたLAMP構成を実現する方法を解説します。
2. Web 3層アーキテクチャの基礎と各コンポーネントの役割
Webアプリケーションの設計において、「3層アーキテクチャ」は最も一般的で効果的な設計パターンの一つです。これは、アプリケーションの機能を論理的かつ物理的に3つの異なる層に分離することで、スケーラビリティ、可用性、セキュリティ、そして開発・運用の効率性を向上させることを目的としています。
2-1. Web 3層アーキテクチャの基本
Web 3層アーキテクチャは、以下の3つの独立した層で構成されます。
1. プレゼンテーション層 (Web層)
- 役割: ユーザーと直接やり取りを行う部分です。Webブラウザからのリクエストを受け付け、ユーザーインターフェース(UI)を提供します。主な機能は、リクエストのルーティング、静的コンテンツの配信、SSL/TLS終端などです。
- 特徴: ユーザーに近い場所で動作し、高速な応答が求められます。
- 今回の構成でのコンポーネント: ALB (Application Load Balancer)がこの層の主要な役割を担います。
2. アプリケーション層 (ビジネスロジック層)
- 役割: ユーザーからのリクエストに基づいて、実際のビジネスロジックを処理する部分です。プレゼンテーション層から受け取ったリクエストを解析し、必要に応じてデータ層と連携して処理を実行します。
- 特徴: サーバーサイドのコードが動作し、動的なコンテンツ生成や複雑な計算を行います。複数のインスタンスにスケールアウトできる設計が重要です。
- 今回の構成でのコンポーネント: EC2インスタンス(WebサーバーおよびPHPなどのアプリケーションランタイムが動作)がこの層の中核となります。
3. データ層 (データベース層)
- 役割: アプリケーションが使用するすべてのデータを永続的に保存・管理する部分です。アプリケーション層からの要求に応じて、データの読み書きを行います。
- 特徴: データの整合性と安全性が最重要視されます。高可用性やバックアップ、リカバリ機能が不可欠です。
- 今回の構成でのコンポーネント: Amazon Aurora MySQL がこの層の主要な役割を担います。
3. AWSによるALB、EC2、MySQL 3層構成の全体像
- Application Load Balancer (ALB)
ALBは、ユーザーからのすべてのHTTP/HTTPSリクエストの入り口となります。複数のEC2インスタンスにトラフィックを効率的に分散することで、高い可用性とスケーラビリティを実現します。 - Amazon Elastic Compute Cloud (EC2)
EC2は、Webアプリケーションの動的な部分を実行するための仮想サーバーです。このEC2インスタンス上に、ApacheWebサーバーソフトウェア、そしてPHPなどのアプリケーションランタイムをインストールします。 - Amazon Aurora MySQL(Aurora MySQL)
データ層に位置し、アプリケーションのデータを格納するリレーショナルデータベースです。 - NatGateway (NATゲートウェイ)
プライベートサブネット内のEC2インスタンスが、インターネット(例えば、ソフトウェアのアップデート、外部APIへのアクセス)に安全にアクセスできるようにするためのサービスです。 - AWS System Manager(System Manager)
EC2インスタンスの管理(パッチ適用、コマンド実行、セッションマネージャーによるSSHなしの安全な接続など)に利用します。本サービスを利用することで踏み台サーバーを用意せずにプライベートエリアのリソースにアクセスが可能になります。
4. AWSよる3層WebアーキテクチャのLAMP構築の構成手順
4-1. 前提条件
- AWSアカウントを所有していること
- AWSマネジメントコンソールへのアクセスが可能であること
- VPCに関する基本的な知識(パブリックサブネット、プライベートサブネット、NAT ゲートウェイ、ルートテーブル)
4-2. 手順の概要
1. VPCの設計と作成
- VPC関連
今回のケースでは VPC と他のネットワークリソースをまとめて作成します。 - Natゲートウェイ
2. セキュリティグループの作成
- ALB用セキュリティグループ
- Webサーバー用セキュリティグループ (EC2)
- Aurora用セキュリティグループ
3. EC2インスタンスの作成
4. Aurora MySQL DBクラスターの作成
5. ALB (Application Load Balancer) の作成
6. EC2インスタンスへの接続とLAMP環境の構築
- ソフトウェアアップデート
- Apacheのインストールと設定
- PHPのインストールと設定
- MySQLクライアントのインストール
7. 接続確認
- Aurora MySQLへの接続確認
- ウェブコンテンツの配置と動作確認
4-3. 詳細手順
4-3-1. VPCの作成
1. AWSマネジメントコンソールにログインし、「VPC」サービスへ移動します。
2. 「VPCダッシュボード」から「VPCを作成」を選択します。
3. 今回はウィザードを使用するのが手軽です。「VPC など」を選択します。
4. 以下の設定を行います。
- VPCの作成方法: VPC など
- 名前タグの自動生成: 任意の名前 (例: test-web)
- IPv4 CIDR ブロック: 任意のプライベートIPアドレス範囲 (例: 10.0.0.0/16)
- アベイラビリティーゾーン (AZ): 2つ以上選択 (ALBとAuroraの冗長性のために重要)
- パブリックサブネットの数: 選択したAZの数と同数 (例: 2)
- プライベートサブネットの数: 選択したAZの数と同数 (例: 4)
- NAT ゲートウェイ: 今回は個別に作成するためなし
- VPCエンドポイント: 公開は利用しないためなし
- DNS ホスト名: 有効
5. Natゲートウェイの作成。以下の設定を行います。
- 名前:任意の名前 (例: test-web-natg-a)
- サブネット:AZ-aのPublicSubnetを指定(例: test-web-public1-ap-notheast-1a)
- 接続タイプ:パブリック
- Elastic IP 割り当てID:Elastic IPを割り当て
作成したVPCのリソースマップは以下のようになります。
4-3-2. セキュリティグループの作成
a. ALB用セキュリティグループ
インターネットからのHTTP/(HTTPS)アクセスを許可します。
1. AWSマネジメントコンソールで「EC2」サービスへ移動し、左側のナビゲーションペインから「セキュリティグループ」を選択します。
2. 「セキュリティグループを作成」をクリックします。
3. 以下の情報を入力し、作成します。
- セキュリティグループ名: 例:test-web-alb-sg
- 説明: 例:Security group for ALB
- VPC: 先ほど作成したVPCを選択
-
インバウンドルール:
- タイプ: HTTP | ソース: マイIP (今回の手順では検証用のためIP制限を実施しています)
- タイプ: HTTPS | ソース: マイIP (公開の手順では省略していますが、HTTPSの接続が必要であれば指定してください)
- アウトバウンドルール: デフォルト (すべてのトラフィックを許可)
b. Webサーバー用セキュリティグループ (EC2)
ALBからのHTTPトラフィックを許可します。
1. 「セキュリティグループを作成」をクリックします。
2. 以下の情報を入力し、作成します。
- セキュリティグループ名: 例:test-web-ec2-sg
- 説明: 例:Security group for web server
- VPC: 先ほど作成したVPCを選択
-
インバウンドルール:
- タイプ: HTTP | ソース: カスタム | 検索ボックスに test-web-alb-sg と入力し、ALB用セキュリティグループを選択 (ALBからのアクセスのみ許可)
- アウトバウンドルール: デフォルト (すべてのトラフィックを許可)
c. Aurora用セキュリティグループ
AuroraクラスターへのMySQLアクセスを、Webサーバーのセキュリティグループからのみ許可します。
1. AWSマネジメントコンソールで「EC2」サービスへ移動し、左側のナビゲーションペインから「セキュリティグループ」を選択します。(RDSサービスからでも作成可能です)
2. 「セキュリティグループを作成」をクリックします。
3. 以下の情報を入力し、作成します。
- セキュリティグループ名: 例:test-web-rds-sg
- 説明: 例:Security group for Aurora
- VPC: 先ほど作成したVPCを選択
-
インバウンドルール:
- タイプ: MySQL/Aurora | ソース: カスタム | 検索ボックスに test-web-ec2-sg と入力し、Webサーバー用セキュリティグループを選択
4-3-3. EC2インスタンスの作成
このEC2インスタンスは、ALBのターゲットグループに登録されるターゲットです。
1. AWSマネジメントコンソールで「EC2」サービスへ移動します。
2. 左側のナビゲーションペインから「インスタンス」を選択し、「インスタンスを起動」をクリックします。
3. 以下の設定を選択・入力します。
- AMI: Amazon Linux 2023 AMI を選択します。
- インスタンスタイプ: 例:t2.micro (検証用として低スペックのインスタンスを使用)
- キーペア: 既存のキーペアを選択するか、新しいキーペアを作成します。
-
ネットワーク設定:
- VPC: 先ほど作成したVPCを選択
- サブネット: プライベートサブネットtest-subnet-private1-ap-northeast-1a (構成図の通りApplication Subnet側に配置します)
- パブリック IP の自動割り当て: 無効 (プライベートサブネットなのでパブリックIPは不要です)
- ファイアウォール (セキュリティグループ): 「既存のセキュリティグループを選択」を選択し、先ほど作成した test-web-ec2-sg を選択
- ストレージ: デフォルト (8GB) で十分ですが、必要に応じて調整
-
高度な詳細 (必要であれば):
- IAM インスタンスプロフィール: SSM Session Managerを使用するため、AmazonSSMManagedInstanceCore ポリシーをアタッチしたロールが必要です。
4. 「インスタンスを起動」をクリックします。
- インスタンスの起動には数分かかります。ステータスが「実行中」になるまで待ちます。
5. 左側のナビゲーションペインから「インスタンス」を選択し、作成が完了したインスタンスを選択し「接続」をクリックしセッションマネージャーから接続できることを確認してください。
4-3-4. Aurora MySQL DBクラスターの作成
Auroraは「DBクラスター」と「DBインスタンス」の2階層構造になります。クラスターがストレージ層を管理し、インスタンスがコンピュート層(リーダー/ライター)を提供します。
今回は事前に決められたサブネットに配置するため、データベース作成の前にサブネットグループを作成します。
1. AWSマネジメントコンソールで「RDS」サービスへ移動します。
2. 左側のナビゲーションペインから「サブネットグループ」を選択し、「サブネットグループの作成」をクリックします。
3. 以下の設定を選択・入力します。
- 名前: 例:test-web-db-subnetg
- 説明: 任意の説明
- VPC: 先ほど作成したVPCを選択
- アベイラビリティーゾーン: 例:ap-northeast-1a,ap-northeast-1c
- サブネット: test-subnet-private3-ap-northeast-1a,test-subnet-private3-ap-northeast-1c (構成図の通りDatabase Subnet側に配置します)
4. 「作成」をクリックします。
5. 左側のナビゲーションペインから「データベース」を選択し、「データベースの作成」をクリックします。
6. 以下の設定を選択・入力します。
- データベース作成方法の選択: 標準作成
-
エンジンのオプション:
- エンジンのタイプ: Amazon Aurora
- エディション: Amazon Aurora MySQL 互換エディション
- バージョン: Aurora MySQL 3.xx (MySQL 8.0互換)を選択。 注意: db.t3.micro は Aurora MySQL 3.xx では選択できないことが多いです。最小は db.t3.medium になる可能性があります。テスト目的でコストを抑えたい場合は Aurora MySQL 2.xx (MySQL 5.7互換) を検討してください。
- テンプレート: 開発テスト (今回は検証用のためテスト用で作成します)
- DBクラスター識別子: 例:test-web-db
- マスターユーザー名: admin (任意のユーザー名)
- 認証情報管理: 例:セルフマネージド
- クラスターストレージ設定: 例:Auroraスタンダード
-
インスタンス設定:
-
DBインスタンスクラス:
- タイプ: バースト可能クラス
- サイズ: db.t3.medium (選択可能な最小のインスタンスクラス)
- マルチ AZ 配置: Auroraレプリカを作成しない (テスト用)
-
DBインスタンスクラス:
-
接続:
- コンピューティングリソース: EC2コンピューティングリソースに接続しない (既存のセキュリティグループを使用するため)
- VPC: 先ほど作成したVPCを選択
- DBサブネットグループ: 先ほど作成したサブネットグループを選択
- パブリックアクセス可能: なし
- VPCセキュリティグループ: 先ほど作成した test-web-rds-sg を選択
- アベイラビリティーゾーン: ap-northeast-1a を選択
-
モニタリング
- 拡張モニタリング: 検証のため今回は拡張モニタリングは無効化しています。
-
追加設定:
- 初期データベース名: 今回は作成しませんが事前に作成することが可能です。
- その他の設定はデフォルトで問題ありませんが、必要に応じて調整してください。
7. 「データベースを作成」をクリックします。
- クラスターとインスタンスの作成には数分かかります。ステータスが「利用可能」になるまで待ちます。
- 認証情報は、データベースを作成した後に確認できます。データベース作成バナーの [認証情報の詳細を表示] をクリックすると、マスターユーザー名、マスターパスワード、エンドポイントが表示されますので控えておいてください。
4-3-5. Application Load Balancer (ALB) の作成
1. AWSマネジメントコンソールで「EC2」サービスへ移動します。
2. 左側のナビゲーションペインから「ロードバランサー」を選択し、「ロードバランサーの作成」をクリックします。
3. 「Application Load Balancer」を選択し、「作成」をクリックします。
4. 以下の設定を行います。
- ロードバランサー名: 例:test-web-alb
- スキーム: インターネット向け
- IP アドレスの種類: IPv4
- VPC: 先ほど作成したVPCを選択
- アベイラビリティーゾーンとサブネット:
先ほど作成したパブリックサブネットを2つ以上選択します (ALBは冗長化のため複数のAZに配置されます) - セキュリティグループ: 先ほど作成した test-web-alb-sg を選択
-
リスナーとルーティング:
- プロトコル:ポート: HTTP:80
- デフォルトのアクション: 「ターゲットグループを作成」を選択します。
今回は省略していますが、HTTPS向けの設定をここで追加することが可能です。HTTPSのリスナー設定を追加する場合は、SSL証明書が必要になりますがまとめてAWS Certificate Manager(ACM)などの登録が可能です。
5. 新しいターゲットグループの作成:
- ターゲットタイプ: インスタンス
- ターゲットグループ名: 例:test-web-alb-targetg
- プロトコル:ポート: HTTP:80 (EC2上のApacheのポート)
- ヘルスチェック: HTTP 80
- IPアドレスタイプ: IPv4
- VPC: 先ほど作成したVPCを選択
-
「次へ」をクリックし、ターゲットを登録します。
- 先ほど作成したEC2インスタンス (プライベートIPアドレスが表示されるはずです) を選択し、「保留中として以下を含める」をクリックします。
- 「ターゲットグループを作成」をクリックします。
6. ロードバランサーの作成画面に戻り、作成したターゲットグループをデフォルトのアクションとして選択します。
7. 「ロードバランサーの作成」をクリックします。
- ロードバランサーのプロビジョニングには数分かかります。ステータスが「active」になるまで待ちます。
- ALBの詳細画面で「DNS名」を確認し、控えておきます。これがLAMPアプリケーションへのアクセスURLになります。
4-3-6. EC2インスタンスへの接続とLAMP環境の構築
プライベートサブネットのEC2インスタンスにSession Managerで接続します。
1. Session ManagerによるEC2への接続
- EC2インスタンスにSSMエージェントがインストールされており、AmazonSSMManagedInstanceCore ポリシーが付与されたIAMロールがアタッチされていることを確認します。
- AWSマネジメントコンソールで「Systems Manager」サービスへ移動し、「Session Manager」->「セッションを開始」からインスタンスに接続します。
2. ソフトウェアのアップデート
最新のイメージの場合は基本最新です。
bash #シェルの起動
sudo dnf update -y #アップデート
3. Apacheのインストールと起動
sudo dnf install -y httpd #Apacheのインストール
sudo systemctl start httpd #Apacheの起動
sudo systemctl enable httpd #Apacheの自動起動設定
4. PHPのインストールと設定
sudo dnf install -y php php-mysqlnd php-gd php-xml php-mbstring #PHPのインストール
sudo systemctl restart httpd #追加された設定ファイルを反映させるためApacheを再起動
5. MySQLクライアントのインストール
sudo dnf install -y mariadb105 #mariadbにmysqlクライアントが含まれているためmariadbをインストール
6. 接続確認
a. Aurora MySQLに接続
mysql -h [Aurora Endpoint] -u admin -p #Aurora mysqlに接続
Enter password: #パスワード入力
Welcome to the MariaDB monitor. Commands end with ; or \\g.
Your MySQL connection id is 112
Server version: 8.0.39 8bc99e28
b. ウェブコンテンツの配置と動作確認
echo "Hello World" |sudo tee /var/www/html/index.html #ALBヘルスチェック用のコンテンツ配置
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/phpcheck.php #Apache,PHP接続確認用にコンテンツ配置
ブラウザからALBのDNS(test-web-alb-xxxxxxxx.ap-northeast-1.elb.amazonaws.com)に接続して下記ページが表示されれば成功です。
ブラウザからALBのDNS(test-web-alb-xxxxxxxx.ap-northeast-1.elb.amazonaws.com)/phpcheck.phpに接続して下記ページが表示されれば成功です。確認後、念のため先ほど作成phpcheck.phpは削除するようにしてください。
上記まで確認できれば基本的なLAMP構成の初期セットアップは完了です。
5. 最後に
ALB (Application Load Balancer)、EC2 (Amazon Elastic Compute Cloud)、そして高性能なAurora MySQL (Amazon Aurora MySQL) を利用して、AWS上でスケーラブルなWeb 3層アーキテクチャを構築する方法を解説しました。
- プレゼンテーション層をALBで、アプリケーション層をEC2インスタンス群で、そしてデータ層をAurora MySQLで分離することで、それぞれの層が独立して機能し、高いスケーラビリティ、可用性、セキュリティを簡易的ではありますが実現できました。
- AWSのマネージドサービスを活用することで、従来のLAMP環境で必要だったインフラ管理の多くの手間が軽減され、よりアプリケーション開発に集中できるようになります。
今回は基本的な解説のみですが、次のステップとして以下のような取り組みを検討してみてください。
- Amazon CloudFrontを導入して静的コンテンツの配信を高速化し、グローバルなユーザーエクスペリエンス向上を目指す。
- AWS WAF (Web Application Firewall) をALBやCloudFrontと連携させ、SQLインジェクションやクロスサイトスクリプティングなどのWeb攻撃からアプリケーションを保護する。
- AWS Systems Manager Parameter Store や AWS Secrets Manager を利用して、データベース接続情報などの機密情報をさらに安全に管理する。
無料ダウンロード
自社のクラウド導入に必要な知識、ポイントを
この1冊に総まとめ!
あなたはクラウド化の
何の情報を知りたいですか?
- そもそも自社は本当にクラウド化すべき?オンプレとクラウドの違いは?
- 【AWS・Azure・Google Cloud】
どれが自社に最もマッチするの? - 情シス担当者の負荷を減らしてコストを軽減するクラウド化のポイントは?
- 自社のクラウド導入を実現するまでの具体的な流れ・検討する順番は?
初めての自社クラウド導入、
わからないことが多く困ってしまいますよね。
NTT東日本では
そんなあなたにクラウド導入に必要な情報を
1冊の冊子にまとめました!
クラウド化のポイントを知らずに導入を進めると、以下のような事になってしまうことも・・・
- システムインフラの維持にかかるトータルコストがあまり変わらない。。
- 情シス担当者の負担が減らない。。
- セキュリティ性・速度など、クラウド期待する効果を十分に享受できない。。
理想的なクラウド環境を実現するためにも、
最低限の4つのポイントを
抑えておきたいところです。
-
そもそも”クラウド化”とは?
その本質的なメリット・デメリット - 自社にとって
最適なクラウド環境構築のポイント - コストを抑えるための
具体的なコツ - 既存環境からスムーズにクラウド化を
実現するためのロードマップ
など、この1冊だけで自社のクラウド化のポイントが簡単に理解できます。
またNTT東日本でクラウド化を実現し
問題を解決した事例や、
導入サポートサービスも掲載しているので、
ぜひダウンロードして読んでみてください。
面倒でお困りのあなたへ
クラウドのご相談できます!
無料オンライン相談窓口
NTT東日本なら貴社のクラウド導入設計から
ネットワーク環境構築・セキュリティ・運用まで
”ワンストップ支援”が可能です!
NTT東日本が選ばれる5つの理由
- クラウド導入を
0からワンストップでサポート可能! - 全体最適におけるコスト効率・業務効率の改善を
中立的にご提案 - クラウド環境に問題がないか、
第3者目線でチェック
してもらいたい - 安心の24時間・365日の対応・保守
- NTT東日本が保有する豊富なサービスの組み合わせで
”課題解決”と”コスト軽減”を両立
特に以下に当てはまる方はお気軽に
ご相談ください。
- さまざまな種類やクラウド提供事業者があってどれが自社に適切かわからない
- オンプレミスのままがよいのか、クラウド移行すべきなのか、迷っている
- オンプレミスとクラウド移行した際のコスト比較を行いたい
- AWSとAzure、どちらのクラウドが自社に適切かわからない
- クラウド環境に問題がないか、第3者目線でチェックしてもらいたい
- クラウド利用中、ネットワークの速度が遅くて業務に支障がでている
クラウドを熟知するプロが、クラウド導入におけるお客さまのLAN 環境や接続ネットワーク、
クラウドサービスまでトータルにお客さまのお悩みや課題の解決をサポートします。
RECOMMEND
その他のコラム
相談無料!プロが中立的にアドバイスいたします
クラウド・AWS・Azureでお困りの方はお気軽にご相談ください。