雑記 in hibernation

頭の整理と備忘録

AWSで最短(?)Jupyter Notebook環境構築


AWSで分析環境を構築するにあたり、EC2内にJupyterNotebookの実行環境を構築してみました。手順についてはググるといろいろと情報が出てくるのですが、当方ド素人のため、とりあえず最小限・最短経路の手順を整理して備忘録としました。実使用の上ではセキュリティやユーザビリティを考慮して別途対応すべき項目が増えるかと思います。

主に以下のページを参考にしています。

dev.classmethod.jp

qrunch.net

0. やりたいこと

AWSのEC2インスタンス 上でJupyter Notebookを起動し、別端末からアクセスして利用したい。

1. EC2インスタンス の設定

EC2インスタンス を立ち上げ、セキュリティグループの設定を行います。 そもそもAWSの登録・インスタンス 作成・セキュリティ設定がようわからん場合はこちらの記事が参考になります。

note.com

1.1. EC2インスタンスの作成

無料枠で使える適当なインスタンス を用意します。

1.2. セキュリティ設定

jupyterにポート8888を割り当てるので、セキュリティグループの設定を変更し、ポートを開けておきます。個人的に引っかかった点として、インバウンドの設定含め一通りの環境構築が終わったのちにポート8888に接続を試みたところ接続拒否され、上にあげた記事を参照したところアウトバウンドの設定ができておらず、ここを追加したら解決したりしました。

  • インバウンド
タイプ プロトコル ポート範囲 ソース
カスタム TCP ルール TCP 8888 0.0.0.0/0
SSH TCP 22 0.0.0.0/0


  • アウトバウンド
タイプ プロトコル ポート範囲 ソース
HTTP TCP 80 0.0.0.0/0
HTTPS TCP 443 0.0.0.0/0



2. Jupyterのインストール

jupyterをインストールし、外部から接続するためのconfigファイルを作成します。

2.1. 関連ライブラリのインストール

といっても、今回はPython3のみです。

$ sudo amazon-linux-extras install python3  


2.2. Jupyterのインストール

最新版ではanacondaをインストールする方法が推奨されているらしいですが、今回はpipでjupyter単体をインストールしていきます。

$ sudo python3 -m pip install --upgrade pip
$ sudo python3 -m pip install jupyter


2.3. Jupyterの設定

まずJupyterのconfigファイルを作成します。

$ mkdir .jupyter  
$ vim .jupyter/jupyter_notebook_config.py 


次にconfigファイルに以下の項目を追加します。 なお、3行目に関してはJupyterのポートはデフォルトで"8888"なので、あえて記載しなくても問題はないようです。

c.NotebookApp.ip = '*'  # 接続元のIPアドレスに制限をかけない
c.NotebookApp.open_browser = False  # 開始時にブラウザを開かない
c.NotebookApp.port = 8888 # ポートを指定


3. 接続

jupyterを起動します

$ jupyter notebook


起動時にコンソール上に下記のような形でプライベートIP,DNS及びトークンが表示されます

    To access the notebook, open this file in a browser:
        file:///home/ec2-user/.local/share/jupyter/runtime/xxxx.html
    Or copy and paste one of these URLs:
        http://ip-xxx-xx-xx-xxxx.us-east-2.compute.internal:8888/[トークン]
     or http://xxx.x.x.x:8888/[トークン]


この情報を元に、端末のブラウザから以下のURLにアクセスします。

ブラウザにjupyterのホーム画面が表示されたらミッションコンプリートです。

おわりに

ということで、AWSでのJupyter環境構築の最短経路でした。これをベースにしつつ必要に応じて周辺環境をカスタマイズしていけばいい感じじゃあないでしょうか。 なお、上記のポート8888及びJupyterは全ての接続元からの接続を許可している状態なので、セキュリティ的にはよろしくないです。パスワード設定するなりして、何かしら考慮しておくことが推奨されます。