The following two tabs change content below.
アバター画像

メンバー

福岡市博多区でシステム開発の請負やSES、web集客サービスを提供する発信中

今回は、AWSにてwebアプリケーションを運用するプロセスのについて解説していきます。

AWS(Amazon Web Services)はクラウドプラットフォームとして広く利用されており、AWSで環境構築する企業は増えてきています。

こちらがAWS公式のクラウド導入事例です。

AWSの環境構築に触れて損はないと思うので、今のうちに慣れておきましょう!!

今回の記事では大まかに次のような構成を作成していこうと思っています。

  • Route53を利用してドメインを設定
  • ALB(Application Load Balancer)でSSL(HTTPS)通信を実施
  • EC2上でLaravelアプリケーションをデプロイ

専用用語ばかりでとっつきにくいかもしれませんが、用語の解説も含めて説明していきます。

Laravelのデプロイの流れは次の通りです。

  1. VPCを作成する
  2. EC2インスタンスの作成
  3. DockerインストールとLaravelのデプロイ
  4. ドメインとSSLの設定

という4つのステップで進めていきます。

1.VPCを作成する

では、さっそくVPCを作成していきましょう。

Aws consoleにログインし、VPCダッシュボードを開きます。
新規VPCを作成からVPCなどを選択します。その後は、既存の設定のままで大丈夫です。

<専門用語解説1>VPC (Virtual Private Cloud)

AWS上における仮想ネットワークを作成・管理するサービスです。

  • 自分専用のネットワークを構築でき、セキュリティグループやサブネットを使って通信範囲を制御できます。
  • 今回の構成では、EC2 や ALB を配置するための土台として VPC を作成し、そこにサブネットやセキュリティグループを定義しました。

Amazon VPC とは? 公式ドキュメントはこちらから

2.EC2インスタンスの作成

続いて、EC2を立てていきます。

AWS上でEC2コンソールを開きます。インスタンス一覧を開き、インスタンスを起動を押します。インスタンスタイプはt2.microなど、そのシステムにあったスペックのものを選びます。今回は、そこまで強いインスタンスは必要ないので、t2.microを選択します。キーペアログインのところは新規作成にし、RSAタイプで新規作成をします。

ネットワークの設定の部分では、先ほど作成したVPCを選択し、パブリックIPの自動割り当てはonにしておきましょう。セキュリティグループについては、sshかつ自分のIPで解放をにしておきます。

<専門用語解説2>EC2 (Amazon Elastic Compute Cloud)

AWSが提供する仮想サーバーです。

  • 必要な台数・スペックでインスタンスを起動し、OSミドルウェアアプリケーションを自由にインストールできます。
  • 今回は EC2 インスタンスの上で Docker や Laravel アプリケーションを動作させるサーバーとして利用しました。

EC2とは? 公式ドキュメントはこちらから

そこまでできたら、インスタンスの解放を押下しましょう。

そうすると、インスタンス一覧に先ほど作成したインスタンスが表示されるので、sshクライアントを押下し、手順に従って、sshを行います。

上記のような形でsshができていることが確認できればec2に接続ができています。

3. DockerのインストールとLaravelのデプロイ

続いて、新規アプリケーションを立ち上げていきます。

今回は、laravelですので、次のようなコマンドをうち、laravelをインストール(実際はgit cloneなどを用いる)します。

今回は、空っぽのEC2のため、dockerなどをインストールしていきます。

  1. システムのパッケージを更新

sudo dnf update -y

  • Dockerのインストール

sudo dnf install -y docker

  • Dockerサービスを起動・有効化

sudo systemctl start docker

sudo systemctl enable docker

  • 一版ユーザーでdockerコマンドを実行できるように設定

sudo usermod -aG docker ec2-user

  • 再度sshを実行し、laravel(もしくはgitなど)でサービスをインストール

curl -s “https://laravel.build/laravel-11” | bash

の手順です。

上記のようなコマンドを打ち、EC2のipアドレスをブラウザに打ち込みます。

そうすると、以下のような画面がでてくるので、

./vendor/bin/sail artisan migrate

とうちます。そうするとlaravel 11の画面が表示されます。

ここまでくれば、IPアドレスを元にwebアプリケーションが表示されることが分かります。

ここまでくれば、一通りのwebアプリケーションの運用をするプロセスが分かったかと思います。

<専門用語解説3>Docker

AWSのサービスではありませんが、今回の EC2 上でアプリケーションをコンテナ化するために使いました。

  • Laravel 公式の Sail や独自の Docker イメージを用いることで、開発環境を簡単に構築したり、アプリケーションをパッケージ化して配布・実行できます。
  • 将来的には、ECS (Elastic Container Service) や EKS (Elastic Kubernetes Service) などのコンテナオーケストレーションサービスに移行することも可能です。

4. ドメインとSSLの設定

しかし、今時IPアドレスのみでhttpアクセスするだけのアプリケーションはほぼ見たことがないので、ここからドメイン+https化をしていきます。

Route53を開き、任意のホストゾーンを作成します。
いったん、route53はここまででOKです。

<専門用語解説4>Route53

AWSが提供するDNS管理サービスです。

  • 独自ドメインを取得・管理し、AレコードやCNAMEレコードなどを簡単に設定できます。
  • 今回はドメイン名 (例: tomita.example.com) を管理し、ALB のエンドポイントに名前解決するようレコードを作成しました。

続いて、ALBを作成していきます。

ALB(Application Load Balancer)の作成

EC2→ロードバランサーと進んでいき、ロードバランサーの作成を押します。

このような画面が表示されるので、Application Load Baranserを押します。

ロードバランサーのVPCは先ほど作ったVPCを押下し、次のターゲットグループの設定のところで別画面に遷移します。

そこでターゲットグループの新規作成を押下します。

そこでは、インスタンスを選択し、次へを押下し、使用可能なインスタンスのところで、先ほど作ったEC2を選択します。そして、ターゲットグループを作成をします。

そこまでできましたら、ロードバランサーの作成画面に戻り、先ほど作ったターゲットグループを選択しましょう。

<専門用語解説5>ALB (Application Load Balancer)

HTTP/HTTPS レベルでの負荷分散を行うロードバランサーです。

  • 各ユーザーからのリクエストを複数のサーバー(EC2など)へ振り分け、サービス全体の可用性を高めます。
  • HTTPS通信の終端 (SSL/TLS) を ALB で処理し、バックエンドの EC2 には HTTP で接続する構成が一般的です。
  • 今回は Route53 からのアクセスを ALB で受け、SSL (HTTPS) の証明書も ALB に設定しました。

ACM(AWS Certificate Manager)でSSL証明書を設定

続いて、ACMの設定を求められますので、ACM証明書をリクエストを押下します。

そこで、証明書をリクエスト、パブリック証明書をリクエスト、ドメイン名ではさきほど使用したroute53のドメイン名を入力します。そして、証明書のステータスの画面に移動するので、ドメインの中にあるroute53でレコードを作成を押下します。

そうすると、先ほど作成したドメインでレコードを作成できるので、レコードを作成してください。

少し待つと、保留中の検証が成功になります。

ここまでくると先ほどのALBから作成したACMが選択できるので、選択肢、ALBの作成が完了となります。

<専門用語解説6>. ACM (AWS Certificate Manager)

AWS が提供するSSL/TLS証明書の管理サービスです。

  • 無料でパブリック証明書を発行・更新でき、主に ALB や API Gateway など AWSのサービスに証明書を連携しやすいのが特徴です。
  • 今回は Route53 を使った自動検証(ドメイン検証)により、独自ドメインのSSL証明書を発行し、ALB に紐付けました。

Route53でALBとドメインを紐付け

続いて、Route53から、先ほどのALBに対してリクエストを流すような設定にします。

Route53より、レコードを作成、Aレコードを選択しつつ、エイリアスにチェックを入れ、先ほど作成したALBを選択します。

そうするとroute53上で作成したドメインにて、先ほど作成したアプリケーションに接続できそうですが、ヘルスチェックが失敗してしまっている可能性があります。

それは、EC2のセキュリティグループがALBからのアクセスを拒否している可能性があるからです。EC2のセキュリティグループから、ALBに対してのアクセスを許可するために、EC2のセキュリティグループにALBについているセキュリティグループを付与すれば、問題なくアクセスができるようになるかと思います。

上記のような画面がでれば、接続は完了という形になります。

まとめ

これで、LaravelアプリケーションをAWSのEC2上でホストし、Route53とALBを用いたHTTPS対応の設定を解説しました。AWSのサービスを組み合わせることで、初期コストの削減、セキュリティやスケーラビリティを考慮しながらアプリケーションを運用することが可能となります。
AWSは学習コストが高くなる分、習得すると人材としての需要が高まるので是非身につけておきましょう。

AWSの上級者資格の解説も行っておりますので興味のある方は是非参考にしてみてください。

AWS SAP (AWS Certified Solutions Architect – Professional) を3か月で合格した勉強方法