【総まとめ】LaravelをAWSへ本番デプロイする全工程|VPC・EC2からS3・RDS連携まで
はじめに
AWSを触り始め、書籍や参考記事を見ながら進めても、なかなかうまく設定できない——。
そこで「まずはアーキテクチャや細かい構成はいったん置いておいて、最小限の構成で一からデプロイしてみたい💡」
そんな思いから、AWSの全体像を掴むために、自分の思考整理も兼ねてこの記事を残すことにしました。
概要
本記事では、Laravelアプリ(Todo機能付き)をAWS上のEC2にデプロイすることをゴールとし、デプロイに必要な設定を最小限に絞って、VPC構成から構築していきます。
※この記事は、重要なセクションごとに分けて記載しているので、必要な部分だけ読んでいただいても問題ありません。
✅ 実施内容(概要)
1.IAMユーザー作成
👇️
2.VPC、インターネットゲートウェイ、パブリックサブネット、セキュリティーグループ、ルートテーブルの構築
👇️
3.EC2(Amazon Linux 2023)に Nginx・PHP-FPM・PHP・Laravel を構成
👇️
4.DB ※データベースについては、別記事で以下の2パターンを扱います:
① EC2内にMySQLを構築するパターン
② RDSと連携するパターン
構成
使用技術
- AWS サービス
- IAM(ユーザー・権限管理)
- VPC(仮想ネットワーク)
- Internet Gateway(インターネット接続用)
- EC2(仮想サーバー)
- Amazon Linux 2023 AMI を使用
- EC2内で構築する環境(Web/APサーバー)
- Nginx 1.26.3(Webサーバー)
- PHP 8.2(実行環境)
- Laravel 12.0(Todo機能のCRUDを実装したアプリ)
- その他
- Git・Github
- Linux
- 環境
- OS:macOS Sequoia 15.4.1
リージョン
1.IAMの作成
ここでは、AWS操作の入り口となるIAMユーザーを作成します。
ルートユーザーでログイン後、、、
■ダッシュボード「IAM」→「ユーザー」→「ユーザー作成」
- ユーザー名:aws-user
ユーザーの詳細を指定後「グループを作成」で、ユーザーグループも作成しておきます。
権限は「PowerUserAccess」「IAMFullAccess」の2つの権限を設定。
- PowerUserAccess・・・AWS内リソースへの全アクセス許可
- IAMFullAccess・・・IAM関連の全アクセス許可
ルートユーザーを一度サインアウトし、以後作成したIAMユーザーで進めます。
2.VPC
インフラの大枠となるネットワーク環境を作成し、EC2などのサーバーを設置していきます。
■「VPC」→「お使いのVPC」→「VPCを作成」
- 名前タグ:aws-vpc
- IPv4 CIDR:10.0.0.0/16
2−1.サブネット
VPCの中にサブネットを作成。
サブネットとは、VPC内のIPアドレスを分割して使うための小さなネットワークです。
この中に後ほどのEC2などのリソースを配置します。
「VPC」「サブネット」「サブネットを作成」へ
- VPC:「aws-vpc」を選択 ※先ほど作成したVPC
- サブネット名:aws-subnet-public01
- アベイラビリティーゾーン:ap-northeast-1a
- IPv4 VPC CIDR ブロック:10.0.0.0/16
- IPv4 サブネット CIDR ブロック:10.0.0.0/20
2-2.インターネットゲートウェイ
インターネットゲートウェイを作成します。
インターネットゲートウェイは、外部のアクセスとVPC内のネットワークの通信を連携するものです。
■「VPC」→「インターネットゲートウェイ」→「インターネットゲートウェイを作成」
- 名前:aws-igw
作成後「aws-igw」の詳細画面へアクセスし、右上のアクションボタンから「VPCにアタッチ」を選択し、作成したVPCをアタッチします
これで、インターネットゲートウェイとVPCが紐付きました。
2−3.ルートテーブル
ルートテーブル作成
先ほどインターネットゲートウェイで、外部とVPCとのネットワークの通信の連携ができるようになりました。しかし、VPC内のサブネット同士のやり取りや、サブネットからのインターネットゲートウェイのやり取りが出来ていません。これを可能にするため「ルートテーブル」を作成して、VPCの外と通信できるように設定する
■「VPC」→「ルートテーブル」→「ルートテーブルを作成」
- 名前:aws-rt
- VPC:aws-vpcを選択
ルートテーブルとインターネットゲートウェイの連携
作成したルートテーブルに、どこへアクセス出来るか設定します。
デフォルトでは「local(10.0.0.0/16)」のルートが設定されているため、外部のインターネットとやり取りを出来るように、インターネットゲートウェイを追加。
ルートテーブルから、作成したルートテーブルの詳細画面へ移り、ルートタブから「ルートを編集」をクリック。
ルートを追加ボタンで、先程作成したインターネットゲートウェイを選択し追加します。
- 送信先:0.0.0.0/0
- ターゲット:インターネットゲートウェイ(aws-igw)
ルートテーブルとサブネットの連携
次に作成したルートテーブルに、どのサブネットが使うか設定します。
ルートテーブル画面から、作成したルートテーブルを選択し、「サブネットの関連付け」タブから「サブネットの関連付けを編集」より「aws-subnet-public01」を関連付けます
2-4.セキュリティグループ
EC2用のセキュリティグループを設定します。
セキュリティグループを適用することで、EC2へのアクセスを、特定のポート番号やIPアドレスのみに制限できます。
設定前の状況はすべてのアクセスが許可されているため、必要最小限に制御します。
※今回はあくまで練習環境のため簡易的な設定としていますが、本番環境では、より厳格で適切なセキュリティ設定を行ってください。
■「VPC」→「セキュリティグループ」→「セキュリティグループを作成」
セキュリティグループの設定内容
- セキュリティグループ名:aws-sg-public
- 説明:任意の説明
- VPC:aws-vpc
- インバウンドルール
タイプ | ポート | ソース |
---|---|---|
HTTP | 80 | 0.0.0.0/0 |
HTTPS | 443 | 0.0.0.0/0 |
SSH | 22 | 📌自身のグローバルIP/32 |
📌 自分のグローバルIPは以下のサイトなどで確認ください
3.EC2
3−1.キーペア作成
EC2へSSH接続するために必要なキーペア(鍵)を作成
■「EC2」「ネットワーク&セキュリティ(キーペア)」「キーペアを作成」
- 名前:aws-user-key
- キーペアのタイプ:RSA
- プライベートキーファイル形式:.pem
キーペア作成後「名前.pem」という秘密鍵のファイルがダウンロードされる。
3−2.EC2インスタンス作成
EC2を作成
■「EC2」→「インスタンス」→「インスタンスを起動」
EC2の設定内容は以下
- 名前:aws-ec2-public
- OS:Amazon Linux
- Amazon マシンイメージ:Amazon Linux 2023 AMI
- アーキテクチャ:64ビット(x86)
- インスタンスタイプ:t2.micro
- キーペア:aws-user-key(キーペアで作成したものを選択)
- ネットワークの設定(編集ボタンから設定)
- VPC:aws-vpc
- サブネット:aws-subnet-public01
- パブリックIPの自動割り当て:有効
- セキュリティグループ:「default」「aws-sg-public」
- ストレージ:初期値のまま
インスタンスを起動すると、EC2インスタンスが起動
3-3.EC2へSSH接続
EC2へSSH接続します。
SSH接続するには、キーペアで作成した秘密鍵ファイルを「~/.ssh/」へ配置し接続します
※公開鍵は、上記のEC2の設定で自動的に配置されているため設定は不要です
詳細は以下の記事を参考ください
3-4.Laravel
EC2にLaravelを構築します
詳細は以下の記事を参考ください
4.DB(MySQL)
DBの設定を行います
DB構成ついては以下のいずれかを参考ください
■EC2にDB(MySQL)を構築する方法
■RDBを使って構築する方法
DB設定後は、.envにDB情報を記入ください
vim .env
#DB_CONNECTION=
#DB_HOST=
#DB_PORT=
#DB_DATABASE=
#DB_USERNAME=
#DB_PASSWORD=
php artisan migrate
最後にLogが作成されていかもしれないので、削除してリセットしておきましょう
# storage/logs フォルダを空にする(Log初期化)
rm -f /var/www/プロジェクト名/storage/logs/*.log
アクセス
DB設定が完了したら「http://IPアドレス
」へアクセスします👇️
問題なく処理も行われているので正常に機能してますね!
【一覧表示】
【投稿処理】
まとめ
以上となります
初めてのAWSデプロイは長い道のりでした
何度かチャレンジしては挫折することもありましたが、それでも少しずつ知識を深めながら、こうして形にできたことが嬉しいです
この記事が、同じように学んでいる方の参考になれば幸いです
🔗 その他
■SSH化の設定
■S3へ画像をアップロードする方法
■リソースの削除
デプロイが完了した後は、使い終わったリソースを整理しておくことも大切です。
課金を防ぐための削除手順については、こちらの記事にまとめています👇
Discussion