AWS Cloud9でPHP7.1、MySQL5.7、Laravel5.5環境を構築しHerokuにデプロイするまでにやったこと

ちょいちょいつまづいたので自分用にまとめておきます。

### 前提条件
AWS Cloud9の開発環境を新規作成（EC2、Amazon Linuxを使用）したところからスタート。
AWSアカウント自体の作成やIAMユーザの作成などは本稿では扱いません。

### EBSボリュームのリサイズ
まずはこれを行います。
別にやらなくてもいいんですが、AWS Cloud9は初期設定のままだとEBSボリュームのサイズがけっこう小さいです。
![スクリーンショット 2019-07-09 21.48.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223384/ee9bd14f-8fa8-94df-34de-9145a8332ceb.png)
（↑ボリュームサイズが9.8Gしかなく、しかも既に59%を使用しています）

ストレージとして使用するわけではないのでそこまで大容量は必要ないかと思いますが、composerでlaravelをインストールした拍子に使用率が100％に達してしまい、にっちもさっちもいかなくなってしまった経験から最初にある程度余裕をもたせておくことにしました。やり方は下記の記事を参考に。

[AWS Cloud9 で利用している EBS ボリューム領域を拡張する - Qiita](https://qiita.com/ktrkmk/items/8cf1e100da2e717f3be2)

シェルスクリプトを実行して拡張するやり方もあるようなのですが↓私の場合は権限がないよ的なエラーが出てしまってうまくいきませんでした。この方法でうまくいくなら一番簡単かもしれません。

[AWS Cloud9 で Environment を移動またはサイズ変更する - AWS Cloud9](https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/move-environment.html#move-environment-resize)

ボリュームサイズを変更後、確認。とりあえず16Gまで増やしてみました。
![スクリーンショット 2019-07-10 20.36.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223384/9a6defe3-ba55-44ce-63d0-5008763e8158.png)

### PHPのバージョンを7.1に上げる
初期設定だとPHPのバージョンが5.6とかなので7.1に上げます。下記をターミナルで実行。

```
>sudo yum -y update
>sudo yum -y install php71 php71-mbstring php71-pdo php71-intl php71-pdo_mysql php71-pdo_pgsql php71-xdebug php71-opcache php71-apcu
>sudo unlink /usr/bin/php
>sudo ln -s /etc/alternatives/php7 /usr/bin/php
```
ポイントは2行目でMySQLのPDOドライバを一緒にインストールしているところです。

初期設定ではPDOドライバがSQLiteのみとなっているため、あとでMySQLに接続してマイグレーションを走らせようとしたときに`could not find driver`と言われてしまいます。そうならないようにここでMySQLのPDOドライバをインストールしておきます。

PDOドライバを確認するには以下のように実行

```
>php -m | grep pdo
```
初期状態で↑を実行するとおそらく`pdo_sqlite`しか出てこないと思います。
が、先ほどMySQLのPDOドライバを（PostgreSQLのもついでに）インストールしているので下記のような結果になっているはずです。
![スクリーンショット 2019-07-10 20.45.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223384/0c725606-f8f1-84c3-c75d-a3e542304990.png)
PHPのバージョンも無事上がりました。
![スクリーンショット 2019-07-10 20.47.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223384/5ceb68ad-e82d-bcd9-ade4-5290a71221f0.png)

### composerインストール
composerをインストールします。

```
>curl -sS https://getcomposer.org/installer | php
>sudo mv composer.phar /usr/local/bin/composer
```
composerの設定をします。

```
>sudo dd if=/dev/zero of=/var/swap.1 bs=1M count=2048    //ちょっと時間かかる
>sudo chmod 600 /var/swap.1
>sudo mkswap /var/swap.1
>sudo swapon /var/swap.1
>sudo cp -p /etc/fstab /etc/fstab.ORG
>sudo sh -c "echo '/var/swap.1 swap swap defaults 0 0' >> /etc/fstab"
```

### Laravelプロジェクトを作成
Laravel5.5でプロジェクトを作成します。

```
>composer create-project laravel/laravel hoge-project "5.5.*"
```

### MySQLのバージョンを5.7に上げる
デフォルトは5.5とかなので5.7に上げます。これもやっておかないとmigrate時にSyntax Errorが出たりします。下記をターミナルで実行。

```
>sudo service mysqld stop
>sudo yum -y erase mysql-config mysql55-server mysql55-libs mysql55
>sudo yum -y install mysql57-server mysql57
>sudo service mysqld start
```

### その他環境設定
環境に合わせて.envの編集や、タイムゾーンの設定などを行います。

これでローカル（？）の開発環境はだいたいできたので開発自体は行える状況になりましたが、もうひとつだけやることがあります。それはHerokuでMySQL5.7を使えるようにすることです。HerokuのデフォルトDBはPostgreSQLなのでMySQLを使うにはアドオンを追加してやる必要があります。HerokuでMySQLを使う場合、ClearDBが第一候補かと思いますが今回はJawsDBというアドオンを使ってみることにしました。

### JawsDBの追加

```
>heroku addons:add jawsdb
```
（herokuコマンドを使用するにはheroku-cliが必要なので注意）

JawsDBを選んだ理由はMySQL5.7を使用するためです。
ClearDBでもアドオン追加時にオプションでMySQLのバージョンを指定できるらしいのですが、5.7を指定してもなぜか毎回5.5になってしまった（もしかして無料プランだと5.5以外使えないとか？）ので諦めてJawsDBを入れてみることにしました。

Heroku側のDB環境設定を行い、とりあえずマイグレーションが走ってCRUDが正常に行えることは確認できたので一旦これで進めてみようと思っている次第です。