
AWS 上で JupyterHub を使った複数ユーザー向け Linux の演習環境を検証してみた
はじめに
プログラミングや、バイオインフォマティクスを学ぶ講義では、実習環境の準備が欠かせません。しかし、受講者ごとに環境を準備するのは大変な作業です。そこで、複数ユーザーが同時に利用できる Linux 環境として JuputerHub の活用を検討しました。JuputerHub の導入方法と、基本的な動作確認を行ったのでご紹介します。
JupyterHubとは
JupyterHub は複数ユーザー向けに JupyterLab が利用可能な環境を提供してくれるオープンソースのプラットフォームです。ユーザー規模に応じて 2 つの提供方が用意されています。
- Kubernetes を利用した大規模利用向けの Zero to JupyterHub for Kubernetes
- 100 名以下のユーザーを対象にした小規模向けの The Littlest JupyterHub
本検証では小規模向けの The Littlest JupyterHub を利用します。
検証背景
今回は、20 名程度の利用者を想定した演習環境の提供を目的としています。また、小規模な研究室単位でも、独自に導入から運用まで可能かも重要な観点です。
Jupyter Notebook を複数ユーザーへの提供方法を検討していたところ JupyterHub の存在をしりました。課題感も同じでまさに求めていたソリューションでした。
このJupyter Notebookの実行環境は、基本的には個人のPCにインストールして、1人のユーザが使う形態を想定しているため、複数の人が参加する授業で使うためには、演習室のすべてのPCにインストールする作業が必要でした。
個人が利用する環境を等しく同じ状態に保つ事は割と難しいため、演習を受け持つ教員への負担も無視できません。
そこでJupterHubは、Jupter Notebookを複数のユーザに利用してもらう事を想定して作られたプラットフォームで、Webブラウザーを使って複数のユーザが利用できる仕組みを提供してくれています。
https://knowledge.sakura.ad.jp/31245/
AWS を利用して JupyterHub の実行環境構築し、演習環境として使えるかどうかを検証しました。特に講義で必要になる機能は以下です。
- ログイン機能
- ファイル編集機能
- ターミナル機能
- ファイルのダウンロード機能
- 画像ファイルの表示
- HTTPS 対応(オプション)
検証環境
今回の検証では以下の構成で JupyterHub を導入しました。
項目 | 内容 |
---|---|
EC2 インスタンス | t3.small |
EBS(gp3) | 12GB |
OS | Ubuntu 24.04 |
JupyterHub | The Littlest JupyterHub |
SSL 証明書 | Let's Encrypt |
構成図
シンプルな構成です。
証明書は Let's Encrypt
Let's Encrypt は無料で SSL 証明書を提供する認証局です。自動化されたプロセスにより、証明書の取得と更新が簡単に行えるのが特徴です。今回は Let's Encrypt を使用して、セキュアな HTTPS 接続を実現します。
環境構築
Route 53でドメイン設定
まず、Route 53 でドメインを設定します。今回はjh.ohmura.example.com
というドメインを使用しました。EC2 にアタッチした EIP のパブリック IP アドレスを A レコードとして登録しています。
セキュリティグループの設定
次に、EC2 インスタンスのセキュリティグループで、HTTP と HTTPS アクセスを許可します。HTTP ポート(80 番)は Let's Encrypt の認証のために必要なので、事前に開放しておきました。
JupyterHubのインストールと設定
JupyterHub のインストールと設定は、以下のコマンドで行いました。10 分程度待てばセットアップが完了します。
ADMIN_USER="ohmura-yasutaka"
DOMAIN_NAME="jh.ohmura.example.com"
EMAIL="ohmura@example.com"
# JupyterHubのインストール
curl -L https://tljh.jupyter.org/bootstrap.py \
| sudo python3 - \
--admin $ADMIN_USER
# 証明書の取得・設定
sudo tljh-config set https.enabled true
sudo tljh-config set https.letsencrypt.email $EMAIL
sudo tljh-config add-item https.letsencrypt.domains $DOMAIN_NAME
sudo tljh-config reload proxy
実行結果の抜粋です。以下のメッセージが確認できれば問題なくインストールできています。
Waiting for JupyterHub to come up (1/20 tries)
Done!
active
Proxy reload with new configuration complete
これで、JupyterHub のインストールと HTTPS 設定が完了しました。
動作確認
初回アクセス
ブラウザから Route53 で設定したドメイン名にアクセスすると、JupyterHub のログイン画面が表示されます。
HTTPS で接続されていることが確認できます。Let's Encrypt による証明書が正常に取得できています。
注意
JupyterHub インストール直後にアクセスすると証明書の設定されていないことがあります。インストール完了から 1 分ほど開けてからログインすると正常に証明書の取得、設定が済んでいることを確認できました。
管理者でログイン
ADMIN_USER
で指定したユーザー名を入力し、パスワードを設定します。ここで入力したパスワードが、このユーザーのパスワードとして設定されます。
初回ログイン時は以下のセットアップ画面が数秒間表示されます。このタイミングで Linux 上に一般ユーザーが作成されます。jupyter-
プレフィックスが付いたユーザーが作成され、今回の例だとjupyter-ohmura-yasutaka
ユーザーが作成される形になります。
ログインが完了すると、JupyterLab の画面が表示されます。
基本的な機能の検証
JupyterLab では、講義や演習に必要な様々な機能が利用可能です。以下に主要な機能の検証結果を示します。
エディタ
JupyterLab には統合エディタが搭載されており、プログラムやテキストファイルの編集が可能です。
シンタックスハイライトやインデント機能も備わっているため、コードの可読性が高く良かったです。
ターミナル機能
JupyterLab には、ブラウザ上で動作するターミナル機能が組み込まれています。Linux コマンドの実行や、各種ツールの実行が可能です。
Jupyter Notebook
Jupyter Notebook を使用すると、コードと実行結果、説明文を 1 つのドキュメントにまとめることができます。データ分析や機械学習の演習に最適です。デフォルですと Python のみ対応しているようです。
ファイルのアップロード、ダウンロード、画像表示
JupyterLab では、ローカル PC からのファイルアップロードや、作成したファイルのダウンロードが可能です。また、画像ファイルも直接表示できるため、グラフや図表を含む演習にも対応できます。
管理者メニュー
JupyterHub には、管理者向けの機能も用意されています。画面左上の「File」から「Hub Control Panel」から管理画面にアクセスできます。
管理画面では、ユーザー管理やサーバーの状態確認などができます。講義担当者は受講生のユーザー管理できます。
ユーザー作成
管理画面から新しいユーザーを作成できます。講義参加者ごとにアカウントを発行できます。
複数名作成するときは改行を入れてユーザー名を入力し「Add User」ボタンをクリックするだけで、新しいユーザーをまとめて追加できます。
ユーザーが追加されると、ユーザー一覧に表示されます。
一般ユーザーでログイン
作成した一般ユーザーでログインすると、管理者と同様に初回ログイン時にパスワードを設定します。
一般ユーザーでも JupyterLab の基本機能を利用できます。ただし、管理機能へのアクセス権限はありません。
Tips
管理者でログインできなくなった
セッションマネージャーまたは、SSH 接続でログインして、コマンドラインから新たな管理者ユーザーを追加できます。
ADMIN_USER="temp-admin"
sudo tljh-config add-item users.admin $ADMIN_USER
sudo tljh-config reload
証明書の更新できるの?
Let's Encrypt の証明書の有効期限は 3 か月です。The Littlest JuputerHub のコマンド(tljh)でサクッと証明書の取得から設定までできましたが、自動更新できるのか気になったので確認しました。今回の手順のセットアップ方法で自動更新も対応しているとのことでした。
These certificates are valid for 3 months. The proxy will automatically renew them for you before they expire.
https://tljh.jupyter.org/en/latest/howto/admin/https.html
リバースプロキシはなにでやっているの?
JupyterHub Traefik Proxyというプロキシーが採用されていました。
Treafik をはじめて知りました。Let's Encrypt との連携がサポートされていたので、JuputerHub がというよりは、Treafik が Let's Encrypt をうまく扱ってくれたいたんですね。
まとめ
AWS 上に JupyterHub を構築し、Linux 演習環境として必要な機能を検証しました。検証の結果、以下の点が確認できました。
- 管理者によるログインユーザーの管理が可能
- ファイル編集、ターミナル、ファイルダウンロード、画像表示などの基本機能が問題なく動作する
- Let's Encrypt を使用した HTTPS アクセスの設定が簡単にできる
演習環境として十分に活用できそうです。
おわりに
デフォルトは Python のみサポートしていました。R や、conda でインストールしたアプリケーションを一般ユーザーで利用可能かは別途確認したいところではあります。ひとまず JuputerHub が Linux の実行環境を複数ユーザーに提供する土台となることは確認できました。