AWSにjupyter notebookを構築してリモートで使用する

AWSにjupyter notebookを構築してリモートで使用する:


はじめに

自宅のPCがメモリ8GiBしかないため、32GiB環境を手に入れたいと思い、AWS上にLinuxインスタンスを立てようと思います。Linux上でjupyter notebookを起動し、リモートでブラウザからアクセスしてjupyterを使用します。


環境

  • AWSアカウントは持っている前提とします


手順


AWSインスタンス作成

サービスからEC2を選択し、インスタンスを作成します。

作成するインスタンスは下記のとおりです。

No. ステップ 選択
1 Amazon マシンイメージ (AMI) Amazon Linux 2 AMI (HVM), SSD Volume Type
2 インスタンスタイプの選択 t2.micro (可変 ECU, 1 vCPU, 2.5 GHz, Intel Xeon Family, 1 GiB メモリ, EBS のみ)
3 インスタンスの詳細の設定 デフォルトのまま変更なし
4 ストレージの追加 30GiB
5 タグの追加 追加しない
6 セキュリティグループの設定 ※下記参照
セキュリティグループのインバウンド設定は下記のとおりです。
image.png

セキュリティグループのアウトバウンド設定は下記のとおりです。
image.png


サーバへの接続

sshクライアントはTeratermを使用しました。インストール方法と接続方法はこちらの手順通りに行いました。

ログイン後、rootユーザに切り替えます。以降の操作は管理者として実行します。

$ sudo su - 
AWSの初期設定では、sshが鍵を使用した認証になっています。複数のクライアントからアクセスする場合は鍵を配布するのが大変なので、パスワード認証のほうが楽だと思います。

パスワード認証への変更の仕方はこちらの手順で実施しました。

タイムゾーンを日本に設定します。設定の仕方はこちらの手順で実施しました。


Anacondaのインストール

Anacondaのインストール方法はこちらを参考にしました。

自宅PCでAnacondaのサイトから64-Bit (x86) Installer (652.5 MB)をダウンロードします。構築時はPython 3.7 versionでした。

WinSCPを用いて、作成したLinuxインスタンスにインストーラを移動します。

WinSCPのインストールはこちらが参考になります。

WinSCPの鍵認証でAWSインスタンスにアクセスするにはこちらが参考になります。

インスタンスかに直接ダウンロードもできます。wgetをインストールします。

$ yum install wget 
サイトからanacondaをダウンロードします。

$ wget https://repo.continuum.io/archive/Anaconda3-2018.12-Linux-x86_64.sh 
こちらを参考にしました。

下記コマンドを実行し、インストールします。途中でインストールのパスが聞かれます。今回は/root/anaconda3/としました。

$ sh Anaconda3-2018.12-Linux-x86_64.sh 
Anacondaインストール過程で、zipを解凍できない時があります。そのときはbunzip2をインストールします。

$ yum install bzip2 
インストール後は下記コマンドでパスを通しました。

$ export PATH=/root/anaconda3/bin:$PATH 
ここで、/root/anaconda3の部分はインストール先のパスです。


仮想環境作成

下記コマンドで仮想環境を作成します。

conda create -n py37 python=3.7.1 anaconda 
anacondaオプションでパッケージ全部入りのpython環境をつくれます。

仮想環境についてはこちらが参考になります。


jupyter notebook設定

notebookやデータを保管するディレクトリを作成します。

$ cd ~ # rootで操作しているので/rootに移動します 
$ mkdir work 
$ chmod 777 work 
仮想環境をアクティブ化します。

$ source activate py37 
jupyterの設定を行います。こちらを参考にしました。

jupyterのログインパスワードを設定します。

$ ipython 
In [1]: from notebook.auth import passwd 
In [2]: passwd() 
Enter password: 
Verify password:  
Out[3]: 'sha1:...' # 暗号化された文字列をコピーしておく 
最後に表示された'sha1:...'の部分を控えておきます。

次にサーバに設定する鍵を生成します。

$ cd ~ # rootで操作しているので/rootに移動します 
$ mkdir .jupyter 
$ cd .jupyter 
$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mykey.key -out mycert.pem 
jupyter notebookのコンフィグを設定します。

$ vi /root/.jupyter/jupyter_notebook_config.py 
 
c = get_config() 
c.NotebookApp.ip='0.0.0.0' # 任意のipアドレスからアクセス可 
c.NotebookApp.password = 'sha1:...' # コピーしておいた文字列 
c.NotebookApp.open_browser=False # jupyter起動時にブラウザはを自動で開かない 
c.NotebookApp.port=適当なポート番号 # サーバーのportで今回は8888 
c.NotebookApp.certfile = u'/root/.jupyter/mycert.pem' # サーバ証明書 
c.NotebookApp.keyfile  = u'/root/.jupyter/mykey.key' # 秘密鍵 
c.NotebookApp.notebook_dir = '/root/work' #  jupyterのWebUIから見えるファイル構造のルート 
下記コマンドでjupyterを起動します。

$ jupyter notebook --ip='0.0.0.0' --allow-root & 
自宅のPCのブラウザでサーバにアクセスすると、パスワード入力を求められるので、ログインします。

jupyterを止めるときは下記コマンドでプロセスIDを探し、

$ ps aux | grep jupyter 
killコマンドでプロセスを終了します。

$ kill ここにプロセスID 


jupyter自動起動

上記の設定だとサーバを起動するたびにjupyterを手動で起動する必要があります。そこでサーバ起動と同時に自動でjupyterが起動するようにします。

こちらを参考にしました。

起動スクリプトを作成します。

$ touch ~/start_jupyter.sh 
起動スクリプトを編集します。

$ vi ~/start_jupyter.sh 
 
/root/anaconda3/envs/py37/bin/jupyter notebook --ip='0.0.0.0' --allow-root & 
ファイルの権限を変更します。

$ chmod 777 start_jupyter.sh 
CentOS7以降だと起動しない場合があります(参考)。実行権限を付与します。

$ chmod u+x /etc/rc.d/rc.local 
root権限でshutdown -r nowでEC2を再起動します。

ブラウザでサーバにアクセスし、jupyterのlogin画面が出たら成功です。


AMIからサーバを再作成

ここまでサーバを構築出来たら、サーバのイメージを作成します。そして作成されたAMIを元に好きなスペックでサーバを立て直します。私はC5.4xlargeインスタンス(メモリ32GiB、ストレージ100GiB)で作成しなおしました。1時間約80円です。まあまあします。


おまけ

データの移動などのために、ec2-userのディレクトリの権限を開放しておくと便利だと思い、chmod 755 ec2-userをしたら、外部からsshで接続できなくなりました。

次のコマンドで元に戻りました。

$ chmod 755 ec2-user 


おわりに

AWSにjupyterを構築しました。噂ではGCPのほうがコストが安くなるとかで、そちらも試してみたいです。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)