ALBに独自ドメインを設定してEC2にWebブラウジングする

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

今回はALBに独自ドメインでアクセスして、EC2にインストールしたApacheにアクセスできるようにしていきたいと思います。

# 環境イメージ
今回構築する環境は以下となります。
ACMを使って東京リージョンで証明書を使えるようにします。
ALBデプロイ時に443でリッスンするように設定し、またRoute53のPublic Hosted ZoneにAレコードを作成します。設定した独自ドメインでALBにセキュアに通信できる環境を作っていきます。
※本来であればALB⇔EC2間もSSL化したほうが良いらしいです。
　これに関してはおいおい確認していきます。
![20240620から-ページ27.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/b5704bb0-0e5f-8108-f799-fa4144a649cb.png)


# 構築
## ACMで証明書払い出し
今回、EC2とALBは東京リージョンにデプロイしますので、リージョンを東京にした上でACMの管理画面を開きます
![Untitled (15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/0fca700d-2ea0-4ae8-5989-63c83d4e2a02.png)
<details><summary>CloudFrontでACMを使う時との違い</summary>
CloudFrontで証明書を払い出すときは米国東部（バージニア北部）で払い出さなければならないのですが、それを東京リージョンにデプロイしたALBに使用することはできません。
東京用として別途払い出しをしなければなりません。

参考：https://qiita.com/ohtsuka-shota/items/7ebc8c0977b2cbdb9833

</details>

パブリック証明書をリクエストを選択した状態で次に進みます。
![Untitled (16).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/4f1e6be5-aed8-4061-b651-18329bf1a18d.png)
以下の設定でリクエストを実行します。
![screencapture-ap-northeast-1-console-aws-amazon-acm-home-2024-07-15-13_52_54 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/59793be0-278e-583f-f62c-3efac7e6ae3d.png)
払い出しが出来たことを確認します。
私の環境では事前にCloudFrontで別途証明書を払い出し、Route53にレコードを作成している為、自動でステータスが成功となりますが、もし初めて払い出した場合はRoute53でレコードを作成ボタンを押下して、Route53にレコードを作成してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/394d81db-b9fc-6b83-523a-a8ca7a370a63.png)

## EC2のデプロイとapache環境の作成
今回は別のSubnetに2台EC2をデプロイしていきます。
apacheをインストール出来ればここはなんでもよいかと思います。
但し、セキュリティグループは今回80が空いているものを指定することだけは。
![screencapture-ap-northeast-1-console-aws-amazon-ec2-home-2024-07-15-13_16_47 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/4e8aaa5d-f28e-67af-2484-85642adb0aa8.png)
正常にデプロイできたことを確認します。
![Untitled (17).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/6f2eef9f-4b41-3f71-bc6d-c6c05b490492.png)
それぞれのEC2にSSHして以下のコマンドを実行。とりあえずapacheをインストールして起動しておきます。
```
[ec2-user@ip-192-168-1-200 ~]$ sudo su -
[root@ip-192-168-1-200 ~]# dnf update && dnf upgrade -y
[root@ip-192-168-1-200 ~]# dnf install -y httpd
[root@ip-192-168-1-200 ~]# systemctl start httpd
[root@ip-192-168-1-200 ~]# systemctl enable httpd
```

## ALBをデプロイする
### ターゲットグループを作成する

以下の設定でターゲットグループを作成します。
今回、EC2に対してはたとえALBからであってもHTTPを使うためそのように設定しています。
![screencapture-ap-northeast-1-console-aws-amazon-ec2-home-2024-07-15-13_44_21 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/c855c27b-342e-e623-6145-144217b892c1.png)
![screencapture-ap-northeast-1-console-aws-amazon-ec2-home-2024-07-15-13_44_42 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/87ae4956-9192-6496-ce8a-8dfd103ef657.png)
作成出来たことを確認します。
![Untitled (18).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/7433a8e0-ad9a-4f4d-c020-d783f18062e0.png)

### ALBを作成する
ロードバランサを作成します。
タイプを選択するように求められますので、Application Load Balancerの作成ボタンを押下します。
![screencapture-ap-northeast-1-console-aws-amazon-ec2-home-2024-07-15-13_30_13 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/5e5ef90c-5d4a-96fd-be20-2fb16932e7d6.png)
スキームに関しては、このALBを使ってローカルのPCからAWS内のEC2にアクセスするので、インターネット向けを選択します。
ネットワークマッピングに関してはEC2がデプロイされているVPCやSubnetを選択します。
セキュリティグループに関しては443が空いているものを選択します。
リスナーとルーティングについてはHTTPSを選択。セキュリティポリシは推奨のものを選択。SSLサーバ証明書でACMを選び、登録した独自ドメインのものを選択します。
この設定でデプロイしていきます。
![screencapture-ap-northeast-1-console-aws-amazon-ec2-home-2024-07-15-13_57_22 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/737c5c8f-91f1-f073-2b8a-275948a51801.png)
デプロイできたことを確認します。リスナーとルールでHTTPS:443を押してみます。
![Untitled (20).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/85eea99b-dfc5-5fe1-1118-827733c63025.png)
証明書が紐づいていることが確認できます。
![Untitled (21).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/0a952682-e8ff-246e-ed26-6ec106f02332.png)
試しにALBに紐づているDNS名を使ってHTTPS接続をしてみます。今回の場合https:\//alb-test-https-234963113.ap-northeast-1.elb.amazonaws.com/みたいな感じでアクセスをしてみると、アクセスは出来るものの、保護されない通信として警告が表示されます。
![Untitled (22).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/305b4a99-92ad-d435-233f-cfac37342701.png)
この警告は証明書のドメインと、アクセスに使用しているドメインが異なるためですね。
![Untitled (23).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/905dd491-e6c0-53f8-0f8b-9611922775e4.png)

## Route53にAレコードを作成して独自ドメインでALBにHTTPS接続する
Route53の管理画面に移動し、独自ドメインを管理しているPublic Hosted Zoneを開きます。レコードを作成を押下します。
![Untitled (24).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/6f511cc4-9201-e429-817a-d14fe990f94e.png)
今回ALBに紐づけるドメインはs3.ohtsuka-aws.xyzとしました。
レコードタイプはAレコード。エイリアスを有効にします。
ALBを選択し、ALBをデプロイしているリージョンを選択。ALBの名前を選択して、レコードを作成します。
![Untitled (25).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/2a466fe7-b191-7149-8911-fdbce70976da.png)
作成出来たことを確認します。
![Untitled (26).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/2f7b8f9e-85e0-005f-2568-3f86a6a3b16e.png)
登録したドメインでHTTPS接続が出来るかを確認します。
接続でき、かつ先ほどのような警告が出ていないことが確認できます。以上！
![Untitled (27).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/705b87e0-b4e6-80a1-9486-79f7c0a32b37.png)
![Untitled (28).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/74120b8e-9a67-0037-aaed-9813d6a05d37.png)