【AWS】EC2に独自ドメインでHTTPS通信できるようにする
.png&w=3840&q=75)
今回はKamalでEC2にデプロイしたRailsアプリに独自ドメインでHTTPS通信できるようにします。
最終的な構成図

前提
前回の記事で作成したEC2, RDSの環境にpublicサブネットを追加、Kamalを使ってデプロイが完了、 IPアドレスを指定してHTTPでアクセスできていることを前提として進めていきます。

Route 53で独自ドメインを取得
Route 53とは
AWSが提供するドメインネームシステム(DNS)です。
DNSによってドメインとIPアドレスとの対応付けを行うことができます。
注意点
Route 53での独自ドメインの取得には最低でも年間14ドルほどの費用が発生します。
またお名前.comなどのドメイン登録サービスで取得したものをRoute 53で設定することも可能ですが、今回はRoute 53で購入する手順を説明します。
手順
Route 53のページにアクセスします。
「開始する」から「ドメインを登録」を選択して「開始する」をクリックします。

「ドメインの検索」で取得したいドメイン名を検索します。
使用可能なドメインが検索できたら選択して、「チェックアウトに進む」をクリックします。

「自動更新」にチェックがついているのを確認して「次へ」をクリックします。

連絡先の情報を入力するページに遷移するので入力後、「次へ」をクリックします。
確認画面で問題なければ送信します。
完了したら「リクエスト」というページからドメインの「ステータス」を確認できます。
送信直後は「進行中」となっています。

登録したメールアドレスに確認用のメールが届くのでリンクをクリックします。

完了ページに遷移します。

しばらくして「登録済みのドメイン」のページに表示されたら完了です。
ACMでSSL証明書をインストール
ACMとは
SSL証明書などの発行ができるサービスです。
今回は取得したドメインのSSL証明書を発行して後に作成するALBに適応することでインターネットからALBへの通信をHTTPSで可能にします。
手順
AWS Certificate Managerページにアクセスします。
「証明書をクリエスト」から「パブリック証明書をリクエスト」が選択された状態で「次へ」をクリックします。

「完全修飾ドメイン名」に先ほど取得したドメイン名を入力します。

以降の項目はデフォルトのまま、「リクエスト」をクリックします。
リクエストが完了したら、「証明書を一覧」から該当の証明書の「証明書 ID」をクリックします。

Route53で「レコードを作成」をクリックします。

該当のドメインにチェックをつけて「レコードを作成」をクリックします。

しばらくして証明書の「ステータス」が「発行済み」になれば完了です。

ALBの作成
ALBとは
ALB(Application Load Balancer)は受信した通信を複数のEC2などのターゲットに自動的に分散してくれるサービスです。
今回はACMで発行した証明書を適応することでHTTPS通信を可能にする役割として使用します。
手順
ALB用のセキュリティグループを作成
ALB用にHTTP, HTTPSからのトラフィックを許可、EC2のセキュリティグループへのトラフィックを許可するセキュリティグループを作成します。
VPC → セキュリティグループにアクセスして「セキュリティグループを作成」をクリックします。
項目 | 値 |
---|---|
セキュリティグループ名 | rails-kamal-alb-security-group |
説明 | rails-kamal-alb-security-group(任意の説明) |
VPC | rails-kamal-vpc |
インバウンドルール
タイプ | ソース |
---|---|
HTTP | Anywhere-IPv4 |
HTTPS | Anywhere-IPv4 |
アウトバウンドルール
タイプ | ソース |
---|---|
HTTP | rails-kamal-ec2-security-group |
「セキュリティグループを作成」をクリックして完了です。
ターゲットグループを作成
ALBが受け取ったリクエストの振り分け先であるターゲットグループを作成します。

EC2 → ターゲットグループのページにアクセスし、「ターゲットグループの作成」をクリックします。
基本的な設定
項目 | 値 |
---|---|
ターゲットタイプの選択 | インスタンス |
ターゲットグループ名 | rails-kamal-alb-tg(任意の名前) |
プロトコル | HTTP |
IPアドレスタイプ | IPv4 |
VPC | rails-kamal-vpc |
プロトコルバージョン | HTTP1 |
上記の内容を入力後、「次へ」をクリックします。
「使用可能なインスタンス」からrails-kamal-ec2
にチェックをつけて「ターゲットグループの作成」をクリックで完了です。

ALBを作成
ALB本体を作成していきます。

EC2 → ロードバランサーにアクセスし、「ロードバランサーの作成」をクリックします。
ロードバランサータイプ → Application Load Balancerの「作成」をクリックします。

基本的な設定
項目 | 値 |
---|---|
ロードバランサー名 | rails-kamal-alb(任意の名前) |
スキーム | インターネット向け |
ロードバランサーのIPアドレスタイプ | IPv4 |
ネットワークマッピング
それぞれのAZのパブリックサブネットを選択します。
項目 | 値 |
---|---|
VPC | rails-kamal-vpc |
マッピング(ap-northeast-1a) | rails-kamal-public-subnet-1a |
マッピング(ap-northeast-1c) | rails-kamal-public-subnet-1c |
セキュリティグループ
先ほどALB用に作成したセキュリティグループを選択します。
項目 | 値 |
---|---|
セキュリティグループ | rails-kamal-alb-security-group |
リスナーとルーティング
HTTP, HTTPSそれぞれで先ほど作成したターゲットグループをデフォルトアクションとして指定します。
プロトコル | デフォルトアクション |
---|---|
HTTP | rails-kamal-alb-tg |
HTTPS | rails-kamal-alb-tg |
HTTPSを選択すると「セキュアリスナーの設定」という項目が出てくるので以下の内容で設定します。
項目 | 値 |
---|---|
セキュリティポリシー | デフォルト |
証明書の取得先 | ACMから |
証明書(ACMから) | 取得したドメイン |
「ロードバランサーの作成」をクリックして正常に作成されたら完了です。
レコードを作成
最後に、取得したドメインとALBを紐付けるレコードを作成します。
Route 53 → ホストゾーンにアクセスして、登録したドメインを選択、「レコードを作成」をクリックします。
ルーティングポリシーは「シンプルルーティング」を選択して「次へ」をクリックします。

「シンプルなレコードを定義」をクリックして情報を入力します。
項目 | 値 |
---|---|
レコード名 | 空白 |
レコードタイプ | A |
値/トラフィックのルーティング先 | Application Load Balancer と Classic Load Balancer へのエイリアス |
リージョンを選択 | アジアパシフィック(東京) |
ロードバランサーを選択 | rails-kamal-alb |

レコードを作成をクリックして正常に作成されたら完了です。
これで取得したドメインにHTTPSでアクセスすると表示がされるはずです。
セキュリティ面を考慮すると、不要になったElasticIPアドレスを解放したり、EC2をプライベートサブネットに移動するなどまだ対応した方が良いことがあるので別途記事にしようと思います。