AWS Elastic Beanstalk
開発者ガイド

Symfony アプリケーションを Elastic Beanstalk にデプロイする

Symfony は、動的な PHP ウェブアプリケーションを作成するためのオープンソースフレームワークです。このチュートリアルでは、Symfony アプリケーションを生成して AWS Elastic Beanstalk 環境にデプロイする手順を示します。

前提条件

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

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

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

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

Symfony 4.3 には、PHP P 7.1 以降と PHP の intl 拡張が必要です。このチュートリアルでは、PHP 7.2 とそれに対応する Elastic Beanstalk プラットフォームのバージョンを使用します。「PHP 開発環境のセットアップ」の手順に従って PHP と Composer をインストールします。

Elastic Beanstalk 環境を起動する

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

環境を起動するには(コンソール)

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

  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 グループはレスポンスとしてスケールアップまたはダウンを行います。

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

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

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

注記

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

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

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

~$ composer create-project symfony/website-skeleton eb-symfony Installing symfony/website-skeleton (v4.3.99) - Installing symfony/website-skeleton (v4.3.99): Downloading (100%) Created project in eb-symfony Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing symfony/flex (v1.4.5): Downloading (100%) Symfony operations: 1 recipe (539d006017ad5ef71beab4a2e2870e9a) - Configuring symfony/flex (>=1.0): From github.com/symfony/recipes:master Loading composer repositories with package information Updating dependencies (including require-dev) Restricting packages listed in "symfony/symfony" to "4.3.*" Package operations: 103 installs, 0 updates, 0 removals - Installing ocramius/package-versions (1.4.0): Loading from cache ...

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

Symfony のインストール中に問題が発生した場合は、公式ドキュメント (symfony.com/doc/current/setup.html) のインストールに関するトピックを参照してください。

アプリケーションのデプロイ

プロジェクトディレクトリに移動します。

~$ cd eb-symfony

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

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

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

ソースバンドルをデプロイするには

  1. Elastic Beanstalk コンソール を開きます。

  2. お客様の環境の管理ページに移動します。

  3. [Upload and Deploy] を選択します。

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

  5. [Deploy] を選択します。

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

注記

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

Composer 設定の構成

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

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

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

ウェブサイトのドキュメントルートを設定するには

  1. Elastic Beanstalk コンソール を開きます。

  2. お客様の環境の管理ページに移動します。

  3. [Configuration] を選択します。

  4. [ソフトウェア] 設定カテゴリで、[変更] を選択します。

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

  6. [Apply] を選択します。

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

クリーンアップ

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

Elastic Beanstalk 環境を終了するには

  1. Elastic Beanstalk コンソール を開きます。

  2. お客様の環境の管理ページに移動します。

  3. [アクション] を選択してから、[環境の終了] を選択します。

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

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

次のステップ

Symfony の詳細については、Symfony とは何かに関する記事 (symfony.com) を参照してください。

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

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

例 .ebextensions/composer.config

option_settings: aws:elasticbeanstalk:container:php:phpini: document_root: /public

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

Symfony は、独自の設定ファイルを使用してデータベース接続を設定します。データベースと Symfony の接続手順については、Symfony を使用してデータベースに接続する を参照してください。

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