AWSでJupyter Notebookサーバを起動してクライアントPC(Windows)からアクセスする方法
AWS(Ubuntu)でJupyter Notebookを起動して、クライアントPC(Windows)からアクセスする方法について紹介する。
- 1.環境
- 2.AWSでEC2インスタンスを作成する
- 3.Tera TermでAWSサーバにアクセスしJupyter Notebookサーバを起動
- 4.クライアントPCからJupyer Notebookにアクセス
1.環境
<AWS>
① AWSマシンイメージ(AMI):Deep Learning AMI (Ubuntu 18.04) Version 41.0
AMIとは:OSや各種ソフトウェア等を含むスナップショット
(参考:AWS AMI とは - Qiita)
② インスタンスタイプ:p2.xlarge
有償なので気を付けてください。(2021/3/20現在、0.9USD/時間)
(参考:Amazon EC2 P2 インスタンス| AWS)
また、AWSのアカウントを作成したばかりの場合はpインスタンスのvCPU上限値が0のはずなので、おそらく使用できないものと思われます。pインスタンスのvCPU上限値の緩和申請をする必要があります。
(参考:EC2 インスタンス数の制限で起動できない | Oji-Cloud)
③ AWSリージョン:米国東部(バージニア北部)us-east-1 どこでも良いと思いますが、2021/3/20現在においてはPインスタンスを使用する場合は最安値のはずです。 それとpインスタンスが使えないリージョンも多々あるので注意です。
<クライアントPC>
① OS:Windows10 Home
② サーバアクセスツール:Tera Term
(インストール先:「Tera Term」定番のターミナルエミュレーター - 窓の杜)
2.AWSでEC2インスタンスを作成する
1. インスタンス作成
AWSマネジメントコンソールからEC2サービスにアクセスし、「インスタンスを起動」ボタンを押下。
2. AMI選択
AMI選択ページに遷移する。目的は機械学習環境の構築なので、Deep Learning AMIを選択する。
3. インスタンスタイプ選択
p2.xlargeを選択し、「6.セキュリティグループの設定」タブを押下。
4. セキュリティグループの設定
デフォルトだとSSH(ポート22)しかアクセス許可されていないので、カスタムTCPルールとしてポート8888を開けて、クライアントPCのブラウザからJupyter Notebookにアクセスできるようにする。以下は例です。「ソース」を指定していないので、どのIPからでもアクセスできるようになっており、セキュリティ的にはガバガバなので、セキュリティを重視する場合は、必要な設定をお願いします。
設定できたら、「確認と作成」ボタンを押下。
5. EC2インスタンス起動
内容を確認して問題がなければ「起動」ボタンを押下する。
SSHアクセスするために、キーペアを作成し、キーペアをダウンロードする(キーペア名を適当に入力して「キーペアのダウンロード」ボタンを押下)。ダウンロードできたら、「インスタンスの作成」ボタンを押下。
3.Tera TermでAWSサーバにアクセスしJupyter Notebookサーバを起動
1. AWSのEC2のインスタンスページからパブリックIPを確認
2. Tera Term起動
ホスト名に上記1で確認したパブリックIPを入力し、「OK」を押下。
以下のような画面が表示されるので、ユーザ名は「ubuntu」、「パスワードをメモリ上に記憶する(M)」はチェックをオフに、認証方式は「RSA/DSA/ECDSA/ED25519鍵を使う」を選択し、事前に作成したキーペアを指定し、「OK」を押下。
3. 機械学習フレームワーク選択
今回はTensorFlowの最新環境(source activate tensorflow2_latest_p37)を実行する。
使用できる環境は以下の通り、コンソールに一覧として表示されるので、必要な環境をコピーして実行する。
Tera Termで以下の通り実行する。
$ source activate tensorflow2_latest_p37
4. Jupyter Notebookのセキュリティ設定
AWS公式の通りですが、以下にまとめます。
まずはJupyter Notebookアクセス時に使用するパスワードを指定する。以下コマンドを実行。
$ jupyter notebook password
以下のように出力されるので、出力内容に従ってパスワードを指定する。
Enter password: Verify password: [NotebookPasswordApp] Wrote hashed password to /home/ubuntu/.jupyter/jupyter_notebook_config.json
続いて自己署名SSL証明書を発行します。以下の通り実行
$ cd ~ $ mkdir ssl $ cd ssl $ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem
証明書発行にあたってサーバ情報を要求されるので、適当に入力。良く分からないですが、空白にするとJupyternotebookを起動したときにうまくいかない気がします。
Country Name (2 letter code) [XX]: JP State or Province Name (full name) []: Tokyo Locality Name (eg, city) [Default City]: Minato Organization Name (eg, company) [Default Company Ltd]: NNN Organizational Unit Name (eg, section) []: NNN Common Name (eg, your name or your server's hostname) []: NNN Email Address []: test@gmail.com
5. Jupyter Notebookのコンフィグファイル設定
以下を実行して、コンフィグファイルを開きます。エディタはなんでもOKですが、今回はnanoを使用しています。
$ nano ~/.jupyter/jupyter_notebook_config.py
コンフィグファイルが開くので以下の通り編集する。
c.NotebookApp.ip = '*' #アクセス元のIPとして全IPを許可 c.NotebookApp.open_browser = False #ubuntuサーバでJupyter Notebookを起動した際にブラウザを起動しないようにする c.NotebookApp.port = 8888 #ポート指定
nanoの操作方法も簡単に説明。
F6キー:文字検索
Ctrl + X:nanoの終了
6. Jupyter Notebook起動
以下を実行して、Jupyter Notebookを起動する。
$ jupyter notebook --certfile=~/ssl/mycert.pem --keyfile ~/ssl/mykey.key
無事起動できたら以下のように出力される。
4.クライアントPCからJupyer Notebookにアクセス
ブラウザで以下の通りアクセス
https://<AWSのパブリックIP>:8888
パスワードを求められるので、事前に設定したパスワードを入力してログイン。