そろそろaws初めてみよか#6～Elastic Beanstalkによるlaravel～

# はじめに

前回まででCodeStar、EC2、RDSによるlaravel環境が整ったわけですので
次はElastic Beanstalkにチャレンジしてみます。

# Elastic Beanstalkの環境構築

まずはPHPのサンプル環境を作成してみようと思います。
そこからlaravel色に染めましょう(^^♪

Elastic Beanstalkのコンソールから[今すぐ始める]をクリック
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/e5f64e4d-24f8-ae01-a7ae-9a896040b739.png)
アプリケーション名はlaravel、プラットフォームはphp、アプリケーションコードはサンプルを選択します。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/17098a50-e1a0-0f13-c0bd-0a251706b490.png)
数分すると環境が出来上がります。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/8633f49c-f578-17af-3288-26603a539f6d.png)
ダッシュボードのURL欄のURLをクリックするとデプロイされたアプリケーションにアクセスできます。
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/5eb5eba7-61a7-fe46-f1e4-c954b23f7491.png)
PHP7.3.11らしいです。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/733b3b6c-ec15-c026-12d4-d4426794291a.png)

ほぼクリックだけで実行環境ができました。

# Laravelアプリケーションの作成

さてLaravelにするにはどうしたらよいかと言うと、Vendor配下以外のファイルをZIPに固めてアップロードするとデプロイされます。
せっかくなのでチュートリアルに沿った形で進めたいと思います。
[Elastic Beanstalk への Laravel アプリケーションのデプロイ](https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/php-laravel-tutorial.html)


まずは既存のEC2 Laravel環境(前回作成した環境ね)に新規にLaravelプロジェクトを作成します。

```console
[ec2-user@ip-172-31-29-127 ~]$ composer create-project --prefer-dist laravel/laravel eb-laravel
```

環境設定ファイル`.env`をいじります。
変更したのはDB_HOST,DB_DATABASE,DB_USERNAME,DB_PASSWORDです。

```console
[ec2-user@ip-172-31-29-127 eb-laravel]$ cat .env
：
DB_CONNECTION=mysql
DB_HOST=database.culgyynq9ap1.us-east-2.rds.amazonaws.com
DB_PORT=3306
DB_DATABASE=laravel_eb
DB_USERNAME=admin
DB_PASSWORD=********
：
```

次にDB接続を手軽に試すためチュートリアルにあるようindex.phpを修正します。
// DB Connection Testのところから3行分です。

```php:eb-laravel/public/index.php
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);

// DB Connection Test
if(DB::connection()->getDatabaseName()){
        echo "Connected to database ".DB::connection()->getDatabaseName();
}

$response->send();

$kernel->terminate($request, $response);
```

修正したらElastic Beanstalk用にソースをZIPに固めます。

```console
[ec2-user@ip-172-31-29-127 eb-laravel]$ zip ~/laravel-v1-1.zip -r * .[^.]* -x "vendor/*"
```
これをTeraTermならSSH SCPなどで取得します。


# Elastic BeanstalkのLaravel向け環境設定

Laravelはご存じの通りdocument_rootはpublic配下です。
これをElastic Beanstalkにも定義します。

ダッシュボードの設定からソフトウェアの[変更]ボタンをクリックし
TOPにあるドキュメントのルートを`/public`に変更し保存します。

![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/655ca32d-03b6-072c-1df3-7a21cc15ebb4.png)

保存するとElastic Beanstalkが環境変更の取り込みを行うのでしばし待ちます。
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/ebb0e782-93f2-eb11-8185-54ad551b8c0a.png)

これでElastic Beanstalk側の準備が整ったので、[アップロードとデプロイ]ボタンより
先ほどZIP化したソースをアップロードしデプロイします。
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/5adb0946-ee3f-2d26-2801-856c8ba46983.png)

![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/5399f79c-2332-707b-03a7-0f61b7b5246a.png)

しばし処理が走ったのちにURLにアクセスすると御覧の通り
Laravelの初期Home画面と左上に仕込んだDBConnectionのサンプルコードの実行結果が表示されます。

![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/20137ccf-466a-ceae-01fa-8c969f9a2710.png)


# 最後に

あくまで実行環境ですので、artisan migrateなどは他のEC2インスタンスから実行した後にこちらにリリースするイメージでしょうか