昨日、AWSで作ってみたこのBlogなんだけど、ちょっとハマった事があったのでメモで書いておく。
大きくは二つ。
(1)鍵認証のための鍵をSCPでアップロード出来ない問題
(2)Global IPの変更によりWordPressにログイン出来ない問題
この二つのうち、(2)はちゃんと回避出来たけど、(1)は根本的には解決してないので、もうちょっとあとで調べる感じ。
それではそれぞれ見ていく。
(1)鍵認証のための鍵をSCPでアップロード出来ない問題
例のAWS本の通り、このBlogシステムを構築していくと、VPC上に2つのサブネットを作成する事になる。
1. パブリックサブネット
2. プライベートサブネット
1. は所謂DMZ。
ここにWebサーバを置く。
WebサーバはApacheね。
2. はDBサーバ置いてある。
ここは外には解放せず、クローズドな空間。
インターネットの側からこのクローズドの空間に対してはアクセスが出来ません。
ファイアウォール(AWSの場合はSecurity Group)で守られてますしね。
内側からインターネット側へのアクセスも出来ない設定になっています。
(ただ今回、NATインスタンスを使う事でアクセス出来るようにしますが、必要の無い時はNATインスタンスを落としているので基本的にはクローズドのまま)
ただ、1. から2. に対しての通信(ssh)は通すようにしたいので、そこはSecurity Groupで調整。
さてこの時。
2. に置いてあるDBサーバへのログインは、1. にあるWebサーバからsshログインを行う事になる。
つまり「踏み台サーバ」ってやつですね。
なので、次の手順でログインが必要。
a) 手元のクライアントマシン(実機)から、1.にあるWebサーバへsshでログイン
b) Webサーバからsshで2.にあるDBサーバへログイン
この時、a) では証明書が必要なわけで、それ自体はインスタンス作成した時に作成した鍵をダウンロードしてあると思うのでいいんですよ。
で、b) の手順で実施するときも、少なくともこの本に書かれている内容でいけば、同じ鍵を使ってDBサーバへログインする事になるわけです。
でもWebサーバには鍵が無いっすよね。
なので、Webサーバに対して鍵をアップロードする必要があるわけです。
・・・長い前置きすみません。
で、このアップロードの手順について、この本は scp コマンドで実施するように書かれています。
この scp コマンドで、まぁよくある「Permission Denied」で引っかかった、という話です。
(長かった・・・)
権限周りの話なので、Webサーバの、これからアップロードするフォルダの権限を変更する(chmod)だけなんですけれどね。
ググってみたら「とりあえずわかんないからみんなアクセス出来るように chmod -R 777……」みたいなのがあって、ヲイ!とかw
私はもう面倒なんで、mac用のCyberDuckというアプリ使ってアップロードしちゃったんですけどね。
学習のためには多分もう一回環境作ってもうちょっと踏み込めばいいのですけどね(権限周りいろいろ変えるとか)。
まぁハマったポイントとは言わないですが、多分この手の本はあまり考えずに写経のようにやられる方が多いような気もしてるので、ここはまず一つ初級な方は引っかかるポイントかもなー、と思っています。
(2)Global IPの変更によりWordPressにログイン出来ない問題
これは逆にAWS本関係ないんですけどねw
練習のために作ってたWordPress環境ですけど、なんかBlogとかこのままこれ使った方が面白いかも、と思い立ってみました。
そうなると、一度構築してしまったWordPress環境を見るための、GlobalなIPアドレスを変更する必要が出てきます。
AWSはインスタンス起動時に、AWSが管理するIPアドレスを採番してくれるのですが、選択出来ない上、このままだとインスタンス落として再起動するたびに、違うGlobal IPが振られてしまうのです。
せっかくBlogエンジン作ったんだし、このまま運用しようかな、と画策した私は、Elastic IPという機能を使ってAWSから固定IPを一つ借り受けました。
Elastic IPの説明をちょっとだけしますね。
AWSが管理している多数のIPアドレスのうち一つを「予約」するようなものです。
これでGlobalなIPアドレスが利用者に借り出されるわけです。
ちょっと注意が必要なのは「起動しているインスタンスに対して割付してる分には料金は発生しないが、対応してるインスタンスが停止しているとか、Elastic IPアドレスが割り振られていない状態の場合は費用が発生する」ということです。
一応無償期間ってのがあるAWSですが、いろいろやろうとするとお金は結構へんなところでチマチマとられるので要注意。
今回はもうある程度の出費は覚悟していたので、次の事を考えていました。
・Elastic IPを取得して、それをWebサーバに割り付ける
・借り出されたElastic IPと紐付ける、独自ドメイン(このサイトでいうところの「gijin.net」ですね)を取得する
・独自ドメインとElastic IPを紐付けて、DNSに登録
独自ドメインは「お名前.com」というところから。
とりあえず1年間ということで。
すでに「gijin.com」は取られていて(もう15年くらい前から取られてるんですよこれ)、まぁ残念ながら取得出来ませんでした的な。
ということで、以前からちょっと狙っていた「gijin.net」に狙いを定めて、取得w
年間840円とかそんな感じ。
せっかく取得したし、大事に使っていきたいですね。
あ、話がずれた。
それで、DNSにも登録して、という作業をやってから・・・アレ?と。
WordPressにブラウザから接続出来ないんですよ。
あー、そうか、GlobalなIPアドレスも変わったし、そりゃそうだよなー、と。
念の為にWebサーバの再起動を行って、再びsshでログイン。
ちゃんとElastic IPでログイン出来るね、うんうん(まだこの時は独自ドメイン取得の途中だった)。
でもやっぱりブラウザからは繋がらない。
これで困ったなぁ、と。
ちょっと調べてみると、あぁ、WordPressって自分自身のサイトアドレスをDBに持ってるんだな、という事がわかりました。
変更するにはmysqlにログインして、SQL発行してあげないといけない。
wp_options というテーブルで、Option_name列が siteurl と home の2箇所にURLが書いてあるので、そこを変更します。
作業としては次の手順で行いました。
a) DBサーバへsshでログイン
b) mysqlを起動
c) WordPressで使用しているDBを選択
d) select文で siteurl や home の現在の値を確認
e) update文で siteurl と home の値を更新
a)はまぁ割愛。
以下はDBサーバで実施の事。
(踏み台サーバ使っちゃうとついついWebサーバでやっちゃって、あれ、あがんねーなー、って混乱する事あるので要注意ね)
b) mysqlを起動
[code language=”bash”]
sudo mysql -u root -p
[/code]
このあとパスワード聞かれるので、パスワード入力。
c) WordPressで使用しているDBを選択
[code language=”sql”]
use wordpress
[/code]
AWS本の通りにやれば、DB名は wordpress になってるはずなので、これで。
d) select文で siteurl や home の現在の値を更新
[code language=”sql”]
select * from wp_options where option_name = ‘site url’;
[/code]
この最後の「;」を忘れるんだよねーw
このコマンドの結果、以下のように表示されるはず。
+———–+————-+——————-+———-+
| option_id | option_name | option_value | autoload |
+———–+————-+——————-+———-+
| 1 | siteurl | http://xxxxxxxxx/ | yes |
+———–+————-+——————-+———-+
このxxxxxxxxxxとかいうのが、今登録されてるサイトのアドレス。
homeについても同じように確認しとく。
[code language=”sql”]
select * from wp_options where option_name = ‘home’;
[/code]
+———–+————-+——————-+———-+
| option_id | option_name | option_value | autoload |
+———–+————-+——————-+———-+
| 2 | home | http://xxxxxxxxx/ | yes |
+———–+————-+——————-+———-+
e) update文で siteurl と home の値を更新
で、実際にupdateしましょう、と。
[code language=”sql”]
update wp_options set option_value = ‘現在のドメイン・IPアドレス’ where option_name = ‘site url’;
[/code]
私の場合はここが gijin.net になります。
もちろん home の方も同じようにupdate。
[code language=”sql”]
update wp_options set option_value = ‘現在のドメイン・IPアドレス’ where option_name = ‘home’;
[/code]
一応 d) でやったselect文で確認。
+———–+————-+——————-+———-+
| option_id | option_name | option_value | autoload |
+———–+————-+——————-+———-+
| 1 | siteurl | https://gijin.net/ | yes |
+———–+————-+——————-+———-++———–+————-+——————-+———-+
| option_id | option_name | option_value | autoload |
+———–+————-+——————-+———-+
| 2 | home | https://gijin.net/ | yes |
+———–+————-+——————-+———-+
これで見られるようになります。
ちなみに。
このドメインの部分にIPアドレスを指定したら、どうも動きが怪しくなりました。
http://とかの記述を入れればいいのかもしれません。
困った人がいるかもしれないので、一応。
コメント