AWS Lightsailで構築したWordPressをSSL化する方法

# はじめに
AWS LightsailでWordPressを構築したのですが、SSL化にかなり苦戦したので成功した方法をメモしておきます。

私の場合は、日々の生活ブログ（メインドメイン）と旅行者向けのトラベルガイド（サブドメイン）を公開しているので、メインとサブのそれぞれの設定方法なんかも苦戦する原因となりました。

# この記事で書くこと
ACMのパブリック証明書とCloudFrontを用いて、閲覧者とCloudFrontの間でHTTPSを要求するように設定する方法を書きます。

参考にしたのは以下の記事です。
・[AmazonのVPSサービス(Lightsail)を使い、独自ドメイン・SSL対応したWordPressを構築($3.50〜/月)](https://dev.classmethod.jp/cloud/aws/how-to-install-original-domain-ssl-wordpress-with-amazon-lightsail/)
・[AWSでWebサイトをHTTPS化 その7：CloudFront(+証明書)→EC2編](https://recipe.kc-cloud.jp/archives/11408)
・[CloudFront経由の配信でWordPressのビジュアルエディタが使えない場合](https://jyo-to.okinawa/20170520/1092/)

# この記事で書かないこと
- ロードバランサーを用いる方法
- letsencryptを用いる方法

ロードバランサーは月額18ドルと高コストですし、letsencryptはネットで調べながら導入を試みたのですが上手くいきませんでした。

# ACMでSSL証明書の取得
まずはSSL証明書を作成します。

私の場合はプライマリとサブの２つのドメインがありますが、証明書は以下のように名前を追加することで１つで大丈夫です。上段にサブドメイン、下段にプライマリドメインを登録しています。（順不同です。）
![スクリーンショット 2020-02-23 14.56.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/beca3f50-f181-e3da-e6ca-5fc4e531860d.png)

登録してしばらく待つと、以下のようにステータスが「発行済み」となりますので、これで完了です。後程、赤枠で囲ったCNAMEレコードの名前と値をRoute 53で登録します。
![スクリーンショット 2020-02-23 15.17.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/b5cc30cb-bfbb-8b6c-c055-14d4188b0adc.png)

# CloudFrontの構築
次にCloudFrontの設定をします。

まずはCreate Distributionのボタンを押します。
![スクリーンショット 2020-02-23 19.54.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/c25ad6dd-84f6-511d-3723-2d53c85dfd4e.png)

続いてWebの方のGet Startedを押します。
![スクリーンショット 2020-02-23 17.30.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/882d637b-767b-af73-6b93-61f2cc3144cf.png)

それではプライマリドメインを例にDistributionを作っていきます。Origin Domain Nameは何でも良いのですがここでは「wp1.ドメイン名」としています。サブドメインの場合は「wp2.ドメイン名」などにすると分かりやすいかと思います。
![スクリーンショット 2020-02-23 19.42.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/83d6ca17-ccd3-88eb-b76b-5a79f8d71122.png)
![スクリーンショット 2020-02-24 13.51.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/161a3539-9127-2094-6901-33f729a5a180.png)
![スクリーンショット 2020-02-23 17.33.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/8e3e9b16-66b0-0700-3ab4-eabdd3a40a60.png)

Alternate Domain Name(CNAMEs)にはプライマリドメイン名を入力します。サブドメインの場合は「*.ドメイン名」とします。SSL Certificateでは先ほどACMで登録した証明書を選択します。
![スクリーンショット 2020-02-23 19.48.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/7eb46682-1274-c458-4784-548e3d39097a.png)

その他の項目はデフォルトでOKです。

続いて作成したDistributionに、path-Patternが「/wp-login.php*」と「/wp-admin/*」の場合のBehaviorsを設定します。

作成したDistributionにチェックを入れてDistribution Settingsボタンを押します。
![スクリーンショット 2020-02-23 15.57.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/189c345f-18b9-500d-b1ab-8d5b5e84e78f.png)

Create Behaviorボタンを押します。
![スクリーンショット 2020-02-23 23.11.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/8b33fa51-4529-4084-71e0-577affc150f3.png)

設定内容は「Default(*)」とほぼ同じですが、マイナーチェンジを加えます。以下、変化点だけ表示します。

「/wp-login.php*」のBehaviorsの設定では、Object CachingをCustomizeに設定し、その下にある３つのキャッシュ時間をすべて0にします。
![スクリーンショット 2020-02-24 14.00.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/902f2b46-06d4-9a0f-f082-b75e3fc27f6e.png)


「/wp-admin/*」のBehaviorsの設定では、Whitelist Headersに「User-agent」を追加します。
![スクリーンショット 2020-02-23 16.04.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/32afa6c8-c63f-2c71-2645-5d85e30ab710.png)

CloudFront経由の配信にするとなぜかWordPressのエディタが変になってしまい、この設定をしないと↓のようになってしまいます。
![スクリーンショット 2020-02-23 16.03.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/bd84f97a-10c6-2849-d9b0-bf5305f85670.png)

これでプライマリドメイン用Distributionの設定は完了です。

僕の場合はサブドメイン用にも同様にDistributionの設定をしました。細かい設定内容はプライマリドメインと同じなのですが、Origin Domain Nameだけサブ用は「wp2.ドメイン名」に変更しました。

最終的には以下のように２つのDistributionが登録されます。
![スクリーンショット 2020-02-23 15.43.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/305179fe-c2db-9188-0785-2243d0ea3187.png)

# Route 53の設定変更
最後にRoute 53の設定変更をします。

まずは閲覧者からのサイトドメインへのアクセスをCloudFrontのドメインで解決するようにします。

Aレコードを作成します。名前にはドメイン名を入力し、タイプはAレコードを選択します。ポイントはエイリアスの部分で、デフォルトでは「いいえ」となっているところを「はい」に変更し、エイリアス先でCloudFrontで作成したDistributionのDomain Nameを選択します。
![スクリーンショット 2020-02-24 13.10.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/b21ece42-ea04-b64d-5465-fdda19829c4c.png)

サブドメインがある場合はその設定も追加します。タイプはCNAMEレコードを選び、値にはサブドメイン用DistributionのDomain Nameを入力します。
![スクリーンショット 2020-02-24 13.16.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/dfba6f7b-0945-477b-defa-90d5a12eab6c.png)

次にCloudFrontからLightsailインスタンスへの接続を設定します。

名前にはCloudFrontで作成したDistributionのOrigin Domain Nameを入力します。タイプはAレコードを選び、値にはIPアドレスを入力します。
![スクリーンショット 2020-02-24 13.29.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/59f4fb03-4514-b600-3f11-b1ed1eaf9760.png)

サブドメインがある場合には同じようにAレコードを登録します。
![スクリーンショット 2020-02-24 13.32.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/b3e80b1b-5eae-bc48-bb81-76fd25eda632.png)

最後にSSL証明書のCNAMEレコードを登録します。

「ACMでSSL証明書の取得」の最後のところで確認したCNAMEレコードの名前を値をそれぞれ入力します。
![スクリーンショット 2020-02-24 13.35.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569762/6087ac66-302f-3e8d-bf6e-5aba3f90be7c.png)

これで完了です！