【AWS】ECSにRoute53+ACMを適用する際の各構築手順を理解する

# 本記事のミッション
- Route53+ACMを適用する際の流れと、各構築手順が何を行っているのかざっくり理解した上で、構築作業を行う。
# 背景
[こちら](https://qiita.com/minorun365/items/84bef6f06e450a310a6a "Qiita Home")を参考に、以前ECSを中心としたチャットボットを構築しました。この構成では、ALBに直接アクセスする構成となっていて、かつHTTP通信としていました。そのため、今回はドメインの導入とHTTPSによる通信の導入を試してみました。構築をする中で、各手順が何をしているのか、何のためにやっているのか、色々調べながら行ったため、備忘用にまとめました。

# 本記事で書くこと
- Route53+ACM構築の全体の流れ
    - 全体の流れ
    - 各工程で具体的に何をしているのか理解する
- 構築手順
- 今後の展望

# Route53+ACM構築の全体の流れ
Route53とACM構築の全体の流れとしては、以下1~6となります。
## 全体の流れ
1\. **ドメインの取得**：お名前.comなどのサイトからドメインを発行する。
2\. **Route53にてホストゾーンの作成とドメインの登録**：Route53でホストゾーンを作成し、ドメインを登録する。
3\. **ネームサーバ情報の登録**：ドメイン発行元にRoute53のネームサーバ情報を登録する。
4\. **ACMで証明書発行**：ACMで証明書を作成し、DNS認証によって、証明書の発行者がドメイン管理者であることを認証する。
5\. **ALBにHTTPS通信の追加**：ACMで発行した証明書を選択し、ALBにてHTTPS通信できるように設定変更する。
6\. **ドメイン名とALBの紐づけ**：ドメインの名前解決先がALBとなるように、Route53にドメイン名とALBのドメイン名の紐づけたレコードを登録する。
## 各工程で具体的に何をしているのか理解する
1\. **ドメインの取得**：
- 最初に～.comといったドメインを取得します。Route53から取得することも可能ですが、今回は無料でドメインを取得するために、外部サービス（お名前.com）を利用しました。

2\. **Route53にてホストゾーンの作成とドメインの登録**：
- Route53にドメインを管理する箱（ホストゾーン）を作ります。このホストゾーンでドメインと各レコードの紐づけを管理します。この段階では、独立した状態です。 

3\. **ネームサーバ情報の登録**：
- ネームサーバ（DNSサーバ）とは、ドメイン名とIPアドレスを変換するサーバを指します。存在するだけでは、外部から問い合わせた際に、どのネームサーバに問い合わせればわからず、ドメインとIPアドレスの変換ができません。そのため、ドメイン発行元（今回はお名前.com）のドメインにネームサーバ情報を登録することで、ネームサーバにアクセスができるようになります。

4\. **ACMで証明書発行**：
- ACMの機能を使って、証明書を発行します。ここでメール認証かDNS認証か選択できます。どちらも証明書の作成者がドメイン管理者であることの認証を行うことで、証明書を取得します。メール認証は、確認メールに対してドメイン管理者が確認をすることで認証します。ドメイン認証はACMから発行されるレコードを、「２．」で作成したRoute53のホストゾーンに登録することで認証します。

5\. **ALBにHTTPS通信の追加**：
- ALBのリスナーにHTTPS通信を追加します。先ほど取得した証明書を選択することで、追加できます。

6\. **ドメイン名とALBの紐づけ**：
- ホストゾーンは箱として存在しているだけで、名前解決する先のIPアドレスが存在していないので、ドメインとALBを紐づけるレコードを作成します。

# 構築手順
現在は、https通信ができず、かつドメイン名がALBのDNS名のままとなっています。これをhttps通信かつ、お名前.comで取得したドメインにより名前解決できるようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543693/d4d2d803-7e2b-4e67-95eb-f5f355c110c9.png)

## 1. 独自ドメインの取得
まず事前準備としてお名前.com名のサイトからドメインの発行を行います。会員登録、クレジットカードの登録などが必要ですが、ドメインの取得だけであれば無料でしゅとく可能です。

## 2.Route53にてホストゾーンの作成とドメインの登録
Route53から「ホストゾーンの作成」をクリックする。「ドメイン名」に発行したドメイン名を入力する。「タイプ」は今回はインターネットから接続するため、パブリックのホストゾーンを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543693/212b8aa3-6cd3-42c1-b5d4-8047085076ef.png)
他はデフォルトで、「ホストゾーンの作成」をクリックする。

## 3.ネームサーバ情報の登録
作成したホストゾーンの中身を確認すると、2つレコードがすでに作成されているのが確認できます。そのうちの1つであるNSレコードを確認すると、「値/トラフィックのルーティング」列に４つドメインが存在するので、これをドメイン発行元サイトに登録します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543693/c4a0f8f2-6adc-4593-994c-42db67e6f31f.png)
お名前.comでは、左のタブの「ネームサーバ」＞「ネームサーバの設定」の「その他のサービス」から設定できます。ネームサーバの欄にホストゾーンにある4つのネームサーバをそれぞれ登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543693/275fd2d3-5a6b-4054-b681-3e12087a6a46.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543693/a0f66ecd-35da-43e1-97d5-75bc9ddb943b.png)

## 4.ACMで証明書発行
次にACM(AWS Certificate Manager）を使って証明書を取得します。
ACMサービスの画面に遷移し、今回は新規取得を行うので、「リクエスト」をクリックします。遷移後の画面で「証明書タイプ」からパブリック証明書をリクエストを選択し、「次へ：をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543693/0fe553f4-e309-400f-8f8c-067ae3f7d612.png)
「完全修飾ドメイン名」にドメイン名を入力します。ここで、今後新しくサブドメインを追加した場合でも証明書対応できるように、*.（ドメイン名）という形で２つドメイン名を追加します。「検証方法」はDNS検証を選択します。「キーアルゴリズム」はRSA 2048を選択し、「リクエスト」をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543693/0f3756a8-5e68-4236-91bc-00c1cb78ea5a.png)
証明書が作成されるので、「DNS認証」を行います。証明書を開き、「Route53でレコード作成」をクリックします。その後、先ほど「完全修飾ドメイン」で選択した2つのドメイン名を選択し、「レコードを作成」をクリックします。これで、ホストゾーンにACMのレコードを登録することでドメイン管理者であることの認証ができました。認証が完了するまで30分ほど時間がかかります。（もし数時間たっても、ステータスが保留中の検証から変わらない場合は、「2.発行元サイトへのネームサーバ情報の登録」やドメイン名が正しく設定されているか確認してください。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543693/001ae4e4-25ac-4f98-9011-9cd6bcea69df.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543693/550dc4cf-8794-4cd4-8a24-97ee05957c97.png)
**：ACMで証明書を作成し、DNS認証によって、証明書の発行者がドメイン管理者であることを認証する。
## 5.ALBにHTTPS通信の追加
- ALBのリスナーにHTTPS通信を追加します。対象のALBを開き、「リスナーとルール」から「リスナーの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543693/e5e5684f-9551-486d-a662-da4d9f039e79.png)
「プロトコル」にHTTPS、「ポート」：443を選択する。
アクションのルーティングとしては「ターゲットグループへ転送」を選択し、作成したECSのサービスを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543693/baf65c96-efae-470e-87c3-97163c5b24e4.png)
HTTPSを選択したことで、セキュアリスナーの設定を行う必要がある。「セキュリティポリシー」は推奨のポリシーを選択する。「デフォルトSSL/TLSサーバ証明書」として、「ACMから」と先ほどの手順で取得した証明書を設定する。「追加」を最後にクリックしロードバランサにリスナを追加する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543693/3d2d4c98-cb30-423d-aa62-22046ad2309e.png)

## 6.ドメイン名とALBの紐づけ
最後にドメイン名からALBに名前解決できるように設定を行う。
Route53から対象のホストゾーンを選択し、「レコードを作成する」をクリックする。
「レコード名」は空欄、レコードタイプはAレコードを選択する。
「エイリアス」をオンにし、トラフィックルーティング先に、
    「Appkication Load alancerとClassic Load Balancerへのエイリアス」、「アジアパシフィック（東京）」、「対象のロードバランサ」を選択する。他はデフォルトで「レコードを作成」をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543693/6cc4d082-69ad-431b-ac15-48858388f7ba.png)
## 動作確認
https://abc1d.jp でアクセスできることが確認できました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543693/33373cc8-49ba-4bc6-9f9e-5e235b41ab87.png)


# まとめと今後の展望
当たり前ですが、各工程で何をしているのか理解しておくと、作業でミスをしずらい＆何か問題があったときに、エラー分析がしやすくなるなと感じました。（実際、構築する中でエラーが起きた際、とても役立ちました）
また、普段の業務ではあまり生成AIを使わないようにしているのですが（回答をしっかりレビューできる自信がない＆まず自分で一通りできるようになりたいため）、
仕組みを理解する上では、生成AIに疑問点をぶつけまくる⇒ググって根拠があるか確認という流れはスピーディに回答、理解にたどりつけていいなと思いました。
引き続きAWSの勉強は続けていきたいので、今後は以下内容に取り組んでいきたいと思います！
- ALBのやり残し（Cognitoによる認証、HTTPS通信によるリクエストの受信・・）
- Route53＋ACMによるHTTPS通信の導入
- 監視設定など（研修で学んだセキュリティ関連設定を適用したい）
- バックエンドを変更（登録した資料をベースに回答するFAQボットみたいなものを作りたい）