Jupyter NotebookをREST API経由で自動実行させたかった際に遭遇したエラーの回避方法をまとめました。
あんまりJupyter Notebookを自動実行する人なんかいないと思いますが…。
目次
環境
- Docker
- Jupyter Notebook 6.2.0(Docker Image)
やりたかったこと
- REST API経由でKernelを起動し、Kernel idを取得
- 動作させたいNotebookファイルをダウンロードし、ソースコードを取得する
- 1.で取得したKernel idを元にWebsocket接続を行う
- Websocket接続経由で2.で取得したソースコードを送信してプログラムを実行する
今回のエラーは2.で発生しました。
エラー内容
以下のエラーでしたが、XSRFのトークンが無いよってことらしい。
というか正確に言うとREST APIというより、Websocketでのエラーですね。
_xsrf argument missing from post
恐らくRequest送信時に情報を埋め込むのがスジな気はしますが、今回は公開するようなものではなかったので、別の方法で対策(というか回避策)を取りました。
面倒臭いというのは内緒です。
回避策
今回は設定を変更して認証をスキップします。
$ vi /home/jovyan/.jupyter/jupyter_notebook_config.py
ファイルが存在しない場合は下記のコマンドを入力します。
$ jupyter notebook --generate-config
設定ファイルの下記変数をTrueに変更します。
最初の状態はコメントアウトされており、尚且つFalseと設定されているはずです。
c.NotebookApp.disable_check_xsrf = True
設定の反映タイミングは不明ですが、私の場合はDockerイメージを再起動したら設定が反映されました。
$ sudo docker-compose down
$ sudo docker-compose up -d
設定が反映されたのちに再度アクセスすると無事にデータを取得することが出来ました。