概要
AWSでインフラ構築する一部分のメモ
実際にどういう構成で構築するのか次第で柔軟に参考にして頂ければ幸いです。
最終的にできる構成
今回出来上がる構成は以下の通りです
Request(https) -> Route53 -> ALB -> EC2
構築の流れ
※前提:「EC2インスタンス有」「ドメイン取得済み(今回はfreenom)」「セキュリティグループ有」
- Route53設定 (ネームサーバ)
- ACMで証明書取得
- ALB (httpsリスナー)
- Route53でドメイン割り当て
1 で「リクエスト -> Route53」の流れを用意
2,3 で「ALB -> EC2」の流れを用意
4 で 「Route53 -> ALB」の流れを用意
のようなイメージです。
Route53 ドメインの設定
「ホストゾーンを作成」を押下
もう一度「ホストゾーンを作成」を押下
すると右側にホストゾーン設定の画面が出てくるので予め取得してあるドメインを「ドメイン名」の部分に入力し下の「作成」を押下
するとホストゾーンが作成されたので、以下のようにできているのかを確認。
次にドメインにネームサーバの設定をします
※今回は「freenom」を使っています
自分のドメインの一覧画面で各ドメインの右側にある「Manage Domain」を押下
するとこのような画面に入るので、
「Management Tools」の「Nameservers」を選択
「Use custom nameservers」にチェックを入れるとフォームが出てくるので
既に用意したRoute53 のホストゾーンの「タイプ:NS」の値4つをそれぞれ入れていきます
入力後「Change Nameservers」を押すと完了です
ACMでSSL証明書取得
AWSのCertificate Manager
を選択し、「証明書のリクエスト」を押下する
右下の「証明書をリクエスト」を押す
そのまま右下の「確認」を押下
右下の「確認とリクエスト」を押下
ドメインの「▶」押すと出てくる、「Route53でのレコードの作成」の青いボタンを押し、
その後「続行」を押下
直後は画像のように検証保留中となっていますが、この部分が「発行済み」に変わると完了です
ALB設定 (httpsリスナー)
EC2のサイドバーから「ロードバランサー」を選択して「ロードバランサ―の作成」を押下
「Application Load Balancer」の「作成」を押下
プロトコルで「HTTPS」を選択
「アベイラビリティゾーン」はEC2インスタンスがあるところを含めて2つ選び、
右下の「次の手順:セキュリティ設定の構成」を押下
上で作った証明書を選択して、右下の「次の手順:セキュリティグループの設定」を押下
「新しいセキュリティグループを作成する」を選択し、
HTTP(80), HTTPS(443)
のルールを準備後
右下の「次の手順:ルーティングの設定」を押下
「新しいターゲットグループ」を選択し、任意の「名前」を付けた後
右下の「次の手順:ターゲットの登録」を選択
ここではターゲットグループに新しくEC2インスタンスを追加します。
下にはまだ未追加のインスタンスが一覧表示されているので、今回ALBで振り分ける先の
インスタンスを選択し、
「登録済みに追加」を押す。
すると、画面上部の登録済ターゲットの一覧に追加されるので、
そのことを確認後、画面右下の「次の手順:確認」を押下。
今までの設定を確認後、右下の「作成」を押下。
##EC2セキュリティグループにつなげる
マネジメントコンソールの「セキュリティグループ」を選択、
今作ったALBのセキュリティグループのIDをコピーする
EC2インスタンスが所属しているグループを選択して
「インバウンド」の「編集」を押す
HTTP
のソース部分に今コピーしたALBセキュリティグループのIDを入力して保存する
ALBリスナーに HTTP->HTTPS 転送設定
ALBにhttpリクエストが来た時に、httpsにリダイレクトするようにしておきます
先ほど作ったALBのリスナータブを選択し、「リスナーの追加」を押下します
「プロトコル:ポート」をHTTP:80
を指定してアクションを追加します。
「リダイレクト先...」を選択して`HTTPS:443'にリダイレクトするように設定します
入力後右上の保存を押して完了です
※「セキュリティグループ」のインバウンドのタイプで
https
を追加していない場合はこのタイミングでしておきましょう
Route53でドメイン割り当て
「Route53」の設定画面に移動し、上記で作成した「ホストゾーン」を選択、「レコードセットの作成」--> 右の「エイリアス先」で作ったALBが一覧に表示されているのでそれを選択後「作成」を選択。
※サブドメインを指定したい場合は「名前」の欄にサブドメインを指定すれば可能です。
これで、今設定したドメインにhttpsアクセスできるようになりました。
#参考記事
- AWS:無料でSSL証明書を取得する方法
- [無料ドメイン(.tk)とRoute53を利用して0円でHTTPS環境を設定してみた] (https://dev.classmethod.jp/cloud/aws/mesoko-r53-cdn/)
- [AWSのサービスでドメインを取得しALBでSSLで接続出来るようにする] (https://qiita.com/keitakn/items/4b2db95eae81044a779c)
- [ALBとバックエンドEC2間をHTTPS通信させてみた] (https://dev.classmethod.jp/cloud/aws/alb-backend-https/)
- [AWSでWebサイトをHTTPS化 その1:ELB(+ACM発行証明書)→EC2編] (https://recipe.kc-cloud.jp/archives/11084)
⇊僕は今回「freenom」使ったので参考にしました。
- [AWS SESで送信ドメイン認証を設定する] (https://qiita.com/OMOIKANESAN/items/1b8941258fb7ebbdb057)
- [[ACM] SSL証明書発行時のドメイン認証メールをSESで受け取ってみた] (https://dev.classmethod.jp/cloud/aws/acm-verifydomain-ses/)