Laravel Vapor を使って Serverless な Laravel アプリケーションをデプロイする


### Laravel Vapor とは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222391/d051e7d5-ff5e-9693-5016-3e1ea756f325.png)


Laravel を AWS Lambda 上で動作させることができる __有料__ のツールで、
Serverless な Laravel アプリケーションを構築することができ、
さらには、S3、RDS、ALB、 等のWebアプリケーションに必要な各種AWSのサービスと連携することができます。

以下のサイトから利用を開始することができます。
https://vapor.laravel.com

利用料金は以下のようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222391/4fa31f29-8325-d750-f5c6-2825f7ffa630.png)

ダッシュボード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222391/b6af2aef-0fb4-3918-4b28-51ba91a8ea5a.png)


### 構築について
基本的には公式からドキュメントが提供されているので、その手順を参考に今回アプリケーションをデプロイしました。
有料のため様子見てる方や、どのように使うのか気になる方向けに構築手順を記載します。

### 環境

`Vapor requires that your application be compatible with PHP 7.3+ and Laravel 6.0+.`
上記が公式が要求する必要環境で、 PHP7.3以上、Laravel6.0を必要とします。

今回自分が構築に使用した環境は以下です。
php : 7.3.9
composer : 1.8.0
Laravel : 6.0


### 事前準備


事前に、Vapor への登録と、AWSの[IAMユーザー](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_users_create.html)の作成が必要となります。
公式からは、複数のAWSサービスを扱うため、IAMユーザーのポリシーを、 `AdministratorAccess` で作成することを推奨しています。

作成した、AWSのIAMユーザーを、 Vaporの TEAM SETTING[^1] に追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222391/1cc01127-b610-0fe4-348d-7ab87d0c6e3c.png)

### Laravel プロジェクトの作成
Vapor にてデプロイするプロジェクトを作成します。

composer を使って、Laravel のプロジェクトを作成します。

```
composer create-project --prefer-dist laravel/laravel SampleProject
```

作成の際は必ず、 `Laravel6.0` を使用してください。
(今回は特に設定の変更や、機能追加はせずそのままデプロイしますのでプロジェクトの作成だけします。)

### Vaporのツールをインストール
作成した、Laravel プロジェクトのディレクトリの直下にて、
デプロイ時に使用するのVaporCLIをComposer でインストールします。

```cmd
$ composer require laravel/vapor-cli
$ composer global require laravel/vapor-cli
```
※ php vendor/bin/vapor で、 VaporCLIを実行できますが、長いので、
以下の説明では、vapor='php vendor/bin/vapor' でaliasを作っています。

インストール完了後、以下のコマンドでVaporにログインします。

```
$ vapor login
```

Vaporのコアパッケージをインストールします。

```
$ composer require laravel/vapor-core
```

### Vapor プロジェクト　の作成
作成した、Laravel プロジェクトのディレクトリの直下にて、コマンドを実行しVapor プロジェクトを作成します。

```
$ vapor init
```
実行中、プロジェクト名とデプロイするAWSのリージョン情報を求められるので入力します。

### 環境の作成

環境用の設定を追加するため、以下のコマンドを実行します。

```
$ vapor env my-environment
$ vapor env:pull production
```
Vapor.yml が以下のような状態になります(あくまで例)

```yaml:Vapor.yml
id: 2
name: vapor-laravel-app
environments:
    production:
        build:
            - 'composer install --no-dev --classmap-authoritative'
    my-environment:
        build:
            - 'composer install --no-dev --classmap-authoritative'
```

### デプロイ
VaporCLIを使って、Laravelのプロジェクトをデプロイします。(先程作成した `production` 環境設定を使います)

```
$ vapor deploy production
```
結果

```
Project deployed successfully. (3m12s)

 =============== ===================================================== 
  Deployment ID   Environment URL (Copied To Clipboard)                
 =============== ===================================================== 
  5079            https://xxxxx-xxxx-xxxxxxx.vapor-farm-xxx.com  
 =============== ===================================================== 
```

### 確認

作成したアプリケーションを確認するには、作成時にできたURLを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222391/f77ac580-eaf8-b49f-8c23-747ffc238971.png)

Vaporのダッシュボードからも作成したプロジェクトが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222391/a24c87e4-4ec0-bc40-86b8-cfff13de3b2e.png)

AWSのコンソールから作成されたLambda関数も確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222391/817c075c-67cf-7711-eb73-b7b15269b681.png)


### まとめ

個人的には、とても簡単にアプリケーションのデプロイができてすごい！ 
とテンションが上がりました！
(Lambda上でLaravelを動かそうとして断念した過去があるからななおさら)
現在早期アクセス段階で、商用利用にはもう少しかかるかなという感じですがとても便利なツールだと思いました。
他のAWSのサービス(S3,RDS,etc) にもつなげるようなので、今後がとても楽しみなプロジェクトです。

この記事を見て、使って見ようとか、興味を持っていただけたら幸いです。


### 注釈
[^1]: クライアントまたはトピックごとにプロジェクトを整理するの方法です、Vapor作成時に自動的に作成されます。