Well Architected Frameworkを意識して自分なりにアーキテクチャ設計・構築をしてみた。＜Route53、ACM編＞

#HTTPS化

##ACM
事前にドメインを取得して、Route53にホストゾーンの作成を行っています。

**注意**
ALBで利用する証明書はALBのあるリージョンで、Cloudfrontで利用する証明書は必ず**「バージニア北部」**で取得して下さい。

それではマネジメントコンソールの「Certificate Manager」から証明書の発行を行います。
![スクリーンショット 2020-09-26 23.36.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/8c4390d3-a43a-f32e-7fba-5226bbea39a2.png)

今回は一般的な用途ですので、「パブリック証明書のリクエスト」を選択して下さい。
![スクリーンショット 2020-09-26 23.36.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/05ab8f6c-a7dc-0da7-2911-071f419a17db.png)

ドメイン名の登録を行います。

この時、複数のドメインを追加することも可能です。
また、「*.example.com」のようにワイルドカードで追加することも可能ですので、サブドメインを使うのであれば、追加しても良いでしょう。

「*.example.com」で発行を行った場合、「example.com」は適用されないので、別で登録する必要があります。

![スクリーンショット 2020-09-26 23.37.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/129cf217-45e2-3f8d-7035-85a9fcee0772.png)

今回は「DNSの検証」を選択します。
![スクリーンショット 2020-09-26 23.37.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/26fd8e50-af73-bc63-13ef-092f95ca56ec.png)


「Route53でのレコードの作成」をクリックすると、ACMが自動でCNAMEのレコードを追加してくれます。

![スクリーンショット 2020-09-26 23.38.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/56508ba4-a345-0431-1304-b849962a7dc2.png)




検証に少し時間がかかるので、今のうちにALB用の証明書も発行しておきます。

状況が「発行済み」になれば完了です。
![スクリーンショット 2020-09-27 3.03.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/1b904b39-dd02-599b-2c23-ada06f36a6e1.png)



Cloudfrontでカスタムドメイン（デフォルト以外のドメイン）を使用する場合はALBでのHTTPS化も必要です。
まずはALBのHTTPS化を行いましょう。

リスナーを「HTTPS」→「HTTPS」に変更します。

リスナーを選択して「編集」に進んで下さい。
![スクリーンショット 2020-09-27 3.07.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/68226436-49f7-1f44-0dd1-8750f6926cee.png)


「プロトコル:ポート」→「HTTPS:443」に変更
「デフォルトのSSL証明書」から先ほど作成した証明書を選択をして下さい。

![スクリーンショット 2020-09-27 3.07.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/affc44f6-349b-0658-9489-3c8151aa1986.png)


次にCloudfront側でのHTTPS化を行います。

「Distribution」の設定から

|設定  |項目  |
|---|---|
|Alternate Domain Names  | ドメイン名 |
|SSL Certificate  | 先ほど作成したCloudfront用の証明書 |

を設定します。
![スクリーンショット 2020-09-27 3.06.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/ba8772cb-e264-9a8d-3b0f-a10635374469.png)

また、Behaviorの設定の

|設定  |項目  |
|---|---|
|Viewer Protocol Policy  | Redirect HTTP to HTTPS |
を設定することで、Cloudfront側でリダイレクトの設定を行うことができます。

**補足**
Cloudfrontを使わない場合はALBのリダイレクト機能を設定することで同じようなことができます。

![スクリーンショット 2020-09-27 3.06.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/df7b9617-efe9-a723-d602-e62ada53bf5f.png)


最後に、「Route53」にてレコードの追加を行えばHTTPS化の完成です。
![スクリーンショット 2020-09-27 3.08.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/f62b47f4-dd5e-1345-c48a-d2a88b65b507.png)










#Route53


##ヘルスチェックの有効化
Route53のヘルスチェックは3種類あります。

#####ヘルスチェックの種類
+ エンドポイントをモニタリングするヘルスチェック
    + IPアドレス OR ドメイン名 に対してTCP接続を確立しようと試み、正常かどうかを判断する。

+ 他のヘルスチェック (算出したヘルスチェック) を監視するヘルスチェック
    + 「エンドポイントをモニタリングするヘルスチェック」を複数使用し、AND、ORで制御可能なヘルスチェック

+ CloudWatch アラームをモニタリングするヘルスチェック
    + Cloudwatchを利用したヘルスチェック
    + ユースケースとしてはDynamoDBへのスロットル読み込みイベント数や正常に機能していると推測される ELBの数などの CloudWatch メトリクスのステータスをモニタリングして判断を行う　みたいな使い方が出来ます。


フェイルオーバーを実装する為にヘルスチェックを関連付ける場合は基本的には「エンドポイント」で作成すればいいかと思います。




![スクリーンショット 2020-09-27 3.44.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/9623f987-d5d4-7eed-3b54-f2ff48f7abc1.png)

SNS通知が利用できるので、Chatbotを利用して簡単にSlackBotも作れそうですね
これに関しては、後ほど作成を行います。
![スクリーンショット 2020-09-27 3.44.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/0efb765c-0384-1a0a-52c9-7a273ef6dcb1.png)




Route53でのヘルスチェックでもレイテンシーも追加の設定で確認できますが、より詳しいサービスの監視を行いたい場合は**Cloudwatch Synthetic**を利用するといいでしょう。





##Cloudwatch Syntheticsを用いてサービス状況を監視 
CloudwatchSyntheticsというサービスの概要は知っていましたが、触るのは今回が初めてでした。

設定はこんな感じでエンドポイントの URL を指定すると、その下の Canary Builder に監視内容を設定するコードが生成されるっぽいです。（現時点ではPythonは指定出来ない...）
![スクリーンショット 2020-09-21 2.48.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/0dceac1b-3a25-94f4-fe62-8c330ba2699e.png)

+ ハートビートのモニタリング
URLをチェックしてくれる

+ API Canary
そのまま　APIバージョン

+ リンク切れチェッカー
いろんなパスまで見てくれる

+ GUIワークフロービルダー
ページ内での色々なアクションを監視してくれるっぽい
![スクリーンショット 2020-09-21 2.53.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/6f395bf7-3530-1121-980f-f50d8f2b0273.png)

SNSトピックと関連付け出来るので、Slackへの通知も簡単そうですね

![スクリーンショット 2020-09-21 2.48.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/cc10a205-cf15-6e2c-0e67-c70e27d2b64c.png)



ログと一緒にスクリーンショットも保存してくれるのは面白いです
![スクリーンショット 2020-09-21 2.45.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/c3a0cc8b-9436-db50-e0f3-265e73d2ca81.png)

レスポンスタイムも
![スクリーンショット 2020-09-21 2.46.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/8edfaf1f-7a77-6f53-d953-e0a0260cb439.png)


ログも
![スクリーンショット 2020-09-21 2.46.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666664/efd1a482-29ee-03ec-dc64-6efdc2f5f0f3.png)


Cloudwatchアラームで異常時のアラートを設定する事もできます（レスポンスタイムでアラートなど）

Syntheticsの利点として一番大きいのは**「圧倒的安さ！」**かと思います。
1時間に1回実行する設定でもたったの約100円/月！！！

Datadogでもsyntheticsモニタリングありますけど、＄12/月ですね。

また、AWS Lambda + Amazon S3 + Amazon CloudWatch Alarms を使ってるサービスなので、とてもわかりやすいです。それでいてとても柔軟な設定ができるので結構使えそうな気がします。

##最後に