AWS管理のWordPressにログインできない問題を解決
- 【前提】AWS及びWordPressの構築状態
- 【問題】WordPressにログインできなくなった
- 【対処法】TeraTerm上からデータベースにアクセスする
- 【まとめ】パブリックとプライベートを意識しましょう
- 【参考】調べていた非常に参考になったサイト
【前提】AWS及びWordPressの構築状態
前の記事にも書きましたが、AWSでサーバをレンタルしました。
mame-mame.hatenadiary.com
サーバ上で構築したものは以下です。
VPC(仮想プライベートネットワーク)構築
VPC内ではプライベートサブネットとパブリックサブネットを定義しました。
外部からのアクセスはパブリックサブネットに限定して、プライベートサブネットはパブリックサブネットからの限られた手段のアクセスだけを受け付ける、というものです。
NATを配置して、外部からのアクセスを誰に受け渡すかハンドリングする物も備えました。
EC2、RDSを構築
EC2は汎用的コンピュータマシン、RDSはデータベース特化型のコンピュータマシンになります。
EC2をパブリックサブネット、RDSをプライベートサブネットに配置しました。
RDSからはEC2からのMYSQL形式(データパケット:3306)の通信のみを受け付けます。
EC2は外部とのやり取りをSSHやHTTP、HTTPSで通信できます。
EC2はSSHアクセス時の認証鍵を作成しました。
【問題】WordPressにログインできなくなった
さて、WordPressを作ったうえで気づいたのですが、
作ったサイトのアクセスURLはEC2のパブリックDNS名を元に作られています。
このアドレスは、EC2作成時に自動で付けられた物です。
アドレスはこちらの都合とは関係なく違う名前になったりしてしまう事があるそうです。
例えばEC2を一度メンテナンスのために停止して後、再度立ち上げなどしてもアドレスが変わります。
サイトを運用する上で、途中からアドレスが変わるのは非常に不親切ですね。
固定アドレスにするにはIPを取得する必要があります。
AWSでは固定IP=Elastic IPという物を提供しています。
Elastic IPを1つ取得して自ら構築したEC2のアドレスをこちらに上書きしました。
これで万事解決…という訳にはいきませんでした。
何故ならWordPressは昔のアドレスを参照しているからです。
おそらく正確には、WordPressに紐づくデータベースが昔のアドレスを参照しているようです。
新しいアドレスでWordPressにアクセスを試すと、初期画面が出てきます。
ユーザ名、パスワードを入力すると、認証リクエストがデータベースを経由して古いアドレス上を参照しようとします。
これはマズイ、という事になりました。
昔の古いアドレスは自動割当てだったためもう戻ってこない…
WordPressのUI上ではログインもできないから設定変更できない…
今回、この問題に対して、色々と試行錯誤する事で何とか直す事が出来ました。
個人の備忘録も兼ねて記事に残しておきます。
【対処法】TeraTerm上からデータベースにアクセスする
問題の項に書きましたが、今回の原因はデータベース情報が古い事です。
この情報を新しくしてあげましょう、データベースを書き換えます。
しかしデータベースってプライベートサブネットにあって外部からアクセスが…、いやいや、それならばパブリックサブネットにあるEC2にアクセスして、EC2からMYSQLという手段でアクセスしてあげれば良いのです。
TeraTermからEC2にアクセス
アクセスの仕方は分かりますね、ホスト名にEC2のアドレス(ElasticIPで設定した新しいアドレス)を入力します、パスワードは以前発行した鍵を使用します。
EC2からRDSにアクセス
以下のコマンドを打てば良いです。
mysql -h (RDSのエンドポイント=WordPressのホスト名) -P 3306 -u (RDSのユーザ名) -p
するとパスワードを促されます。
パスワードを打つと、MYSQL制御をする事ができます。
後はデータベースの操作
WordPressのDBがあるか確認してみます。
mysql> show databases;
すると、wordpressというDBがあるはず。
wordpressの編集に入りましょう。
mysql> use wordpress;
現在のアドレス設定を確認するには以下のコマンドを打ちます。
mysql> select * from wp_options where option_name = 'siteurl'; mysql> select * from wp_options where option_name = 'home';
siteurlとhomeは、それぞれWordPressアドレスとサイトアドレスというものです。
(WordPressサイトの管理者画面にて設定→一般から、上記の情報を確認する事も出来ます)
WordPressアドレスは、WordPressコアファイルが存在するアドレスです。
サイトアドレスは、ユーザーがブラウザに入力してWordPressブログにアクセスするためのアドレスです。
この情報を新しいアドレスに変えてあげれば良いです。
UPDATE wordpress.wp_options set option_value=’http://(新しいパブリックDNS名)’ where option_name=’siteurl’; UPDATE wordpress.wp_options set option_value=’http://(新しいパブリックDNS名)’ where option_name=’home’;」
どちらの設定にもhttp://の部分を含め、最後にスラッシュ「/」を含めないでください。
【まとめ】パブリックとプライベートを意識しましょう
自分自身で構築したのに、どうやったらDBにアクセスできるんだろう、と私は迷っていました。
唯一開けてあった穴からもぐりこむべし、です。
しかし、プライベートサブネットは安全だ、というのは完全に言い切れないな、と自分自身がアクセスできた事で分かりました。
私と同じ手順を取れば外部からのアクセスも出来てしまうという事です。
やらないよりやった方が良いのでしょうけど、少し懐疑的になりました。