EC2とRDSでlaravelの環境構築をしたので備忘録

書くこと
---
- 長い前置きと言い訳
- AWSにアカウント登録する
- EC2のインスタンスを作成する
- SSHを使用してEC2に接続する
- VScodeでEC2のコードを編集う出来るようにする
- RDSにてDBを作成し、EC2からRDSに接続する
- RDSをphpMyAdminからも操作出来るようにする
- EC2にLaravelの環境を作る
  - composer update 
  - 500 ERROR
  - ストリームを開けませんでした：許可が拒否されました
  - No application encryption key has been specified.
  - file_put_contents()


長い前置きと言い訳
---
これまで発信というものをして来ませんでした。
今も積極的にするつもりはないのですが、今日１日あまりにはまったので備忘録として壁打ち記事を書いてみます。
対象者は自分なので皆さまに有益な情報は全くないかもしれません。
そして記事を書くつもりなくあれこれ操作したのでまとまっていない・情報が足りない部分もあると思われますが、記事１ページ目としてご容赦願いたい。
あまり詰まらなかった箇所はサクサク箇条書きしていくつもり。

AWSにアカウント登録する
---
実は登録したのは3ヵ月ほど前に遡る。
正直何も覚えていないくらいスムーズに登録したと思う。
EC2のインスタンスを作成する
---
3ヵ月前の自分が **どこのリージョンにインスタンスを立てたか** まったく思い出せない。
久々にやる気になって当然東京(ap-northeast-1)だろうとみてみるも、作成したはずのインスタンスが見つからず、結局立て直し後にオハイオ(us-east-2)に建てたことに気付く。
公式のチュートリアルドキュメントが大変わかりやすかった。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-LAMP.html


SSHを使用してEC2に接続する
---
ここで大変はまる。ターミナルはMobaXtermを使用して接続する。
・AWSコンソールのIAMにて設定したユーザ名が使えるものと思い込む。(実際は ec2-user)
・MobaXtermはPuTTYであるためプライベートキーを返還する必要があることを知らなかった。
公式のドキュメントにあんなに丁寧に書いてあるにもかかわらず目が滑ったためである。
いずれも懇切丁寧に記載されている。
ユーザ名も変えられました。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/putty.html

VScodeでEC2のコードを編集出来るようにする
---
[SSH FS](https://marketplace.visualstudio.com/items?itemName=Kelvin.vscode-sshfs) というプラグインを使用しました。
設定がびっくりするくらい簡単で、setting.jsonから下記をサクッと追記するだけです。

    "sshfs.configs": [
        {
            "name":"VScodedeで表示するわかりやすい名前",
            "root": "/var/www/html",
            "host": "Elastic IP",
            "port": 22,
            "username": "ec2-user　もしくは変更したユーザ名",
            "privateKeyPath": "C:/プライベートキーのパス",
        }
    ],

RDSにてDBを作成し、EC2からRDSに接続する
---
コンソールからDBを作成。余裕こいていたらはまりました。
VPNの設定を変更したためにはまった方の記事を読んだ覚えがあったので諸々defaultで設定したのですが、これがよくありませんでした。
当然ですが、EC2と同じセキュリティグループでなかったために
ERROR 2002 (HY000): Can't connect to MySQL server on 'hoge.rds.amazonaws.com'
流れで作業するって怖いですね。

RDSをphpMyAdminからも操作出来るように
---
VScodeから設定変更大変良き～便利！と調子に乗っていたら無慈悲にERRORが襲ってきました。
「設定ファイルのパーミッションが正しくありません。誰でも書き込み可能になっています！」
mampの場合はアドレス直打ちするとよいとあったのでmampじゃないけれども念のため試す。がしかし通らない。。
少し前の記事ですが [こちら](http://gete.blog.shinobi.jp/Entry/83/) を参考にパーミッションの設定を755に変更したところすんなり通りました。ありがたいです。

【参考にさせて頂きました】
https://hacknote.jp/archives/40002/

EC2にLaravelの環境を作る
---
**はまりポイント１　：　composer update**
下記のようなエラー。

    The following exception is caused by a lack of memory or swap, or not having swap configured Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details
[こちら](https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors%20Solved)にたどり着き、php.iniの設定によるメモリ不足とswapが000であることが原因と推定。
[こちら](https://dev.classmethod.jp/cloud/aws/al2-swapfile-fallocate-ng/)を参考に設定変更し、無事アップデート出来ました。

**はまりポイント２　：　500 ERROR**
無事入れられたと思った矢先にこれです。
[こちら](https://www.kabanoki.net/2524/) を参考に確認したところ.envがsampleしかありませんでした。

**はまりポイント３　：　ストリームを開けませんでした：許可が拒否されました**
logs/laravel.log が開けんとのことで、laravel.logというからファイルを作ってみたらエラー内容がポイント４に移行しました。

**はまりポイント４　：　No application encryption key has been specified.**
[こちら](https://qiita.com/ponsuke0531/items/197c76fcb9300d7c5f36) を参考に設定するとまたエラー内容が５に移行しました。
ちゃんと内容変わってるので一つ一つクリアしていってる感が謎に楽しくなってきています。

**はまりポイント５　：　file_put_contents()**

     file_put_contents(/var/www/html/Laravel/storage/framework/views/a98899461fa7df96140905779c36af262be64fce.php): failed to open stream: Permission denied

[こちら](https://qol-kk.com/wp2/blog/2019/03/13/post-1149/) を参考にし下記のパーミッションを変更。ユーザー権限だとApacheが一時ファイルを書き出せないためのようです。

    chmod 757 bootstrap/cache
    chmod 757 storage/app/public
    chmod 757 storage/framework/cache
    chmod 757 storage/framework/sessions
    chmod 757 storage/framework/views
    chmod 757 storage/logs
5つ乗り越えた先に…
ようやくLaravelのindexを表示させることができました…！！！
正直あのシンプルな画面が出てきたときは「え？もうエラーいいんですか？」みたいな謎の心境になりましたが、ようやく先に進めるので素直に喜びたいと思います。

【参考にさせて頂きました】
https://qiita.com/PKunito/items/31445d4475d4e18fe4d7

おわりに
---
ここまでまとめていると如何にインフラ系の知識が無いかがよくわかりますね。
そしてふわふわ構築しているというか、取り合えず手を動かしてる感を改めて感しました。自分の１日を振り返るってとても重要ですね。
色々なサイトを見すぎて参考になったサイトすべてを記載できている自信がありません。
まだログイン機能なども残っていますし簡単なアプリも実装しながらlaravelの特徴も学んでいきたいので、またこうして壁打ち記事を書くつもりで勉強します。
完全に自分用の内容となっていますが、同じERRORに遭遇した方の役に少しでもなれたら嬉しいです。