Glue JupyterNotebookの（公式未記載の）設定値を変更する方法

# はじめに
GlueのJupyter Nootebookは開発しやすく大変便利ですが、コンソール上からでは設定値がグレーアウトしており、変更できません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/38abde96-907c-e833-5b3e-0f65b4f0f608.png)

公式ではマジックを使って変更できる、とあります。

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/interactive-sessions-magics.html

ですが上記ページ上では、最大同時実行数の変更方法の記載がありません。

最大同時実行数の変更方法を調べていく中で、設定を変更する方法をいくつか見つけましたので、今回はそれらを紹介します。

:::note warn
公式未記載の方法ですので、利用する際は自己責任でお願いします。
:::

# 概要

- 変更方法は以下が存在
    - スクリプト上にマジックで設定
    - バージョン管理システムで変更
    - ダウンロードしたJSONファイルで変更
- 上記の方法は各々で、反映されるタイミングが異なる
    - マジックで設定した際は、notebookを起動したタイミング
    - バージョン管理システムとJSONファイルは、読み込ませたタイミング
- 混乱を招かないよう、変更方法はいずれか1つの方法に統一したほうが良い


# マジックを使う方法
公式で定義されていなくても、マジックで設定可能でした。

## 最大同時実行数の変更

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/79feb07a-9e9a-9bf8-6595-78f2193898ef.png)

```
%%configure
{
    "max_concurrent_runs" : "2"
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/b563d399-fdfb-49b5-9171-ee6a28db483c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/f93d6f2a-af67-459d-58ba-27caa8043890.png)



## 最大リトライ回数の変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/ce891568-d212-6df3-7096-00648e1a4db9.png)


```
%%configure
{
    "max_retries" : "1"
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/2e91b2e1-0dcb-f302-60c6-f797309f5854.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/9a8cefa9-08ab-dd67-aa05-2b51cc298627.png)

## 説明の変更

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/8d64ff36-bc5a-cb13-cfdc-4f0c6419fb86.png)

```
%%configure
{
    "description" : "説明追記"
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/3605231b-ffff-517c-6238-00e5a80cccc3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/93f8b620-cefc-b820-7096-9ba7c56b13b8.png)


# バージョン管理を使う方法
対象のJOBのバージョン管理を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/4efb1116-3fee-2340-44ff-7f86b07806fa.png)
設定後、いったん保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/444abedc-c1e8-12b0-0060-fecc031d025c.png)

その後、Actionからバージョン管理に対してPUSHします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/a0e9dfa4-6c18-4cf3-c242-c62a11bf3e6a.png)

バージョン管理側で変更します。画面例はCodeCommitになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/d4a3cb56-d6b9-f8af-7f85-0e64c28b4fea.png)

変更をCommitしたら、Glueに戻ってPULLします。すると変更した設定が反映されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/7876112c-efae-a34a-01a7-d217c9fa9f20.png)

# ダウンロードしたJSONファイルを修正する方法
[Actions]から、Downloadを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/478d9869-b42d-d786-3c6f-8e6c59e45537.png)

ダウンロードされたjsonの`jobConfig`に、各種設定が記載されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/14296edc-db67-15f9-441d-9a0ead20fef3.png)

設定値を修正し保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/e74c3bd8-4d56-0f41-77e5-243aff92ea7a.png)

修正したJSONファイルを、[Actions]の、Uploadから取り込みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/f5c4c6c7-a8b0-09bd-308c-93d542d05d26.png)

それぞれ変更されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/b6bc857f-dbf0-e0f9-9778-7de6d84056a7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/b8fe5e70-3940-1985-e35f-337611fd23dd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/6220c86f-9f9e-25bc-f1f4-798bbb8eafc1.png)

取り込んだだけでは保存されていないので、反映させる場合はSaveが必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/231a69d2-fab2-f9af-208d-e9a7c84842c9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/11209eee-8d27-8001-3a1c-6080291eaa71.png)

:::note
この（JSONファイルの）キャメルケースで表記されている設定値のkey名を、スネークケースで表記したものがマジックの名前になっている...ように見られました。
:::

# 両方で設定変更した際の挙動

マジックによる設定と、バージョン管理やJSONファイルからの変更とで違いがあった場合、どちらの設定が優先されるのかも見てみました。

確かめてみて、以下のことがわかりました。

- どちらで記載されたかにかかわらず、Job details上で確認できる値で実行される
- マジックでの設定値変更が反映されるタイミングは、notebookインスタンスを起動したタイミングである

誤解を恐れずに言うと、以下のようなことになるかと思います。

-  notebookを起動させないでファイルから変更した場合は、ファイルで指定した設定になる
-  notebookを起動させた場合は、マジックで指定した設定になる

「マジックで指定した一方で、ファイルから変更」した場合、「（notebookを起動したから）ファイルの変更が無効」になったり、「（notebookを起動しなかったから）ファイルの変更で実行」されたりして、運用上危うい動きになりそうです。

なので設定変更する際は複数の手段は用いず、いずれか一つの方法だけで設定変更するのがよいかと思います。

# おわりに
今回はGlue JupyterNotebookにて、公式に明記されていない設定値を変更する方法を記載しました。
インタラクティブに開発できるGlueは大変に便利ですので、これでさらに色々用途が広がると思います。