AWSで分析環境を構築するにあたり、EC2内にJupyterNotebookの実行環境を構築してみました。手順についてはググるといろいろと情報が出てくるのですが、当方ド素人のため、とりあえず最小限・最短経路の手順を整理して備忘録としました。実使用の上ではセキュリティやユーザビリティを考慮して別途対応すべき項目が増えるかと思います。
主に以下のページを参考にしています。
0. やりたいこと
AWSのEC2インスタンス 上でJupyter Notebookを起動し、別端末からアクセスして利用したい。
1. EC2インスタンス の設定
EC2インスタンス を立ち上げ、セキュリティグループの設定を行います。 そもそもAWSの登録・インスタンス 作成・セキュリティ設定がようわからん場合はこちらの記事が参考になります。
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は全ての接続元からの接続を許可している状態なので、セキュリティ的にはよろしくないです。パスワード設定するなりして、何かしら考慮しておくことが推奨されます。