1. はじめに
私は2023年10月より、内定直結型エンジニア学習プログラム「アプレンティス」に2期生として参加しています。
AWS について学んだので、Laravel API を AWS でデプロイする方法についてまとめました。
AWS に初めて触れる方の参考になれば幸いです。
シリーズ一覧
長編になっているので、複数の記事に分けて公開しています。
本記事はその第 6 弾です。
目次
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 ダッシュボードに移動します。
作成済みのインスタンスを選択し、アクション>イメージとテンプレート>イメージの作成をクリックします。
任意の名前を付け、あとはデフォルトのままで「イメージを作成」をクリックします。
EC2 ダッシュボードの左メニュー「AMI」に、作成した AMI が表示されます。
「ステータス」が「利用可能」になったら、「AMI からインスタンスを起動」をクリックして、インスタンスを作成します。
任意の名前を入力します。ここでは、最初に作成した EC2 インスタンスと同じ名前にしています。
マシンイメージでは、先程作成した AMI が表示されています。
「インスタンスタイプ」は以前作成したインスタンスと同じ 「t2.micro」のままで大丈夫です。
「キーペア」は、以前作成したものを選択しました。
「ネットワーク設定」は、右上の「編集」ボタンをクリックすると編集できます。
VPC は作成したものを、サブネットは先程作成したパブリックサブネットの 1c を選択します。
インターネット接続するので、「パブリック IP の自動割り当て」を「有効化」します。
「高度なネットワーク設定」は、「プライマリ IP」だけ10.0.11.10
入力します。
その他はデフォルトのままにしました。
元のインスタンスと合わせて、2 つのアベイラビリティゾーンにインスタンスが配置されたことが確認できます。
4. ALBの作成
次に、2つの EC2 インスタンスにアクセスを振り分けるために ALB を作成します。
ELB(Elastic Load Blancing)とは
ロードバランサーとは、各サーバーにアクセスを振り分け、負荷を分散する装置のことをいいます。
ELBは、AWS クラウド上のロードバランサーです。
ロードバランサーにはタイプが数種類あり、今回はその中の ALB (Application Load Balancer)を作成します。
ロードバランサー作成
EC2 ダッシュボードのメニューから「ロードバランサー」をクリックし、「ロードバランサーの作成」に進みます。
ロードバランサータイプは「Application Load Balancer」を選択します。
Web サービスを作る時はこちらを利用するようです。
次に、VPC とサブネットを選択します。
サブネットは 1a と 1c それぞれパブリックサブネットを選択します。
セキュリティグループは今回新しいものを作成します。
「新しいセキュリティグループを作成」をクリックし、別タブで開かれるページで作成していきます。
ALB 用のセキュリティグループだということが分かるように名前を入力します。
VPC は作成したものを選択します。
インバウンドルールに、HTTP
の 0.0.0.0/0
を追加します。
あとはそのままで、「セキュリティグループを作成」をクリックします。
ロードバランサー作成の画面に戻り、更新ボタンをクリックすると、作成したセキュリティグループが表示されるので、それを選択します。
「リスナーとルーティング」のHTTPの「デフォルトアクション」は、新しいターゲットグループを作成したいので、「ターゲットグループを作成」をクリックします。
インスタンスを選択し、任意の名前を入力します。
ヘルスチェックの詳細設定を編集します。
検証のために、下記のように短い値にしておきました。
「次へ」をクリック。
2つのインスタンスにチェックを入れて、「ターゲットグループの作成」をクリック。
ロードバランサー作成画面に戻り、更新ボタンをクリックして、作成したターゲットグループを選択します。
ALB が作成できました。
この右下の DNS 名をコピーします。
これをブラウザでリクエストすることで、ページが表示されるようになっているはずです。
5. 503/504エラーの解消法
DNS 名でアクセスできるようになったはずなのですが、下のようなエラーが表示される場合があるようです。
私も表示されました。
このエラーの解消するために、EC2ダッシュボードにアクセスし、「ターゲットグループ」から作成したターゲットグループを選択します。
作成したターゲットグループにチェックを入れて、「ターゲット」タブの右上にある「ターゲットを登録」をクリックします。
2つのインスタンスにチェックを入れて、画像下の「保留中として以下を含める」をクリックします。
これで「保留中のターゲットの登録」をクリックします。
改めて、ALB の DNS 名でアクセスできるか確認します。
表示されました!
6. ALBへのルーティング
現状では、IP アドレスへのアクセスは先程の ALB にルーティングされるのですが、独自ドメインでアクセスしたときには、直接 EC2 インスタンスにルーティングされてしまいます。
なぜなら、以前 Route 53 のホストゾーンの設定で、ドメインにアクセスがあった場合に、アベイラビリティゾーン 1a の方の EC2 インスタンスのパブリック IP にルーティングするように設定したからです。
ここで、独自ドメインへのアクセスも ALB にルーティングされるように設定します。
Route 53 のダッシュボードに移動し、「ホストゾーン」から、作成した独自ドメインのホストゾーンをクリックします。
詳細画面で、A レコードを選択し、「レコードを編集」から変更します。
「エイリアス」にを ON にして、「トラフィックのルーティング先」に「Application Load Balancer と Classic Load Balancer へのエイリアス」、「アジアパシフィック(東京)」、作成した ALB を選択します。
「保存」をクリック。
これで、ドメイン名でも ABL にアクセスできるようになりました!
ALB 経由で、1a、1c どちらかの EC2 インスタンスに接続するようになります。
本記事はここまでです。
次の記事はこちら↓
初めての AWS で Laravel API をデプロイしてみた! - 第 7 弾:SSL 化編