Fargate＋WordPress構築　HTTPS化 ②

# はじめに
[Fargate＋WordPress構築 WordPressが表示されるまで ①](https://qiita.com/holdout0521/items/bde67b8334f3362c8009)の続きです。

# 最終的な構築図
![スクリーンショット 2022-11-23 14.23.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/e7dce1b0-d1d4-4d1a-ef45-06cf46d95c97.png)

# 流れ
- ALBを設置
- Route53を作成
- Dockerfileを作成
- ECRを作成
- クラスターを作成
- タスク定義を作成
- サービスの作成
`↓ここから`
- ACM証明書を作成
- ELBに証明書を設置
- 証明書を設置したCloudFrontを作成
- Route53でCloudFrontへのルーティング設定
`↑ここまで`
- S3を作成し、Wordpressのプラグインで連携
- CloudFrontで画像等のキャッシュ設定
- キャッシュの確認







# ACM証明書を作成
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/cb51bc83-16be-c7c9-3f44-e8ad17a63e32.png">

証明書は、2つ作成します。
　・CloudFront用ACM証明書 （`バージニアリージョン`、ドメイン名:`xxxx.work`）
　・ELB用ACM証明書　（`ELBと同じリージョンで取得する`、ドメイン名:`xxxx.work`）

### CloudFront用ACM証明書を作成
バージニアリージョンでACMを作成します。

ACMコンソールから`証明書のプロビジョニング`の`今すぐ始める`をクリックする。


<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/1de0ffad-8833-9d13-778f-dd660c9d624c.png">

`パブリック証明書のリクエスト`で、`証明書のリクエスト`する。


<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/737f9e1a-7ee4-f91f-7260-e49f0db6815c.png">

ドメイン名：`xxxx.work`と`*.xxxx.work`を入力して、次へをクリックする

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/ba335bc1-1e3d-1689-3bf8-5650c5fe8a3d.png">



　・検証方法の選択:`DNS の検証`
　・タグの追加はしません
`確定とリクエスト`をクリックする
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/f95b97f3-4295-f631-e636-edb3e32d1f91.png">


`Route53でのレコードの作成`をクリックし、作成する。
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/2486f184-5f46-0395-fb0f-cd36ee6ae253.png">

検証完了になるのを待ちます。


### ELB用ACM証明書
ELB用のACM証明書を作成します。
先程のCloudFront用の証明書と作成方法は、以下の`1点を除き同じですので省略`します。
　・リージョンは、ELBが作成されたリージョン
　・ドメイン名：`xxxx.work`と`*.xxxx.work`

同様に検証完了になるのを待ちます。

# ELBに証明書を設置
ELBのコンソール画面の`リスナー`タブの`リスナーの追加`をクリックする。

以下の設定でリスナーの追加する。
　・プロトコル：ポート`HTTPS:443`
　・デフォルトアクション:`転送先:[elbのターゲットグループ]`
　・セキュリティーポリシー:`ELBSecurityPolicy-2016-08`
　・デフォルトの SSL 証明書:`ACMから（推奨）:[先程作成したACM証明書]

<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/d8474ca0-c125-31bd-a384-499650cd3d11.png">



CloudFrontからELBへの通信は、HTTPではなくHTTPSにしたいので、HTTPでのリクエストをHTTPSにリダイレクトします。

リスナーHTTPの編集
　・デフォルトアクションを削除します。

  
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/641f423e-c460-7170-96b2-349ead4c03f3.png">
・アクション追加:
　・`リダイレクト先`
　・`HTTPS:443`
　・`デフォルトホスト、パス、クエリを使用`
　・`301-完全に移動されました。`
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/0757bcfd-ab5a-2f7a-a7ff-9fcbf91312d5.png">

下記図のようにして、`更新`をクリックすると、HTTPのリクエストをHTTPS化してリダイレクトします。
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/d48acf34-bc7c-97e5-472d-aa706c0b715c.png">

URL:`http://xxxx.work/wp-admin/install.php`にアクセスすると、
URL:`https://xxxx.work/wp-admin/install.php`にリダイレクトして、webページが表示されます!


# 証明書を設置したCloudFrontを作成
![スクリーンショット 2022-11-23 14.22.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/ec5d083d-bcdd-864d-8aeb-5c3fc835b9aa.png)


CloudFrontのコンソールの画面から`Create Distribution`をクリックします。
オリジン
　・オリジンドメイン:`[作成したALBを選択]`
　・プロトコル:`HTTPSのみ`
　・最小オリジン SSL プロトコル情報：`TLSv1.2`
　・オリジンパス：なし

デフォルトのキャッシュビヘイビア
　・ビューワープロトコルポリシー:`Redirect HTTP to HTTPS`
　・許可されたHTTPメソッド：`GET,HEAD`



キャッシュキーとオリジンリクエスト
　・`Cache policy and origin request policy (recommended)`:
`キャッシュポリシー`：`CachingDisabled`
`オリジンリクエストポリシー`：`AllViewer`
    CachingDisabledにする必要な理由は、こちらが分かりやすいです。
[CloudFront + WordPress 構成の必須設定](https://cloudpack.media/55598)


設定
　・代替ドメイン名 (CNAME) - オプション:`xxxx.work`
　・カスタム SSL 証明書 - オプション:`[先程作成したacm証明書]`


ディストリビューションを作成をクリックします。




<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/8fcd7433-64da-061e-8e19-ef5341dcb0ab.png">




![スクリーンショット 2021-11-05 22.34.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/68e74fe2-dcc7-fe63-7308-8bddd87a7bcc.png)




<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/7496d850-a8d9-5438-644f-630b3ef34ce8.png">


### 今の設定ですと、CloudFrontでキャッシュにされないため、CloudFrontのキャッシュによる高速配信ができていない状態です。
キャッシュする仕組みは、次回作成します。


# Route53でCloudFrontへのルーティング設定
前回、`xxxx.work`のAレコードは、albにルーティングするように設定していました。
`xxxx.work`のAレコードをcloudfrontにルーティングするよう修正します。

　・レコード名:なし
　・レコードタイプ：`A`
　・ルーティングポリシー：`シンプルルーティング`
　・値/トラフィックのルーティング先:`CloudFront ディストリビューションへのエイリアス`
　　　`バージニア`
　　　`[先程作成したCloudFront]`

`シンプルなレコードを定義`をクリックします。


URL:`https://xxxx.work/wp-admin/install.php`にアクセスすると、webページが表示されます!

<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/23fbaba9-d432-0d3a-b3a1-d2bea1e3d613.png">

# 次回
ただし、今のままですと画像を保存しても、コンテナが停止するとなくなってしまいます。
WordPressのプラグインである[WP Offload Media Lite](https://ja.wordpress.org/plugins/amazon-s3-and-cloudfront/)を使用し、S3に画像を保存することで、コンテナが停止しても画像がひょうじされるようになります。また、CloudFrontで画像をキャッシュする仕組みを次回つくります。

[Fargate＋WordPress構築　S3と連携 ③](https://qiita.com/holdout0521/items/b83f931e16e680e46391)


# 参考
・[CloudFront + WordPress 構成の必須設定](https://cloudpack.media/55598)
・[ALBにCloudfrontからしかアクセスさせない制限方法](https://blog.putise.com/alb%E3%81%ABcloudfront%E3%81%8B%E3%82%89%E3%81%97%E3%81%8B%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%95%E3%81%9B%E3%81%AA%E3%81%84%E5%88%B6%E9%99%90%E6%96%B9%E6%B3%95/)
・[AWSのCloudFrontを設定し、サーバからの応答時間を短くしたい](https://note.com/sasshiii/n/ndb09f3a7fd98#tX1Ne)