Amazon Linux 2 で Jupyter Notebook を使ってみた

2018.10.26

はじめに

こんにちは、望月です。

みなさん、分析してますか?

Amazon Linux 2でJupyter Notebookを使えるようにする機会があったので簡単ではありますが手順をご紹介したいと思います。

Jupyter Notebookとは

おもに、数値計算・データ解析で使われていますが、プログラムを実行し実行結果を記録できるツールです。

今回の構成

今回はNginxによるリバースプロキシ経由で、Jupyter Notebookに接続する方法でやっていきたいと思います。

また、インストール方法については Anaconda と Pyhton pip の2種類あり、新しく Jupyter Notebook を利用するユーザには Anaconda が推奨されていますが、ここでは Pyhton pip にてやっていきたいと思います。

Anaconda については、別途試してみて、記事にできればと思っています。

構築

EC2インスタンスの作成

Amazon Linux 2のEC2インスタンスを用意します。

  • セキュリティグループで22, 80, 8888 を、自身のIPアドレスのみ許可する形にします。
    • 80や8888を不特定に許可すると、Jupyter Notebookでリソースを許可無く使用される可能性があります。

python3のインストール

python3をExtras Libraryからインストールします。

$ sudo amazon-linux-extras install python3

Jupyterのインストール

Jupyterのパッケージをインストールします。

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

Jupyter Notebook を起動します。

セキュリティグループで IPアドレス制限 をしている前提で '0.0.0.0' としています。

$ jupyter notebook --ip='0.0.0.0'
……
[I xx:xx:xx.xxx NotebookApp] http://(xxxxx):8888/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
……

Jupyter Notebookへ接続

  • 下記、URLでJupyter Notebookの画面が表示されます。
    • http://:8888/
    • Password or token:

これで Jupyter Notebook が使えるようになりました。簡単ですね。

ただ、毎回ログインし、コマンド実行するのも大変なので、サービス化していきたいと思います。

Jupyter Notebook 実行用OSユーザ作成

Jupyter Notebookのサービス化のため、実行用OSユーザを作成します。

$ sudo useradd jupyter
$ sudo passwd jupyter

Jupyter Notebook 用のユニットファイルを作成

$ sudo vim /etc/systemd/system/jupyter.service

[Unit]
Desctiption = Jupyter notebook
After = syslog.target

[Service]
Type = simple
WorkingDirectory = /home/jupyter
Restart = always
ExecStart = /usr/bin/jupyter notebook --ip=127.0.0.1 --no-browser --NotebookApp.base_url=/jupyter
User = jupyter
Group = jupyter

[Install]
WantedBy = multi-user.target

起動時に立ち上がるように有効化し、起動する

$ sudo systemctl enable jupyter
$ sudo systemctl start jupyter
$ sudo systemctl status jupyter

Nginxのインストール

NginxのパッケージをExtras Libraryからインストールします。

$ sudo amazon-linux-extras install nginx1.12

リバースプロキシ設定を入れます。

$ sudo vim /etc/nginx/conf.d/jupyter.conf

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen       80 default_server;
    server_name  _;
    root         /usr/share/nginx/html;

    location /jupyter {
        proxy_pass http://localhost:8888;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_read_timeout 86400;
        proxy_set_header Origin "http://localhost:8888";
    }
}

デフォルトコンフィグの"default_server"をコメントアウトします。

$ sudo vim /etc/nginx/nginx.conf

listen 80 default_server;
listen [::]:80 default_server;
↓↓↓↓
#listen 80 default_server;
#listen [::]:80 default_server;

nginxを起動する

$ sudo systemctl enable nginx
$ sudo systemctl start nginx
$ sudo systemctl status nginx

接続

  • 下記、URLでJupyter Notebookの画面が表示されます。
    • http:///jupyter/
      • journalctl -u jupyter | less
        • このコマンドを実施し、最後に出力された token を確認します。
      • 今後は Password 設定を行い、token いらずログインできる形にしましょう。

  • ログインし、実際にPythonを実行してみます。
  • 画面右「New」→「Python 3」をクリック

  • 以下コードを入力し、画面上「Run」をクリック
import sys
print (sys.version)

Pythonのバージョン情報が帰ってきたら、問題なく実行できています。

それでは、みなさん、よい分析ライフを!