AWS RDSのデータベースを使用したPHPの掲示板で時刻表示が直らなかった原因

## 初心者がPHPで掲示板を作成しました 
- HTMLやCSSは使っていたことがありますが、初めてPHPを触り掲示板を作成することになりました。
- フォームから投稿した時刻がどうしてもずれてしまい、php.iniを変更してみたり色々と調べてみても修正出来ず、原因に辿り付くまでに時間が掛かりました。
- もし同じようなことで躓く方がいた場合の参考になればと思ったのと、自身のアウトプットのために今回投稿してみました。
- というか少し考えればすぐに分かるかもですが…初心者のため温かい目で見て下さると幸いです。

## 動作環境
- AWS EC2上にLAMP構成としています。
- Linux2
- Apache
- MariaDB
- PHP8.1

## 時刻がズレていた原因 
- 結論から書きますと、原因はRDSの設定でした。
- 「PHPで掲示板を作成しフォームから投稿する」というものから「原因はPHPの設定だ」と信じて疑っていなかった為、PHP上の設定をどうにか修正しようとあれこれ試してみたものの直らず、どれだけ検索しても答えが見付からず頭を抱えていました…。
- よくよく考えてみればデータベースに投稿内容を保存して表示しているのだから、原因はデータベースでは？？？と気付くまでに数日かかってしまいました。

## データベースの時刻設定
- データベースの時刻はデフォルトではUTCで登録されています。
- 時刻設定を日本時間に合わせるためには、**RDSのパラメーター**を変更する必要があります。
- そのため、my.cnfなども修正してみましたが原因はそこでもなく、今回の場合はコンソール上でパラメータグループを新規作成し、セットすることで日本時間に合わせることが出来ました。
- そもそも**パラメータグループって何なの**って話なのですが、パラメータグループとは、RDSのインスタンスに適用される設定のまとまりのことです。今回のように**時刻設定**だったり**文字コード**だったり**キャッシュのサイズ**なんかを設定するためのグループで、一言で言うと**RDSの機能をカスタマイズするための便利なもの**、といった感じです。
- そして、デフォルトのパラメータグループは変更できませんので、この場合は新規でパラメータグループを作成する必要があります。


## RDSのパラーメータグループを変更する手順
- それではパラメータグループを変更していきます。
- まずAWSコンソールにログイン。
- RDSで使用しているデータベースを選択し、データベースの詳細を確認
    - まずはエンジンバージョンを確認してください。今回使用しているのはMariaDBの10.6.14です。
![rds-engine.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/9187f732-6484-159c-8837-a426a1fd51a8.png)
    - 少し下にスクロールしてもらうと、DBインスタンスパラメータグループが表示されています。通常は、デフォルトのパラメータグループ（default_mariadb...）などとセットされているはずです。（こちらはすでに変更後の状態ですのでご承知おきください）
![db-param.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/c459caf0-b23c-4320-a486-8a5a4ea1f718.png)


- では、カスタムパラメータグループを作っていきましょう。左側のサイドメニューからパラメータグループを選択します。
![param-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/f6f016d7-6c95-1ecb-9476-17759681bcc4.png)
- カスタムパラメータグループを作成をします。
![param-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/1d0fc849-9d09-e73b-a22b-ad7a18289d1b.png)

- 最初に確認したデータベースと、エンジンバージョンを選択してください。
    - グループ名は分かりやすい名前にしておきましょう。
    - 入力したら作成を選択。
![param-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/f72c42b0-a612-4846-d25a-7760b2fe326a.png)

- パラメータグループの一覧に戻るので、先ほど作成したパラメータグループを選択→アクション→編集を選択。
![param-set-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/377bc47a-7c98-c43d-e51c-8f4fc87a1a8a.png)

- ずらずらっと色々出て来ますが、「time_zone」を入力して絞り込みます。

![param-set-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/1c07c0e1-e2fc-5237-bc3f-48474860fa32.png)

- そうしたら入力欄に「Asia/Tokyo」と入力し、変更を保存します。
    - カスタムパラーメータ側ではこれで設定はOKです。
![param-set-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/e711e676-3913-6e77-3c02-a4c38520d4f0.png)

- データベースの方へ戻ります。
- 使用するデータベースを選択→変更を押します。
![rds-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/6da3136f-0057-d3f2-c276-b7df56419a9b.png)

- 表示される情報の下の方へスクロールし、DBパラメータグループで、先ほど作成したカスタムパラメータグループを選択。
![rds-param-set.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/984e9a57-b2ae-a1df-58de-426c9d3c659c.png)

- 続行を選択。
![rds-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/fd09aaeb-e0ca-ca25-6d54-a2499b523935.png)

- 新しい値で、先ほど作成したカスタムパラメータグループが選択されています。今回は個人で作成しているwebアプリケーションなので「すぐに適用」を選択し、「DBインスタンスを変更」を押してください。すぐに適用にチェックを入れてもすぐに再起動されるわけではありませんが、データーベースが停止してしまっても問題ない場合はすぐに適用を選択してください。

![rds-param-set2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676304/c16ca175-d85b-fc64-f446-1f373605b5e5.png)

- データベースの再起動後、無事に日本時間に時刻が修正されたのを確認しました。
- 念のためデータベースの詳細から、最初に確認したのと同じように、DBインスタンスパラメータグループが変更されているのを確認してみましょう。


## 最後に
- 最後まで読んでくださりありがとうございました。
- AWSは中々に覚えることが多くて奥が深いですね。しっかり覚えて身につけていきたいと思います。
- また、初心者のアウトプットのため、どこか間違いがありましたらご教示ください。


## 参考にしたページ
- [Amazon RDS DB インスタンスのタイムゾーンを変更する方法を教えてください。](https://repost.aws/ja/knowledge-center/rds-change-time-zone)
- [RDSのパラーメータ変更方法（AWS）](https://qiita.com/takahashi-kazuki/items/6ee903ee07f1283cfaf7)
- [[新機能]Amazon RDSで日本時間が使用可能になりました！](https://dev.classmethod.jp/articles/rds-local-time-zone/)