Elastic Beanstalk への Laravel アプリケーションのデプロイ - AWS Elastic Beanstalk

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Elastic Beanstalk への Laravel アプリケーションのデプロイ

Laravel は PHP 用のオープンソースである model-view-controller (MVC) フレームワークです。このチュートリアルでは、Laravel アプリケーションを生成して AWS Elastic Beanstalk 環境にデプロイし、Amazon Relational Database Service (Amazon RDS) データベースインスタンスに接続するように設定するプロセスについて説明します。

前提条件

このチュートリアルでは、基本的な Elastic Beanstalk オペレーションと Elastic Beanstalk コンソールに関する知識があることを前提としています。まだ起動していない場合は、Elastic Beanstalk を使用して開始する の指示に従って、最初の Elastic Beanstalk 環境を起動します。

このガイドの手順に従うには、run command のためのコマンドラインターミナルまたはシェルが必要になります。コマンドは、該当する場合、プロンプト記号 ($) と現在のディレクトリの名前が前に付けられて、リストに示されます。

~/eb-project$ this is a command this is output

Linux および macOS では、任意のシェルとパッケージ管理者を使用できます。Windows 10 では、Linux 用の Windows サブシステムをインストールして、Windows 統合したバージョニングである Ubuntu および Bash を入手できます。

Laravel 6 では PHP 7.2 以降が必要です。また、Laravel 公式ドキュメントのサーバー要件のトピックに記載されている PHP 拡張も必要です。PHP 開発環境の設定 のトピックの手順に従って、PHP と Composer をインストールします。

Laravel のサポートおよびメンテナンス情報については、Laravel 公式ドキュメントの support ポリシーのトピックをご参照ください。

Elastic Beanstalk 環境の起動

Elastic Beanstalk コンソールを使用して、Elastic Beanstalk 環境を作成します。[PHP] プラットフォームを選択し、デフォルト設定およびサンプルコードを受け入れます。

環境を起動するには (コンソール)
  1. 次の事前設定されたリンク console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced を使用して、Elastic Beanstalk コンソールを開きます。

  2. [プラットフォーム] で、アプリケーションで使用される言語に一致するプラットフォームとプラットフォームブランチを選択します。

  3. アプリケーションコード として、サンプルアプリケーション を選択します。

  4. 確認と起動 を選択します。

  5. 使用できるオプションを確認します。使用する有効なオプションを選択し、準備ができたら [アプリケーションの作成] を選択します。

環境の作成の所要時間は約 5 分です。以下のリソースが作成されます。

  • EC2 インスタンス – 選択したプラットフォームでウェブ・アプリケーションを実行するよう設定された Amazon Elastic Compute Cloud (Amazon EC2) 仮想マシン。

    各プラットフォームは、それぞれ特定の言語バージョン、フレームワーク、ウェブコンテナ、またはそれらの組み合わせをサポートするための、特定のソフトウェア、設定ファイル、スクリプトを実行します。ほとんどのプラットフォームでは、Apache または NGINX のいずれかをウェブアプリケーションの前にリバースプロキシとして配置します。そのプロキシがリクエストをアプリケーションに転送し、静的アセットを提供し、アクセスログとエラーログを生成します。

  • インスタンスセキュリティグループ – ポート 80 上のインバウンドトラフィックを許可するよう設定された Amazon EC2 セキュリティグループ。このリソースでは、ロードバランサーからの HTTP トラフィックが、ウェブ・アプリケーションを実行している EC2 インスタンスに達することができます。デフォルトでは、トラフィックは他のポート上で許可されません。

  • ロードバランサー – アプリケーションを実行するインスタンスにリクエストを分散するよう設定された Elastic Load Balancing ロードバランサー。ロードバランサーにより、インスタンスを直接インターネットに公開する必要もなくなります。

  • ロードバランサーセキュリティグループ – ポート 80 上のインバウンドトラフィックを許可するよう設定された Amazon EC2 セキュリティグループ。このリソースでは、インターネットからの HTTP トラフィックが、ロードバランサーに達することができます。デフォルトでは、トラフィックは他のポート上で許可されません。

  • Auto Scaling グループ – インスタンスが終了されたか利用不可になった場合にそのインスタンスを置き換えるよう設定された Auto Scaling グループ。

  • Amazon S3 バケット – Elastic Beanstalk の使用時に作成されるソースコード、ログ、その他のアーティファクトの保存場所。

  • Amazon CloudWatch アラーム – 環境内のインスタンスの負荷をモニタリングし、負荷が高すぎるか低すぎる場合にトリガーされる 2 つの CloudWatch アラーム。アラームがトリガーされると、Auto Scaling グループはレスポンスとしてスケールアップまたはダウンを行います。

  • stackAWS CloudFormation – Elastic Beanstalk は AWS CloudFormation を使用して環境内のリソースを起動し、設定の変更を伝達します。リソースは、AWS CloudFormation コンソールに表示できるテンプレートで定義されます。

  • ドメイン名 – ウェブ・アプリケーションまでのルートとなるドメイン名であり、subdomain.region.elasticbeanstalk.com の形式です。

    注記

    Elastic Beanstalk アプリケーションのセキュリティを強化するため、elasticbeanstalk.com ドメインはパブリックサフィックスリスト (PSL) に登録されています。セキュリティ強化のため、Elastic Beanstalk アプリケーションのデフォルトドメイン名に機密な Cookie を設定する必要が生じた場合は、__Host- プレフィックスの付いた Cookie の使用をおすすめします。この方法は、ドメインをクロスサイトリクエストフォージェリ (CSRF) の攻撃から守るのに役立ちます。詳細については、Mozilla 開発者ネットワークの「Set-Cookie」ページを参照してください。

これらのリソースはすべて Elastic Beanstalk によって管理されます。環境を終了すると、Elastic Beanstalk は含まれているすべてのリソースを終了します。

注記

Elastic Beanstalk が作成する Amazon S3 バケットは、環境間で共有され、環境の終了時に削除されません。詳細については、「Amazon S3 で Elastic Beanstalk を使用する」を参照してください。

Laravel をインストールしてウェブサイトを生成する

以下の 1 つのコマンドで、Composer は Laravel をインストールして作業プロジェクトを作成できます。

~$ composer create-project --prefer-dist laravel/laravel eb-laravel

Composer は Laravel とその依存関係をインストールし、デフォルトのプロジェクトを生成します。

Laravel のインストール中に問題が発生した場合は、公式ドキュメント (https://laravel.com/docs/6.x) のインストールに関するトピックをご参照ください。

アプリケーションをデプロイします

Composer で作成されたファイルを含む出典バンドルを作成します。次のコマンドでは、laravel-default.zip という出典バンドルが作成されます。vendor フォルダ内のファイルは除外されます。これらのファイルは、多くのスペースを使用するだけでなく、アプリケーションを Elastic Beanstalk にデプロイするのに不要です。

~/eb-laravel$ zip ../laravel-default.zip -r * .[^.]* -x "vendor/*"

ソースバンドルを Elastic Beanstalk にアップロードし、Laravel を環境にデプロイします。

出典バンドルをデプロイするには
  1. Elastic Beanstalk コンソールを開き、リージョンリストで を選択します AWS リージョン。

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

  3. 環境の概要ページで、[Upload and deploy (アップロードとデプロイ)] を選択します。

  4. 画面上のダイアログボックスを使用して、ソースバンドルをアップロードします。

  5. [デプロイ] を選択します。

  6. デプロイが完了したら、新しいタブのウェブサイトを開く、サイトの URL を選択できます。

注記

さらにソースバンドルを最適化するには、Git リポジトリを初期化し、git archive コマンドを使用して出典バンドルを作成します。デフォルトの Laravel プロジェクトには、.gitignore ファイルが含まれています。このファイルは、デプロイに不要な vendor フォルダと他のファイルを除外するよう Git に指示します。

Composer 設定の設定

デプロイが完了したら、URL をクリックして Laravel アプリケーションをブラウザで開きます。

説明 デフォルトでは、Elastic Beanstalk によってウェブサイトのルートパスにプロジェクトのルートが提供されています。この場合、デフォルトのページ(index.php)は public フォルダーの 1 レベル下にあります。URL に /public を追加することでこれを確認できます。例えば http://laravel.us-east-2.elasticbeanstalk.com/public です。

ルートパスで Laravel アプリケーションをサポートするには、Elastic Beanstalk コンソールを使用してウェブサイトのドキュメントルートを設定します。

ウェブサイトのドキュメントルートを設定するには
  1. Elastic Beanstalk コンソールを開き、リージョンリストで を選択します AWS リージョン。

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

  3. ナビゲーションペインで、[設定] を選択します。

  4. [更新、モニタリング、ログ] の設定カテゴリで、[編集] を選択します。

  5. [ドキュメントのルート] に「/public」と入力します。

  6. ページの最下部で [適用] を選択し変更を保存します。

  7. 更新が完了したら、ブラウザーでサイトを再び開くための URL をクリックします。

ここまで完了したら、次は、お客様の環境にデータベースを追加し、そのデータベースに接続するように Laravel を設定します。

お客様の環境にデータベースを追加する

Elastic Beanstalk 環境で RDS DB インスタンスを起動します。Elastic Beanstalk 上の Laravel では、MySQL、SQLServer、または PostgreSQL データベースを使用できます。この例では、MySQL を使用します。

RDS DB インスタンスを Elastic Beanstalk 環境に追加するには
  1. Elastic Beanstalk コンソールを開き、リージョンリストで を選択します AWS リージョン。

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

  3. ナビゲーションペインで、[設定] を選択します。

  4. [データベース] 設定カテゴリで、[編集] を選択します。

  5. [エンジン] で、[mysql] を選択します。

  6. マスターの [username] と [password] に入力します。Elastic Beanstalk は環境プロパティを使用して、アプリケーションにこれらの値を渡します。

  7. ページの最下部で [適用] を選択し変更を保存します。

データベースインスタンスの作成には約 10 分かかります。Elastic Beanstalk 環境に結合されたデータベースの詳細については、「Elastic Beanstalk 環境にデータベースを追加する」を参照してください。

その間に、環境から接続情報を読み取るようにソースコードを更新できます。Elastic Beanstalk は、RDS_HOSTNAME などの環境変数を使用して、接続の詳細をアプリケーションに渡します。

Laravel のデータベース設定は、プロジェクトコードで database.php フォルダ内の config という名前のファイルに保存されています。mysql エントリを見つけ、hostdatabaseusernameand password の各変数を変更して Elastic Beanstalk から対応する値を読み取ります。

例 ~/Eb-laravel/config/database.php
... 'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', ], 'mysql' => [ 'driver' => 'mysql', 'host' => env('RDS_HOSTNAME', '127.0.0.1'), 'port' => env('RDS_PORT', '3306'), 'database' => env('RDS_DB_NAME', 'forge'), 'username' => env('RDS_USERNAME', 'forge'), 'password' => env('RDS_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ], ...

データベース接続が正しく設定されていることを確認するには、データベースに connect してデフォルトのレスポンスを返すコードを index.php に追加します。

例 ~/Eb-laravel/公開/index.php
... if(DB::connection()->getDatabaseName()) { echo "Connected to database ".DB::connection()->getDatabaseName(); } $response->send(); ...

DB インスタンスの起動が完了したら、更新したアプリケーションのバンドルを作成し、お客様の環境にデプロイします。

Elastic Beanstalk 環境を更新するには
  1. 新しい出典バンドルを作成します。

    ~/eb-laravel$ zip ../laravel-v2-rds.zip -r * .[^.]* -x "vendor/*"
  2. Elastic Beanstalk コンソールを開き、リージョンリストで を選択します AWS リージョン。

  3. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

  4. [アップロードとデプロイ] を選択します。

  5. [Browse] を選択して laravel-v2-rds.zip をアップロードします。

  6. [Deploy‬] (デプロイ) を選択します。

アプリケーションの新しいバージョンのデプロイには 1 分以上かかりません。デプロイが完了したら、ウェブ・ページを更新して、データベースに接続されたことを確認します。

クリーンアップ

Elastic Beanstalk での作業が終了したら、環境を終了できます。Elastic Beanstalk は、Amazon EC2 インスタンスデータベースインスタンスロードバランサー、セキュリティグループ、アラーム など、環境に関連付けられているすべての AWS リソースを終了します。

Elastic Beanstalk 環境を終了するには
  1. Elastic Beanstalk コンソールを開き、リージョンリストで を選択します AWS リージョン。

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

    注記

    環境が多数ある場合は、検索バーを使用して環境リストをフィルタリングします。

  3. [Actions] (アクション)、[Terminate environment] (環境の終了) の順に選択します。

  4. 画面上のダイアログボックスを使用して、環境の終了を確認します。

Elastic Beanstalk を使用すると、いつでもアプリケーション用の新しい環境を簡単に作成できます。

さらに、Elastic Beanstalk 環境の外に作成したデータベースリソースを終了できます。Amazon RDS DB インスタンスを終了する場合、スナップショットを作成し、後で別のインスタンスにデータを復元できます。

RDS DB インスタンスを終了するには
  1. Amazon RDS コンソールを開きます。

  2. [データベース] を選択します。

  3. DB インスタンスを選択します。

  4. [アクション] を選択し、[削除] を選択します。

  5. スナップショットを作成するかどうかを選択してから、削除 を選択します。

次のステップ

Laravel の詳細については、Laravel 公式ウェブサイト (laravel.com) をご覧ください。

アプリケーションの開発が進むにつれ、.zip ファイルを手動で作成して Elastic Beanstalk コンソールにアップロードすることなく、環境を管理してアプリケーションをデプロイする方法が必要になります。Elastic Beanstalk コマンドラインインターフェイス (EB CLI) には、 easy-to-use コマンドラインからアプリケーションを作成、設定、および Elastic Beanstalk 環境にデプロイするためのコマンドが用意されています。

このチュートリアルでは、Elastic Beanstalk コンソールを使用して Composer のオプションを設定しました。この設定をアプリケーション出典のパートにするには、次のような設定ファイルを使用できます。

例 .ebextensions/composer.config
option_settings: aws:elasticbeanstalk:container:php:phpini: document_root: /public

詳細については、「設定ファイル (.ebextensions) による高度な環境のカスタマイズ」を参照してください。

Elastic Beanstalk 環境で Amazon RDS DB インスタンスを実行するのは、開発とテストには最適ですが、データベースのライフサイクルがお客様の環境に結び付けられます。自身の環境の外で実行されているデータベースに接続する手順については、「PHP アプリケーション環境に Amazon RDS DB インスタンスを追加」を参照してください。

最後に、本稼働環境でアプリケーションを使用する予定の場合は、お客様の環境にカスタムドメイン名を設定し、安全な接続のために HTTPS を有効にすることが必要になります。