弊社のこのウェブサイトは長年「Heteml」というレンタルサーバーで運用していたのですが、AWSの「Lightsail」というサービスを使ってみたかったので、試しにLightsailへ移行してみました。
AWS(Amazon Web Services)は大規模サイトでよく使われるクラウドコンピューティングサービス。利用するには専門的な知識が必要になりますが、Lightsailはあらかじめ用意された構成で簡単に使うことができる初心者向けのサービスです。Wordpressなども比較的簡単にセットアップすることができます。
Lightsailのセッティングについては、多くのブログで解説記事があるので検索していただければと思いますが、その中でネームサーバーとSSLの設定でつまづくところがあったので、そこについて書いておきます。
AレコードだけLightsailに向ける
ほとんどの解説記事では、Lightsailの「DNSゾーン作成」で出てくるAWSのネームサーバーを使う方法を紹介しています。
ただ、弊社の場合はネームサーバーごと変更すると不都合があったので、Aレコード(ウェブサイトのドメインとIPアドレスを関連付ける)だけLightsailに向ける方法をとりました。
弊社bondesign.jpのドメインはHetemlの関連サービス「ムームードメイン」で管理していますが、ネームサーバーで少し複雑なことをしています。
ウェブ制作の仕事ではテスト環境をつくることが多く、それ用にとてもたくさんのサブドメインを使っています。
また、メールをGmail(Google Workspace)と結びつけていたりもします。
なので、このネームサーバーをAWSのものにしてしまうと、いちからAWS上で設定しなおさなければならず、ちょっと大変です。
そこで、ネームサーバーは引き続きムームードメインのままにして、AレコードだけLightsailのIPアドレスにする方法をとりました。(ついでにwwwサブドメインもCNAMEで設定しました)
このやり方の情報があまりなかったので、つまづきましたが、以下のページで紹介されていたのを参考にさせていただきました。
「LightsailとムームードメインでwwwなしでWordPress作る方法 | OFF.TOKYO」
弊社はムームードメインでしたが、考え方は他のドメイン管理サービス(「お名前.com」など)でも同じだと思います。
bncert-toolで「ドメインが違うIPアドレスと紐付けられている」と警告が出る
Aレコードの方はすぐ解決したのですが、こちらの方は結構手こずりまして、この記事の本題でもあるところです。
もしかしたらここはAWSのネームサーバーを使っていれば問題にならなかったところかもしれません。
LightsailでセットアップしたWordpressは最初はSSL化(https化)されていません。
SSL化する方法はいくつかありますが、一番簡単なのは「bncert-tool」というツールを使う方法です。
LightsailのWordpressはbitnamiというアプリケーションで構築されますが、「bncert-tool」は、bitnamiが用意しているSSL証明書の設定や自動更新などをしてくれるツールです。
bncert-toolの使い方は、以下のブログを参考にさせていただきました。
「Lightsailをhttpsで使用するためにSSL証明書の自動更新を設定する – おかげデザインBlog」
順番に設定していくと、ドメインのリストを入力したところで警告が出ました。
Warning: The domain 'bondesign.jp' resolves to a different IP address than the one detected for this machine, which is 'xx.xxx.xxx.xx'.
というもので、参考にしたブログにも書かかれてますが、ドメインがLightsailの静的IPではなく違うIPアドレスと紐付けられている、という内容の警告です。
参考ブログには解決方法までは載っていなかったので、ここでつまづきました。
最初はムームードメインで変更したAレコードが反映されるまで時間がかかるのかもと思いちょっと待ってみたり、何度かやり直したり、インスタンスを再起動したりしてみたのですが、一向に改善されません。
LightsailにSSHで接続している状態だったので、試しに「nslookup」コマンド(ドメインから紐付いているIPを調べる)を叩いてみると、確かにLightsailの静的IPとは違うIP(HetemlのIP)でした。
しかし、LightsailからSSHをexitして、自分のmac上でnslookupをしてみると、こちらはLightsailの静的IPを返してきました。
なので、自分のmacの環境下ではドメインとIPはちゃんと紐付いていて、Lightsail上でまだ古いIPを見てしまっているようです。
待てば解決するのかもしれませんが、その間にもサイトではSSL化されてない状態でアクセスされているので、なんとか早く解決したいところです。
解決方法をGoogle検索すると、日本語の情報はありませんでしたが、英語で似た症状について書かれてるページがありました。
「wordpress – bncert says my domain resolves to a different IP address, but it is not – Stack Overflow」
この中でbncert-toolコマンドには、ドメインとIPの紐付けの検証を省くオプションがあることを知り、
sudo /opt/bitnami/bncert-tool --perform_public_ip_validation 0 --perform_dns_validation 0
この方法だとなんと先程の警告は出ず、無事に手順をすすめることができました!
しかし、これで一件落着かと思いきや、手順の最後の方で今度は、
Warning: Certificates may not renew automatically, due to a web server configuration issue.
というエラーが出てきました。
エラーによると「サーバーの設定の問題で自動更新は行われません」とのこと。
bitnamiで使われてる無料のSSL証明書「Let’s Encrypt」は、90日で失効してしまうのですが、通常、自動更新することでずっと使えるようにしています。
なので自動更新が行われないのは困ります。
またここでいろいろ調べていたのですが、ふと気になって、Lightsail上で再度nslookupコマンドをしてみると、なんとLightsailの静的IPを返してくるではないですか!
ということは、回避策のオプションなしでもbncert-toolでエラーが出ないかもしれません。
試しにオプションなしで再度最初からbncert-toolを動かしてみると、問題なくすすみます。
一度「bondesign.jp」ですすめてるので、既に登録済のドメインだという警告が出てきますが、しかし新しく作り直してくれるようなのでそのまますすめると、なんと自動更新しないというエラーも出なくなり、最後まで問題なく完了させることができました。
一度オプション付きで実行したことでIPを認識したのか、単に時間の問題だったのかはわかりませんが、これでなんとかSSL化を完了させることできました。
やっぱり普通のレンタルサーバーの方が簡単
Lighsailをいじってみた感想としては、やっぱりHetemlとかさくらインターネットなどの普通のレンタルサーバー(共用サーバー)の方が断然簡単ということ。
親しみやすい管理画面にはなっていますが、今回のようなSSLの問題もありますし、SSHも必要だし、SFTPには秘密鍵を使うとか、用語も「インスタンス」とか「静的IP」とか慣れてない人には取っつきにくいところがたくさんあります。
弊社ではスペックが必要のないサイトに関しては、レンタルサーバーを使うことで非エンジニアのディレクターも自分でサーバーの設定ができるようにしています。
AWSだと操作できる人が限られてしまい、そこがボトルネックになるところもあるのですよね。
とはいえ、近年のウェブ制作ではAWSはよく利用されているので、積極的に触れていければと思っています。