WordPressをAWS で構築し独自ドメインおよびhttpsで公開する手順②

前回は、WordPress をインストールしてアクセスできるところまで実施しました。

今回は、独自ドメイン(blog.nijot.com など) で https 通信でアクセスできるように設定してきます。

やること一覧

以下が一通り実施する内容です。1〜7 までは前回実施しました。今回は8 〜 11までを実施します。

  1. AWS アカウントを作成し、セキュリティなどの対策を施す
  2. IAM ユーザを作成する
  3. VPC を作成する(オプション)
  4. EC2 インスタンスを起動する
  5. Elastic IP アドレスを割り当てる
  6. EC2 インスタンスにLAMP 環境を構築する
  7. EC2 インスタンスにWordPress をインストールする
  8. ドメイン名を取得する
  9. Route53 にWordPress ドメインを設定する
  10. https アクセスができるように構成変更する
  11. さぁ、ブログを書いてみよう!

ドメイン名を取得する

まず、注意点ですがドメインを取得するにはある程度お金がかかります。なので、ここからの手順はよく考えて実施するようにしてください。
金額は、どのようなドメイン(.com とか .orgなど) をとるのかにより変わります。.com / .org は比較的安いですが、.co.jp や .jp ドメインなどは値段が高めです。
AWS ではRoute 53 というサービスを利用してドメインを取得することができますが、ドメイン取得サービスは世の中に数多く提供されていますので、どれを利用しても構いません。またRoute53 では取得できるドメインが限られていますので、以下のドキュメントで確認してみてください。特に日本の会社で利用するco.jp ドメインはRoute53 では取れませんので、.co.jp ドメインが必要な場合は、他のドメイン取得サービスを検討しましょう。

登録できるドメイン Amazon Route 53 - Amazon Route 53
Amazon Route 53に登録できる最上位ドメインのリスト。

Route 53 でドメインを取得する際の手順は以下のドキュメントを参照しましょう。ドメインの料金も参照できます。

Registering a new domain - Amazon Route 53
Amazon Route 53 コンソールを使って新しいドメインを登録するときは、以下の手順を実行します。

Route53 を利用してドメインを登録すると、自動的にRoute 53 のホストゾーンも作成されます。なお1つのホストゾーンあたり0.5 ドル/月 の料金がかかりますのでご注意ください。

Route53 にWordPress ドメインを設定する

次に実施することは、DNS レコードの設定です。Route 53 でドメイン登録した場合は、すでにホストゾーンが作成されていますので、ホストゾーンにEC2 インスタンスへ名前解決するDNS レコードを追加します。以下のドキュメントが参考になります。

トラフィックのルーティング Amazon EC2 インスタンス - Amazon Route 53
ルート53を使用してトラフィックをAmazon EC2インスタンスにルーティングします。

もし、Route53 ではない別のドメイン登録サービス(お名前.com など)でドメインを取得した場合は、ホストゾーンから作成する必要があります。その場合は以下のドキュメントを参考にしてください。

パブリックホストゾーンの作成 - Amazon Route 53
ドメインのホストゾーンを作成し、インターネットでそのドメインへのトラフィックをルーティングする方法を DNS に指定するレコードを作成します。

https アクセスができるように構成変更する

ここまでで、独自ドメインでWordPress に HTTP (http://blog.nijot.com/など) のアクセスができるようになりました。ですが、http 通信はセキュリティ上問題があります。WordPress へのログイン情報なども平文でインターネット上で通信されますので、悪意のある第三者にログイン情報を盗聴される可能性があります。盗聴以外にも成り済まし、データの改ざんななど http 通信では様々なリスクがあります。これを防ぐためにブログサイト全体をhttps 通信ができるように構成しましょう。https というのは、SSL/TLS 上で http 通信を行うプロトコルです。

https 通信には、ウェブサーバーのSSL/TLS の有効化とCA 署名証明書が必要となります。
SSL 通信では、暗号化のためのキーを公開鍵暗号化方式でウェブサーバーとクライアント(ブラウザ)の間で安全にやりとりします。この際に利用する公開鍵が、確かにそのドメインの所有者が発行した公開鍵であることを確認する必要があります。そのため、公開鍵にはドメイン所有者がデジタル署名をつけます。CA 署名証明書というのは、CA(Certification Authority) = 認証局 が、その署名が確かにドメイン所有者の署名であることを確認した証明書という意味です。

CA 署名証明書を作成するには一般的に費用がかかります。どの程度費用がかかるかは認証局が確認するレベルによります。単にドメインの所有者にメールが届くというレベルの確認から、実際に会社の所在地の確認や人が面談するといったレベルの確認もあり、そのレベルにより費用が異なります。
今回はメールが届く確認レベルの証明書を無料で作成できる Let’s Encrypt 認証局を利用する方法がありますので、そちらで実施します。Let’s Encrypt に関しては、以下のソースを確認してください。

https://letsencrypt.org/
https://ja.wikipedia.org/wiki/Let%27s_Encrypt

それでは、具体的な手順ですが、以下のドキュメントに手順が載っています。まずはこの手順のステップ1を完了してください。なお、https 通信をする場合は、EC2 インスタンスのセキュリティグループに https (443ポート) の許可ルールを忘れずに設定しておきましょう。

チュートリアル: Amazon Linux 2 に SSL/TLS を設定する - Amazon Elastic Compute Cloud
Amazon Linux 2 と Apache ウェブサーバーを実行している単一の EC2 インスタンスで SSL/TLS をインストールして設定します。


上記で自己署名証明書でのアクセスができるようになりましたが、一般的なブラウザだと警告が出ます。(俗にいうオレオレ証明書です。)
このあとにLet’s Encrypt 認証局の証明書を作成します。
Let’s Encrypt は自動化により証明書を作成できますが、自動化を担うソフトウェアが、Certbot というWebサーバにインストールして利用するLet’s Encrypt 認証局のエージェントになります。このCertbot をEC2 インスタンスにインストールして構成します。手順に関しては、以下のドキュメントの手順を実施します。

チュートリアル: Amazon Linux 2 に SSL/TLS を設定する - Amazon Elastic Compute Cloud
Amazon Linux 2 と Apache ウェブサーバーを実行している単一の EC2 インスタンスで SSL/TLS をインストールして設定します。

※ 今回は、HTTPS 化の方法としてウェブサーバの構成でSSL 化していますが、それ以外の方法としては、ELB (Elastic Load Balancing)という負荷分散のためのサービスを利用するという方法もあります。ELB は12ヶ月間無料利用枠の中で月当たり750 時間分無料で利用できますが、基本は追加コストがかかる構成になります。ELB を利用した構成はおいおい、ELB が必要になるシチュエーションになったら紹介したいと思います。(ブログがすごく人気が出たとかですね、頑張って記事書きます!)

さぁ、ブログを書いてみよう!

これで、独自ドメインで https の通信 (https://blog.nijot.com など)でブログが公開できました。あとは好きにブログを書きましょう!

次に考えることは?

このあと考慮すべき点は何でしょうか?ブログを運用していくには以下のようなことを考慮する必要があります。

  • EC2 インスタンスが落ちたらどうするの?
  • 何か致命的な問題でWordPress 全体が故障してしまったら、どうやって復旧させればいいの?そのためのバックアップはどうやって取ればいいの?
  • サーバのストレージの容量は足りているのか?もし足りなくなったらどうするのか?もしくは足りなくなりそうってどうやって判断するのか?
  • ブログの人気が出てきて性能が追いつかなくなってしまったらどうするのか?
  • DDoS 攻撃など悪意のある攻撃を受けたらどうすればいいの?

上記考慮点の中で、拡張性や可用性を考慮した小・中規模向けのWordPress アーキテクチャを自動構築するCloudFormation テンプレートをgithub にて公開しています。興味のある方は以下のブログ記事をご参照ください。