2
0

初めての AWS で Laravel API をデプロイしてみた! - 第 6 弾:Webレイヤ冗長化編

Last updated at Posted at 2024-02-15

1. はじめに

私は2023年10月より、内定直結型エンジニア学習プログラム「アプレンティス」に2期生として参加しています。

AWS について学んだので、Laravel API を AWS でデプロイする方法についてまとめました。
AWS に初めて触れる方の参考になれば幸いです。

シリーズ一覧

長編になっているので、複数の記事に分けて公開しています。
本記事はその第 6 弾です。

  1. サーバー設置編
  2. サーバー接続編
  3. IP アドレス編
  4. データベース編
  5. アプリケーション起動編
  6. Webレイヤ冗長化編 ★本記事!!
  7. SSL 化編

目次

1.はじめに
2.パブリックサブネットの作成
3.AMI の作成
4.ALB の作成
5.503 / 504 エラーの解消法
6.ALB へのルーティング

2. パブリックサブネットの作成

現在、以下のような状況になっています。

  • パブリックサブネット( 1 つ):EC2 インタンス設置
  • プライベートサブネット( 2 つ):1 つに RDS インスタンス設置

現状、Web サーバーを 1 つのアベイラビリティゾーンにしか設置していないので、災害等あった場合にサービスが停止してしまいます。

それを防ぐために、別のアベイラビリティゾーンにもう一つパブリックサブネットを作成し、Web サーバーを設置していきたいと思います。

詳しい作成方法は第 1 弾の記事で解説していますので、ご確認ください。

初めての AWS で Laravel API をデプロイしてみた! - 第 1 弾:サーバー設置編

ここでは、異なる点についてのみ挙げていきます。

  • サブネット名:conduit-practice-public-subnet-1c
  • アベイラビリティゾーン:アジアパシフィック(東京)/ap-northeast-1c
  • IPv4 subnet CIDR block:10.0.11.0/24

3. AMIの作成

既存の EC2 インスタンスから、AMI (EC2 インスタンスを生成する際の設計図)を作成します。

EC2 ダッシュボードに移動します。

作成済みのインスタンスを選択し、アクション>イメージとテンプレート>イメージの作成をクリックします。
スクリーンショット 2024-02-15 21.04.01.png

任意の名前を付け、あとはデフォルトのままで「イメージを作成」をクリックします。
スクリーンショット 2024-02-15 21.07.11.png

EC2 ダッシュボードの左メニュー「AMI」に、作成した AMI が表示されます。
スクリーンショット 2024-02-15 21.09.46.png

「ステータス」が「利用可能」になったら、「AMI からインスタンスを起動」をクリックして、インスタンスを作成します。
スクリーンショット 2024-02-15 21.12.15.png

任意の名前を入力します。ここでは、最初に作成した EC2 インスタンスと同じ名前にしています。
マシンイメージでは、先程作成した AMI が表示されています。
スクリーンショット 2024-02-15 21.14.43.png

「インスタンスタイプ」は以前作成したインスタンスと同じ 「t2.micro」のままで大丈夫です。
「キーペア」は、以前作成したものを選択しました。
スクリーンショット 2024-02-15 21.16.33.png

「ネットワーク設定」は、右上の「編集」ボタンをクリックすると編集できます。
VPC は作成したものを、サブネットは先程作成したパブリックサブネットの 1c を選択します。
インターネット接続するので、「パブリック IP の自動割り当て」を「有効化」します。

セキュリティグループは、既存の web-sg 設定します。
スクリーンショット 2024-02-15 21.22.16.png

「高度なネットワーク設定」は、「プライマリ IP」だけ10.0.11.10入力します。
その他はデフォルトのままにしました。
スクリーンショット 2024-02-15 21.28.20.png

問題がなければ、「インスタンスを起動」をクリックします。
スクリーンショット 2024-02-15 21.26.35.png

元のインスタンスと合わせて、2 つのアベイラビリティゾーンにインスタンスが配置されたことが確認できます。
スクリーンショット 2024-02-15 21.31.03.png

4. ALBの作成

次に、2つの EC2 インスタンスにアクセスを振り分けるために ALB を作成します。

ELB(Elastic Load Blancing)とは

ロードバランサーとは、各サーバーにアクセスを振り分け、負荷を分散する装置のことをいいます。
ELBは、AWS クラウド上のロードバランサーです。
ロードバランサーにはタイプが数種類あり、今回はその中の ALB (Application Load Balancer)を作成します。

ロードバランサー作成

EC2 ダッシュボードのメニューから「ロードバランサー」をクリックし、「ロードバランサーの作成」に進みます。
スクリーンショット 2024-02-10 0.58.51.png

ロードバランサータイプは「Application Load Balancer」を選択します。
スクリーンショット 2024-02-10 0.59.31.png
Web サービスを作る時はこちらを利用するようです。

任意の名前を入力します。
今回はインターネット向けです。
スクリーンショット 2024-02-15 21.47.09.png

次に、VPC とサブネットを選択します。
サブネットは 1a と 1c それぞれパブリックサブネットを選択します。
スクリーンショット 2024-02-15 21.48.06.png

セキュリティグループは今回新しいものを作成します。
「新しいセキュリティグループを作成」をクリックし、別タブで開かれるページで作成していきます。
スクリーンショット 2024-02-15 21.50.08.png

ALB 用のセキュリティグループだということが分かるように名前を入力します。
VPC は作成したものを選択します。
インバウンドルールに、HTTP0.0.0.0/0 を追加します。
スクリーンショット 2024-02-15 21.52.21.png
あとはそのままで、「セキュリティグループを作成」をクリックします。

ロードバランサー作成の画面に戻り、更新ボタンをクリックすると、作成したセキュリティグループが表示されるので、それを選択します。
「リスナーとルーティング」のHTTPの「デフォルトアクション」は、新しいターゲットグループを作成したいので、「ターゲットグループを作成」をクリックします。
スクリーンショット 2024-02-15 21.56.14.png

インスタンスを選択し、任意の名前を入力します。

スクリーンショット 2024-02-15 21.58.57.png

この辺はデフォルトのままです。
スクリーンショット 2024-02-15 22.00.17.png
スクリーンショット 2024-02-15 22.01.56.png

ヘルスチェックの詳細設定を編集します。
検証のために、下記のように短い値にしておきました。
スクリーンショット 2024-02-15 22.01.37.png
「次へ」をクリック。

2つのインスタンスにチェックを入れて、「ターゲットグループの作成」をクリック。
スクリーンショット 2024-02-15 22.05.17.png

ロードバランサー作成画面に戻り、更新ボタンをクリックして、作成したターゲットグループを選択します。
スクリーンショット 2024-02-15 22.07.21.png

問題がなければ「ロードバランサーの作成」をクリックします。
スクリーンショット 2024-02-15 22.08.14.png

ALB が作成できました。
スクリーンショット 2024-02-15 22.13.02.png
この右下の DNS 名をコピーします。
これをブラウザでリクエストすることで、ページが表示されるようになっているはずです。

5. 503/504エラーの解消法

DNS 名でアクセスできるようになったはずなのですが、下のようなエラーが表示される場合があるようです。
私も表示されました。
スクリーンショット 2024-02-15 22.21.10.png

このエラーの解消するために、EC2ダッシュボードにアクセスし、「ターゲットグループ」から作成したターゲットグループを選択します。

作成したターゲットグループにチェックを入れて、「ターゲット」タブの右上にある「ターゲットを登録」をクリックします。
スクリーンショット 2024-02-15 22.24.43.png

2つのインスタンスにチェックを入れて、画像下の「保留中として以下を含める」をクリックします。
スクリーンショット 2024-02-15 22.26.05.png
スクリーンショット 2024-02-15 22.26.36.png
これで「保留中のターゲットの登録」をクリックします。

改めて、ALB の DNS 名でアクセスできるか確認します。
スクリーンショット 2024-02-15 22.28.32.png
表示されました!

6. ALBへのルーティング

現状では、IP アドレスへのアクセスは先程の ALB にルーティングされるのですが、独自ドメインでアクセスしたときには、直接 EC2 インスタンスにルーティングされてしまいます。
なぜなら、以前 Route 53 のホストゾーンの設定で、ドメインにアクセスがあった場合に、アベイラビリティゾーン 1a の方の EC2 インスタンスのパブリック IP にルーティングするように設定したからです。

ここで、独自ドメインへのアクセスも ALB にルーティングされるように設定します。

Route 53 のダッシュボードに移動し、「ホストゾーン」から、作成した独自ドメインのホストゾーンをクリックします。
詳細画面で、A レコードを選択し、「レコードを編集」から変更します。
スクリーンショット 2024-02-15 22.37.54.png

「エイリアス」にを ON にして、「トラフィックのルーティング先」に「Application Load Balancer と Classic Load Balancer へのエイリアス」、「アジアパシフィック(東京)」、作成した ALB を選択します。
スクリーンショット 2024-02-15 22.43.39.png
「保存」をクリック。

これで、ドメイン名でも ABL にアクセスできるようになりました!
ALB 経由で、1a、1c どちらかの EC2 インスタンスに接続するようになります。

本記事はここまでです。
次の記事はこちら↓
初めての AWS で Laravel API をデプロイしてみた! - 第 7 弾:SSL 化編

2
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
2
0