mameブログ

mameという男がやりたい事をやっている記録

AWS管理のWordPressにログインできない問題を解決

【前提】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をインストール

Teratermを使ったSSH通信によってEC2にアクセスします。
EC2に必要なソフトウェアをインストールします。
PHPApacheMYSQL、そしてWordPressです。
インストールの手続きは他の有識者のHPに色々載っていますのでそちらで。

WordPressとRDSの紐づけ

ブラウザ上でEC2のパブリックDNS名を引用して以下の文言を打ちます。

http://(EC2のパブリックDNS名)/wp-admin/setup-config.php

するとWordPressが立ち上がっている事が確認できました。
WordPressサイト上でデータベースの設定を促されます。
ここでRDSのエンドポイントをデータベースのホスト名として指定します。
テーブルの接頭辞は「wp_」としました。
接頭辞は今後データベースをコマンド上で変更する時に必要です。


以上により、AWS上に構築したシステムにWordPressを立ち上げました。

【問題】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://の部分を含め、最後にスラッシュ「/」を含めないでください。


これで設定完了です。
新しいパブリックDNS名を使ってブラウザにWordPressが問題なく表示されたと思います。

【まとめ】パブリックとプライベートを意識しましょう

自分自身で構築したのに、どうやったらDBにアクセスできるんだろう、と私は迷っていました。
唯一開けてあった穴からもぐりこむべし、です。
しかし、プライベートサブネットは安全だ、というのは完全に言い切れないな、と自分自身がアクセスできた事で分かりました。
私と同じ手順を取れば外部からのアクセスも出来てしまうという事です。
やらないよりやった方が良いのでしょうけど、少し懐疑的になりました。

【参考】調べていた非常に参考になったサイト

kussuue.com
hacknote.jp
blog.manabusakai.com