RDS - 既存のRDSを削除して新たにRDSを作成しWordPress.orgと接続させる

#まえがき
WordPressを作成した当初、DBインスタンスサイズを無料枠のdb.t2.microではなく
db.t3.microを選択してしまい、どんどん課金がされていました（月額890円くらいでした）。
[こちら](https://qiita.com/figgy-pudding/items/17717dd5e30d2f262da3#20210727-%E8%BF%BD%E8%A8%98)に写真を載せております。
前提にも記述しますが、変更しようにも変更できず、新しく作成し直すか激しく悩み、
夜中の2時に起床して、思い切って決行しなんとか7時半くらいに終わりました。
1ヶ月ほど前ですが、船長さんに認めてもらえると思います。まもなくドーレ港です！

#動作環境
・MacBook Air (Retina, 13-inch, 2020)
・Big Sur11.4
・ターミナルシェル：zsh
・Google Chrome

#前提
・既存のRDSですでにWordPress.orgをインストール、接続済み
・RDSのDBインスタンスクラスを変更しようとしたら、

:::note alert
申し訳ありません。DB インスタンス ○○○ の変更のリクエストが失敗しました。
:::
と表示された。
・テンプレートを、開発/テスト -> 無料利用枠に変更したい
・DBインスタンスタイプを、db.t3.micro -> db.t2.micro に変更したい
参考にしたサイト 🔗 [RDSを無料枠でマルチAZ化](https://tetsufuru.hatenablog.com/entry/2019/08/13/231927)

<font color="red">※※</font> インスタンスタイプのみ変更したい場合は、下記のリンクが一番手っ取り早いと思うので、
この作業が何らかのエラーで変更できなかった場合にこれからの順序を行ってください。 <font color="red">※※</font>
🔗 [AWS EC2のインスタンスタイプ変更手順](https://bsblog.casareal.co.jp/archives/4725)

#1. 既存のRDSを削除、新たにRDSを作成
（1）既存のRDSを削除します <font color="red">※※</font> こちらの手順1〜4まで 🔗 [RDS インスタンスの削除] 
(https://scalable-webapp-on-ec2.workshop.aws/cleanup/cleanup1.html) <font color="red">※※</font>
![rds1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/ae999c29-f7aa-5c4f-7c2c-be05c06fbcac.png)

（2）最終スナップショットはもしものために置いておきます <font color="red">※※</font> 全て終了後削除 <font color="red">※※</font>

![rds2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/c5c47bd3-7ef4-f26d-c410-04d541ddc1a0.png)

削除・作成に時間がかかりそわそわしていたので、ポアロのクリスマスを読んでいました。

![rds3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/86d93803-0a88-acb4-3574-c32084b80bd1.png)

（3）新しくRDSを作成します
・変更点：
✔️ 開発/テスト -> 無料利用枠
✔️ db.t3.micro -> db.t2.micro
その他、みなさまの設定で作成してください。

:::note warn
作成中にダッシュボードの上部に詳細表示ボタンが現れるのでクリックし、
設定したマスターユーザー、マスターパスワードを保存しておきましょう。
:::
![rds12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/f1cac142-0f68-935b-e4cd-ef279d5cfcc7.png)
![rds5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/a4d76f5f-f013-05d1-8503-c09f8c3ebd41.png)
（4）変更点をしっかり確認しておきます
db.t3.micro -> db.t2.microのRDSが作成できましたね。
![rds4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/21f2d4b3-0034-5f65-a1fc-dd799c0e2bac.png)

#2. 新しいエンドポイントを設定します
（1）RDS新規作成でエンドポイントが変更されたため、新しいエンドポイントを設定します
（これまで使用していたエンドポイントはRDSを削除したため使用不可になります）
（2）MySQLコマンドでMySQLをインストールします
（3）Webサーバーにログインします

```zsh
ssh -i ~/認証キー保存ディレクトリ/認証キーの名前.pem ec2-user@Elastic IPアドレス
```

例）

```zsh
ssh -i ~/Desktop/ninsyo-key.pem ec2-user@44.44.44.44
```

（4）MySQLをインストールします

```zsh
[ec2-user@ip-○○○~ ]$　sudo yum install mysql
```

（5）データーベースに接続する際にはデーターベースの接続先情報（エンドポイント）が
必要なのでエンドポイントをコピーしにいきます
AWSダッシュボード -> RDS -> 左メニューのデータベース
-> 作成したRDSをクリック -> 下タブのエンドポイントをコピー
（6）コピーしたエンドポイントをターミナルに入力していきます

```zsh
[ec2-user@ip-○○○~ ]$　mysql -h コピーしたエンドポイント -u　root（マスターユーザー名） -p
```

（7）パスワード入力を求められるので、マスターパスワードを入力します（ペースト不可）
（8）Welcome to the Maria DB monitor.と表示されれば、
Webサーバーからデータベースサーバーへ接続することができています！

:::note warn
もしエラーが出てしまったら、
①ユーザー名orパスワード入力ミスを疑う
②データーベースが利用可能になっていない（＝MySQL未接続、
RDS -> データベースで確認、③セキュリティグループの設定ミス）を
確認してみてください。
:::
<font color="blue">※※（9）Ctrl + cでMySQLログアウト、exitでSSHログアウトしますが、
3.（1）でまたすぐにログインするので省略可、その際は、3.の（2）からスタートです ※※</font>

#3. WordPress用のデーターサーバを作成
##①データベース作成
（1）Webサーバーにsshでログインした上でMySQLコマンドでデータベースに接続します

```zsh
[ec2-user@ip-○○○~ ]$　ssh -i ~/Desktop/ninsyo-key.pem ec2-user@44.44.44.44
```

（2）MySQLコマンドでデータベースサーバーに接続し、パスワードを入力します

```zsh
[ec2-user@ip-○○○~ ]$　mysql -h コピーしたエンドポイント -u　root（マスターユーザー名） -p
```

（3）MySQLの中にデータベースを作成します

```zsh　
MySQL [(none)]> CREATE DATABASE 作成したいデーターベース名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Queri OK, 1 row affected, 2warnings (0.06sec)
```
などと表示されたら作成できています。
各コマンドの説明は、こちらが分かりやすかったです。🔗 [よく使うMySQLコマンド集](https://qiita.com/CyberMergina/items/f889519e6be19c46f5f4)

（4）ちゃんと作成できているか確認します
作成したデータベース名が記載されていれば作成されています。

```zsh
MySQL [(none)]>　SHOW DATABASES;
```
![rds6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/6e6aa72a-e147-10a8-bef0-25f3444c58d9.png)


##②WordPress用のユーザーを作成します
（1）ここでは、wordpress_userというユーザー名で作成していきます

```zsh
MySQL [(none)]>　CREATE USER 'wordpress_user（作成したいユーザー名）'@'%' IDENTIFIED BY '接続時のパスワードをここで作成し、入力する';
Queri OK, 0 row affected(0.03sec)
```

などと表示されたら作成できています。

（2）作成したユーザー（wordpress_user）にデータベースを操作できる権限を付与します

:::note alert
これを行わないとWordPressユーザーが
データーベース内でテーブルを参照したり、作成することが不可になってしまいます。
:::

```zsh
MySQL [(none)]>　GRANT ALL ON wordpress_user.* TO 'wordpress_user'@'%';
```

（3）権限付与しただけなので、MySQLに設定を反映させます

```zsh
MySQL [(none)]>　FLUSH PRIVILEGES;
```

（4）ユーザー（wordpress_user）が作成されたか確認します

```zsh
MySQL [(none)]>　SELECT user , host FROM mysql.user;
```

ユーザーの一覧が表示され、作成したユーザー（wordpress_user）が
下記のように表示されていれば、どこからでも接続OKの設定が完了です。
![rds8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/a1d5c67a-fff1-1474-c240-30818ddf2d1c.png)

（5）作成したユーザーでMySQLに接続できるか確認します
一旦ログアウトしてから再ログインし、MySQLに接続します

```zsh
MySQL [(none)]>　exit
Bye
[ec2-user@ip-○○○~ ]$　mysql -h エンドポイント -u wordpress_user -p
Enter password:
Welcome to MariaDB monitor..
```
![rds7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/babaf2e2-46df-79be-ea39-f78ef276a764.png)


#4. WordPressを再インストール
（1）Webサーバーにsshログインし、WordPressに必要なライブラリをインストールします

```zsh
[ec2-user@ip-○○○~ ]$　sudo amazon-linux-extras install -y php7.4
```

yumコマンドではなく、amazon-linux-extrasコマンドを使用します。
EC2のOSはAmazon Linux2ですが、extras libraryというパッケージ群が存在し、
その中にphpの最新版が存在し、使用することができます。

（2）php関連の必要なライブラリをyumからインストールします

```zsh
[ec2-user@ip-○○○~ ]$　sudo yum install -y php php-mbstring
```

:::note
先にphp7.4をインストールしておくと、7.4に対応したphp関連のライブラリを
インストールしてくれるのでこの順番で行うようにしましょう。
:::

（3）Webサーバーのホームディレクトリに移動します

```zsh
[ec2-user@ip-○○○~ ]$　cd ~
```

（4）WordPressの最新版をダウンロードします

```zsh
[ec2-user@ip-○○○~ ]$　wget https://ja.wordpress.org/latest-ja.tar.gz
```

（5）インストールが完了したらファイルを確認します

```zsh
[ec2-user@ip-○○○~ ]$　ls
latest-ja.tar.gz
```

（6）解凍します

```zsh
[ec2-user@ip-○○○~ ]$　tar xzvf latest-ja.tar.gz
```

（7）解凍が完了したら、ファイルの中身を確認します
下記のようにwordpressと表示されていれば、ディレクトリが作成されています。

```zsh
[ec2-user@ip-○○○~ ]$　ls
latest-ja.tar.gz wordpress
```
<font color="red">※※</font> ソースとディレクトリは不要だぜという方は、以下で削除してください。 <font color="red">※※</font>

```zsh
[ec2-user@ip-○○○~ ]$　rm -r latest-ja.tar.gz wordpress
```

（8）WordPressのディレクトリに移動します

```zsh
[ec2-user@ip-○○○~ ]$　cd wordpress/
```

（9）WordPressのプログラムをApacheから見える場所に移動させます

```zsh
[ec2-user@ip-○○○~ ]$　sudo cp -r * /var/www/html/
```

（10）コピーが完了したら、WordPressのファイルの所有者（グループ）を変更します

```zsh
[ec2-user@ip-○○○~ ]$　sudo chown apache:apache /var/www/html/ -R
```
これでApacheからWordPressのファイルを参照できるようになりました。

（11）（10）の設定を反映させるためにApacheを再起動します
①Apacheの起動状態を確認します

```zsh
[ec2-user@ip-○○○~ ]$　sudo systemctl status httpd.service
Active: active(running) since 土 2021-06-12...
```

:::note alert
起動していなかったら、
sudo systemctl start httpd.service
を実行してください
:::

②Apacheを再起動します

```zsh
[ec2-user@ip-○○○~ ]$　sudo systemctl restart httpd.service
```

（12）起動状態の確認を行うため、①のコマンドを再実行し、①と同じように
Active: <font color="yellowgreen">active(running)</font> since .. と表示されればWordPressの再インストールは完了です。

#5. データベースと接続するための設定
（1）WordPressサイトに移動すると、
本来の初期設定画面が表示されずデータベース接続確率エラーが表示されます
![rds11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/bc20d4a1-563f-2a74-1c71-bfa24abe933b.png)
と表示されるので、
・データベース名
・ユーザー名
・パスワード
・データベースのホスト名（エンドポイント）
をwp-config.phpに直接書き込んでいきます。

:::note warn
上記を登録すると、wp-config.phpファイルが/var/www/html/配下に作成されます。
WordPressはそのファイルに記載されている内容を読み込んでデータベースと接続します。
:::

（2）wp-config.phpファイルを編集しにいきます
ターミナルにてsshログインし、/var/www/html/に移動、wp-config.phpを開きます

```zsh
[ec2-user@ip-○○○~ ]$　cd /var/www/html/
[ec2-user@ip-○○○~ ]$　nano wp-config.php
```
<font color="red">※※</font> 今回はvimではなく、nanoで作業しました。 <font color="red">※※</font>

（3）以下のdefineにMySQLの設定を書き込みます（移動したてはデフォルトの値です）

```zsh
define( 'DB_USER', 'データベースのユーザーネーム（ここではwordpress_user）');
define( 'DB_PASSWORD', 'データベースのパスワード');
define( 'DB_HOST', 'MySQLのホスト名（エンドポイント）');
define( 'DB_CHARSET', 'utf8mb4');
```

![rds10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/383691e2-5a2e-273b-cca9-1dc7e45a03bf.png)
（4）Ctrl + s、Ctrl+xで保存、終了します
（5）一応exitでログアウトします

（6）WordPressをリロードすると初期設定画面が表示されるので、
サイト名：前と同じでなくてOK
ユーザー名：前と同じ（一応）
パスワード：前と同じ（一応）
一応としたのは、Chrome側でパスワードが保存されていたためと、
鬼が出るか蛇が出るか、緊張して前と同じにしたら同じように使えるかもと思ったからです。

（7）接続完了です！！！！ここまでおつかれさまでした！！！！
無事、同じドメイン名のWordPressへアクセスできるようになりました。
<font color="red">手動で取得したスナップショットは必ず削除してくださいね。お金がかかってしまいます。</font>
前回（削除した）のRDSでインストールしたWordPressのテーマやプラグインも残っています。
WP mail SMTPやアンチスパムはもう一度設定し直したり、画像はS3 -> CloudFrontに再設定
したりする必要はありますが、きちんと使えるようになっているはずです。

#あとがき
かなりの長文になってしまいました。読み辛い点や設定の二度手間もあるかと思います。
失敗したらどうしようかと頭掻き毟るくらい悩んでいたので解決できて本当に安堵しました。
手順はノートに記載していたので、接続情報を変更する際にwp-config.phpファイルを
直接編集することを思い出せました。デジタルもアナログも思い切りも大事ですよね。
ゲームだと「さいしょから」の選択、パソコンだと初期化ができますが、
やはりサーバとなるとそんな簡単にはいきません。白紙にしたいと何度も思いました。
ハードなつづきからをやり終えた気分です（ロックマンエグゼ2でお願いします）。

#<font color="blue">補足</font>
この記事は2021/06/25時点に実行したものであり、RDSを削除 -> 作成のみだったため、
削除したRDSでインストールしたWordPressのテーマやプラグインも残っておりました。
2021/07/26に、2回目としてCyberDuckでWordPressのディレクトリごと削除したあと、
もう一度この手順を踏んだのですが、インストール済みプラグインとテーマは残っており、
記事のみが初期化、S3 -> Cloud Front、プラグイン有効化の設定を行う状態でした。
2回目の理由はphpMyAdminで躓いてしまったからです。すっきり1からやり直したかったので
RDSを削除する際のスナップショットは不要と判断し、作成していません。
1回目より時間はかかりませんでしたが悩んでいた3日間はずっと手汗まみれでした。
勉強を重ね、リベンジしようと思います。

ここまでお読みいただき、ありがとうございました。
ご指摘等ございましたらご教示くださると幸甚です。

#参考
・.htacess設定について
🔗 [Amazon Linux 2 で LAMP をインストールして WordPress 環境を構築する。](https://qiita.com/kooohei/items/0d8cf32403b99bd3914a)