

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

# Elastic Beanstalk への Laravel アプリケーションのデプロイ
<a name="php-laravel-tutorial"></a>

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

**Topics**
+ [前提条件](#php-laravel-tutorial-prereqs)
+ [Elastic Beanstalk 環境の起動](#php-laravel-tutorial-launch)
+ [Laravel をインストールしてウェブサイトを生成する](#php-laravel-tutorial-generate)
+ [アプリケーションをデプロイします](#php-laravel-tutorial-deploy)
+ [Composer 設定の設定](#php-laravel-tutorial-configure)
+ [お客様の環境にデータベースを追加する](#php-laravel-tutorial-database)
+ [クリーンアップ](#php-laravel-tutorial-cleanup)
+ [次の手順](#php-laravel-tutorial-nextsteps)

## 前提条件
<a name="php-laravel-tutorial-prereqs"></a>

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

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

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

Linux および macOS では、任意のシェルとパッケージ管理者を使用できます。Windows では、[Linux 用の Windows サブシステムをインストール](https://docs.microsoft.com/en-us/windows/wsl/install-win10)して、Ubuntu および Bash の Windows に統合されたバージョンを入手できます。

Laravel 6 では PHP 7.2 以降が必要です。また、Laravel 公式ドキュメントの[サーバー要件](https://laravel.com/docs/6.x/installation#server-requirements)のトピックに記載されている PHP 拡張も必要です。手順に従って、PHP と Composer をインストールします。

Laravel のサポートおよびメンテナンス情報については、Laravel 公式ドキュメントの[ support ポリシー](https://laravel.com/docs/master/releases#support-policy)のトピックをご参照ください。

## Elastic Beanstalk 環境の起動
<a name="php-laravel-tutorial-launch"></a>

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

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

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

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

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

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

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

環境の作成の所要時間は約 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 グループはレスポンスとしてスケールアップまたはダウンを行います。
+ **CloudFormation スタック** – Elastic Beanstalk は CloudFormation を使用して環境内のリソースを起動し、設定変更を伝達します。リソースは、[CloudFormation コンソール](https://console.aws.amazon.com/cloudformation)に表示できるテンプレートで定義されます。
+ **ドメイン名** – ウェブ・アプリケーションまでのルートとなるドメイン名であり、*{{subdomain}}.{{region}}.elasticbeanstalk.com* の形式です。
**ドメインセキュリティ**  
Elastic Beanstalk アプリケーションのセキュリティを強化するため、*elasticbeanstalk.com* ドメインは[パブリックサフィックスリスト (PSL)](https://publicsuffix.org/) に登録されています。  
Elastic Beanstalk アプリケーションのデフォルトドメイン名に機密性のある Cookie を設定する必要がある場合は、セキュリティ強化のため `__Host-` プレフィックスの付いた Cookie の使用をお勧めします。このプラクティスは、クロスサイトリクエストフォージェリ (CSRF) 攻撃からドメインを防御します。詳細については、Mozilla 開発者ネットワークの「[Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes)」ページを参照してください。

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

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

## Laravel をインストールしてウェブサイトを生成する
<a name="php-laravel-tutorial-generate"></a>

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

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

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

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

## アプリケーションをデプロイします
<a name="php-laravel-tutorial-deploy"></a>

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

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

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

**出典バンドルをデプロイするには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

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

## Composer 設定の設定
<a name="php-laravel-tutorial-configure"></a>

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

![403 ユーザーがリクエストされたリソースにアクセスするアクセス許可を持っていないことを示す禁止エラーページ。](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/php-laravel-403.png)


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

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

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

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

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

![ナビゲーションメニュー項目を含む Laravel ロゴ: ドキュメント、Laracasts、ニュース、Forge、GitHub。](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/php-laravel-defaultnodb.png)


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

## お客様の環境にデータベースを追加する
<a name="php-laravel-tutorial-database"></a>

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

**RDS DB インスタンスを Elastic Beanstalk 環境に追加するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

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

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

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

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

**Example \~/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` に追加します。

**Example \~/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/*"
   ```

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

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

![ebdb へのデータベース接続が成功したことを示す Laravel アプリケーションのホームページ。](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/images/php-laravel-defaultwdb.png)


## クリーンアップ
<a name="php-laravel-tutorial-cleanup"></a>

デモコードの操作が完了したら、環境を終了できます。Elastic Beanstalk は、[Amazon EC2 インスタンス](using-features.managing.ec2.md)、[データベースインスタンス](using-features.managing.db.md)、[ロードバランサー](using-features.managing.elb.md)、セキュリティグループ、[アラーム](using-features.alarms.md#using-features.alarms.title)など、関連するすべての AWS リソースを削除します。

リソースを削除しても Elastic Beanstalk アプリケーションは削除されないため、いつでもアプリケーションの新しい環境を作成できます。

**コンソールから Elastic Beanstalk 環境を終了するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

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

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

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

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

**RDS DB インスタンスを終了するには**

1. [Amazon RDS コンソール](https://console.aws.amazon.com/rds)を開きます。

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

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

1. **[アクション]**、**[削除]** の順に選択します。

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

## 次の手順
<a name="php-laravel-tutorial-nextsteps"></a>

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

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

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

**Example .ebextensions/composer.config**  

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

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

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

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