概要
全体概要は,AWSでJupyterHub (概要) にあるので,参照してください.
前回までで,EC2にJupyterHubを組み立ててみました.
今回は,ドメインをEC2で自動的に割り当てられたものではなく,自分で用意したものに差し替えていきます.
使うのは,Route53
とALB(ELB)
です.
また,Route53
にドメインが1つはある状態から始めていきます.
おしながき
- ドメインの登録
- サブドメインの追加
- ALBの登録
- Route53,ALB,EC2を連結
Route53でドメイン管理
Route53は主にドメインを管理できるサービスです.いわゆるDNSにあたる部分になります.
以下のような感じで,ドメインをホストゾーン
という単位で管理して,その配下でDNSで使うレコードを制御します.
画像には7つのホストゾーンがあることになります.
別のDNSサービスで獲得したドメインをRoute53に移管することもできますし,Route53からドメイン登録もできます.
私自身,移管も登録もしたことありますが,わりと簡単にできました☆
ドメインの追加
ルートとなるドメインを使うのもありだと思いますが,せっかくなのでJupyterHub専用のサブドメインを作ってみます.
先ほどの画像の青色のボタン【ホストゾーンの作成】を押します.
右側に作成パネルが出てくるので,ドメイン名
とコメント
,タイプ
を入力します.そして,【作成】ボタンを押すだけです.
ドメイン名とタイプは,作成後変更はできないので注意が必要です.
例によって,コメントは後でも変えることができます.
作成ボタンを押すと,ホストゾーンのレコードセットが表示されます.
すでにNSタイプとSOAタイプの2つが登録済みになっています.このレコードは変更してはいけません.
サブドメインを追加した時の作業
ホストゾーンにサブドメインを追加した場合,その親となるメインドメインにサブドメインに向けるNSレコードを追加する必要があります.
以下の画像のようにサブドメインにあるNSレコードの値をメインドメインに追加します.メインドメインに追加するレコードの名前はサブドメインにします.(メインドメインにあるCNAMEレコードは気にしないでください)
ALBの登録
この後でHTTPS化させるために,証明書をALBに付与させる関係で,Route53とEC2をつなげるためのALBを登録します.
ALBはApplication Load Balancer
の略です.ELBの一種で,普通のロードバランサーであれば,このALBを使えばいいようです.
まず,EC2に移動して,左側の一覧から【ロードバランシング>ロードバランサー】を選択して,青色の【ロードバランサーの作成】ボタンを押します.どの種類のロードバランサーにするか聞かれるので,Application Load Balancerを選びます.
次のように設定していきます.
ロードバランサーの設定
管理するためのALBの名前,リクエストをチェックするためのプロトコル,アベイラビリティーゾーンの3つを設定します.
名前は分かるものにしましょう.また変更が利かないので,直したくなったら作り直しです.
リスナーのプロトコルはいったんこのままにしておきます.後で,ACMで発行した証明書をくっつけるときにHTTPSに切り替えることにします.
アベイラビリティーゾーンは,とりあえず全部にチェック付けておきます.(私自身VLCの知見がないのでこのようにしているだけです..)
入力したら【次の手順:セキュリティ設定の構成】ボタンを押します.
セキュリティ設定の構成では,HTTPSの証明書を設定する画面になっているので,今回はスルーします.
その次は,セキュリティグループの設定になります.
細かい制御ができるようにEC2インスタンスとは別に,HTTPだけ指定したセキュリティグループを新規でsg_alb_sample-jupyterhub
のように作成しておきます.
さらに先では,以下のようなルーティングの設定になります.ターゲットグループという単位でEC2インスタンスにリクエストをルーティングしてくれるようです.
また,ヘルスチェックの設定もここで行います.
ターゲットグループは,これまた名前を決める必要があります.今回はtg-sample-jupyterhub
としました.
ヘルスチェックは定期的にEC2インスタンスに向けてリクエストが飛んでくるので,デフォルトの30秒が鬱陶しい場合は間隔を長めにしておくといいでしょう.サーバの状態を監視するものでもあるため,サービスとして公開する場合は長すぎると障害検知が遅くなることにつながるので,その際は気をつける必要があります.
それぞれ,設定出来たら【次の手順:ターゲットの登録】ボタンを押します.
次はターゲットとなるEC2インスタンスを登録します.下図にあるように,下部にある【インスタンス】のリストから選択して,上部の【登録済みターゲット】にインスタンスを追加していきます.今回は,JupyterHubが動いているインスタンスだけを登録しました.
追加出来たら【次の手順:確認】ボタンを押します.
最後に,設定した項目を確認して,問題なければ【作成】ボタンを押してALBを作ります.
これで,ALBとEC2インスタンスの間はつながったことになります.
Route53に戻って,ALBにつながるレコードを追加します.
ALB用レコードの追加
Route53で先ほど追加したドメインのホストゾーンを開いて,下図の順番で捜査していきます.
まず,【レコードセットの作成】ボタンを押して,右側に作成用パネルを出します.
作成用パネルのうち,【名前】とタイプはそのままにして,【エイリアス】をはい
に切り替えます.そうすると【エイリアス先】のプルダウンが出てくるので,ついさっき作ったALBを選択します.このリストに上がってくるELBは,先頭にdualstack.
というのが勝手に付きます.IPv4とIPv6の両方という意味があるようです.
2つの項目が設定出来たら【作成】ボタンを押します.
Aレコードで値が,ALIAS
で始まるALBのDNS名になっていると思います.
しばらく待って,http://{Route53に登録したドメイン}/hub/
とブラウザに打ち込んでアクセスするとHupyterHubのログイン画面が表示されます.相変わらず,HTTP接続のワーニングが出ますが,放置しちゃいます.
まとめ
今回は,Route53を使ってDNS周りを設定し,HTTPSのためにALBを追加し,インターネットからEC2までの経路を作り上げました.
やはり,自分好みのドメインでアクセスしたいですよね.
ALBにはWAF機能も付けることが出来るので,次回は,ALBに証明書とWAF機能を付け足そうとと思います.