技術的な話

Jupyter NotebookをREST API経由で自動実行させたとき遭遇したエラー

Jupyter NotebookをREST API経由で自動実行させたかった際に遭遇したエラーの回避方法をまとめました。

あんまりJupyter Notebookを自動実行する人なんかいないと思いますが…。

環境

  • Docker
  • Jupyter Notebook 6.2.0(Docker Image)

やりたかったこと

  1. REST API経由でKernelを起動し、Kernel idを取得
  2. 動作させたいNotebookファイルをダウンロードし、ソースコードを取得する
  3. 1.で取得したKernel idを元にWebsocket接続を行う
  4. 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

設定が反映されたのちに再度アクセスすると無事にデータを取得することが出来ました。

-技術的な話
-, , ,