ElasticBeanstalkでアプリケーションをデプロイ

※ 2020年に作成した記事です。現在はUIちょっと変わってるかもしれません。

# ElasticBeanstalk(EB)とは

Webアプリケーションの定番構成で構築・デプロイ・管理などを行ってくれるAWSのサービスです。

**EBを使わない場合**
OSやミドルウェアなどの管理も自前で行う必要があります。
![img01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353602/bc3dc27d-0d47-485f-f613-e2359d8354d4.png)

**EBを使った場合**
OSやミドルウェアの管理はEBが行ってくれます。普通にSSH接続なども可能です。
![img02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353602/8af421ba-0a1c-4c3f-c02f-d147b029f0c3.png)

参考：
https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-aws-elastic-beanstalk

勝手に要約してみると、、

* インフラの構成管理、デプロイなどを自動化
* 冗長構成に対応（内部的にはAutoScalingサービス）
* Java/PHP/Ruby/Python/Node/.NET/Goなど各種言語に対応
* デプロイはローリングリリースだけではなくBlue/Greenデプロイメントなどにも対応
* （今回は試していませんが）Dockerにも対応
* バッチ処理を行いたい場合はworker環境で対応

私が担当している案件でも一部利用しています（worker環境ですが、、）。

# 料金について

EBを利用すること自体に料金はかかりません。EBの構築で使用するサービス自体（EC2, ELB, EIPなど）の料金のみかかります。
EC2についてはスポットインスタンスの利用も設定可能になっています。

今回は管理コンソールからEBを使って簡単なLaravelアプリケーションをデプロイしてみたいと思います。

# アプリケーションの準備

今回はデモのためシンプルにLaravelテンプレートをそのままデプロイしてみます。

```
$ composer create-project laravel/laravel eb-example
```

EBへのデプロイはzipファイルで行うため、zipファイルを作ります。

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

デプロイ時は上記のlaravel-default.zipをアップロードすることになります。

# EB環境の作成、デプロイ

管理コンソールからEBを開いて「今すぐ作成しましょう。」リンクを押下します。
![img03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353602/fdc1ebbe-6cb9-c983-bbe2-30433b6a4602.png)

今回は通常のWebサーバをデプロイするので「ウェブサーバー」環境を選択します。
![img04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353602/adaff63e-b53e-d42f-809c-de33a600f9a9.png)

いったん、PHPサンプルアプリケーションの環境を作成してみます。
プラットフォーム：事前設定済みプラットフォーム（PHP）
アプリケーションコード：サンプルアプリケーション
![img05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353602/391bf4e5-1dbb-ed12-bdbf-33d6f10399cc.png)

ちなみに2020年2月時点でPHPプラットフォームで構築されるPHPのバージョンは7.3のようでした。

作成中の状況が表示されるのでしばらく待ちます。。
![img06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353602/5f4c0c1d-cc58-35d3-441e-8cc0f0443646.png)

無事環境が作成されました。
![img07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353602/e7149e4d-d295-16e3-2d28-4fa023376ad1.png)

EBにより作成されたURLを叩いてちゃんと動作しているか確認してみます。
![img08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353602/f9611d85-827a-6bb9-ec6f-8145f1ef6fe1.png)

EBによる環境が正しく作成されていることが確認できたら、本題のLaravelアプリケーションをデプロイするための設定を行います。
Laravelは/publicがドキュメントルートになるのでソフトウェアの変更からドキュメントルートを変更します。
![img09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353602/b077b6b9-fc85-bc43-d2d6-2d6ca405a651.png)

DBサーバとの接続設定やデプロイの方法などもこちらの画面で設定を行います。

最後にLaravelアプリケーションをデプロイします。
zipファイルに固めたLaravelアプリケーションをアップロードします。
![img10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353602/95d52a48-49d5-f92f-fa03-a3c374d688f9.png)

デプロイが完了しました。再度確認してみます。
![img11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353602/eedfca1d-1c27-48b1-265a-4c2db860b27d.png)

正しくデプロイされていることが確認できました。
![img12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353602/aee76e31-375a-5c07-d8cf-a52bb7bbd67e.png)

## おまけ

EC2の管理画面を参照してみると通常通りインスタンスが作成されていることが確認できます。
![img13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1353602/db59a970-895b-00c6-5940-c63b602de822.png)

# まとめ

OS、ミドルウェアの設定は一切行わずにアプリケーションをデプロイすることができました。
EBはcliツールも用意されているため、今回画面から行った操作をコマンドラインからも実行することが可能ですので是非試してみてください！