はじめに
こんちには,こんばんわ.
今年は,AWSやらPythonやらをいじっていた時間が長かったのか,「なにかしたいな~」と考えていた時,一人で黙々とやるのも好きなんですが,協同でなにかするのもそこそこ好きなので,ふと「そうだ,JupyterHubの環境を作ろう」と.
今回は,その時の内容を何回かに分けて記事にしようと思います.
でも,普通に「インストール後起動」だけじゃ物足りないので,次のような点を解決しながら環境を作ってみようと思いました.
- 普通に「インストールして,起動して,アクセスする」的なものじゃ物足りない
- アクセスするURLが
http://localhost:8080/
のようなものも味気ない - ドメインが何かよく分からないものはイヤ(自分の好きなドメインにしたい!)
- URLにポート番号付けるのとかカッコ悪い
- 通信を暗号化させたい(HTTPS化)
ゴール
最終的に,以下の要素が達成できるようにしていきます.
- 好きなドメイン(サブドメイン)でJupyterHubにアクセスできること
- 通信の暗号化(HTTPS化)
- 複数アカウントを用意して,別々の環境が用意できること
- 各アカウントがJupyterHubで作成したデータやコードがJupyterLabが起動しているボリュームと別にあること
- WAFを利用した簡単なアクセスポイントの制御と監視
道のり
ゴールに向けて,AWSでやってみたことを順を追って書いていきます.
AWSをしっかりと勉強したわけでもないし,今回取った方法がベストプラクティスでもないと思うし,「こっちの方法が良いよ」とか「これじゃ面倒だよね」とかあると思います.
私の勉強不足のため,AWSを使いこなしてないです,IAM使ってセキュリティをしっかりとするとかね,今回やってません.
-
EC2を使ってJupyterHubのサーバを用意
- EC2インスタンスの作成
- TeraTermからのログイン
- EBSを使ってJupyterHub専用ストレージをマウント
- webサーバとしてnginxを用意
-
Pythonの準備
- Pythonのインストール
- Anacondaのインストール
-
JupyterHubのインストール
- Anacondaを使ってJupyterHubのインストール
- nginxとの接続(リバースプロキシの設定)
-
JupyterHubのアカウント
- jupyterhubユーザのsudo権限付与
- shadowの設定
-
Route53でドメインの設定
5. JupyterHub用のサブドメインの設定 -
通信の暗号化とリクエストの制御
- ACMで証明書の発行
- AWS WAFでACLを作成
- ALBにACLを設定
- サービスの自動化
- ログの設定
- 毎日リブートさせる
- WAFのログを使ってアクセスの監視
- CloudWatch+SNSを使って監視メールの送信
各項目は,記事が出来次第,リンクに差し替えていきます.