DatabricksにおけるDBFSのinitスクリプトは2023/9/1にEnd of Serviceになります

以下はDatabricksサポートからのメールの翻訳です。

Databricksでは、以前DBFS(Databricksファイルシステム)に格納されたinitスクリプトを非推奨とすることを発表しました。[DBFSに格納されたinitスクリプト](https://www.databricks.com/blog/securing-databricks-cluster-init-scripts)では既知のセキュリティの影響があります。DBFSに格納されたinitスクリプトを使用しているのであれば、より強力なセキュリティ保証とユーザー分離を提供するワークスペースファイル上のinitスクリプトにすぐに移行してください。

**2023/9/1にDBFSのinitスクリプトのサポートはエンドオブライフとなり、この日以降はこの機能は動作しなくなります。**

**2023/9/1以降にクラスターやジョブが動作し続けるようにするには、以下のアクションを取らなくてはなりません:**

- DBFS上でcluster-named initスクリプトを使っているのであれば[それらを無効化](https://docs.databricks.com/clusters/init-scripts.html#disable-legacy-cluster-named-init-scripts-for-a-workspace)し、cluster-scopedスクリプトに移行し、[ワークスペースファイル](https://docs.databricks.com/files/workspace-init-scripts.html)としてそのスクリプトを格納されるようにしなくてはなりません。移行作業を自動化するために、[このノートブック](https://kb.databricks.com/cluster-named-init-script-migration-notebook)を活用することができます。
- すべてのDBFSに格納されているcluster-scoped initスクリプトを[ワークスペースファイル](https://docs.databricks.com/files/workspace-init-scripts.html)に移行する必要があります。移行作業を自動化するために、[このノートブック](https://kb.databricks.com/cluster-named-init-script-migration-notebook)を活用することができます。

**さらに**

- レガシーなグローバルinitスクリプトを使い続けているのであれば、すぐに[新たなグローバルinitスクリプトに移行](https://docs.databricks.com/clusters/init-scripts.html#migrate-from-legacy-to-new-global-init-scripts)してください。移行作業を自動化するために、[このノートブック](https://kb.databricks.com/legacy-global-init-script-migration-notebook)を活用することができます。

initスクリプトの詳細については、こちらの[initスクリプトのドキュメント](https://docs.databricks.com/clusters/init-scripts.html)をご覧ください。

さらにご質問があるのであれば、help@databricks.com にお問い合わせください。

Thanks,
Databricks Support

# 訳者補足

Databricksには、クラスター起動時にスクリプトを実行するためのinitスクリプトの機能がありますが、これにはいくつかの種類があります。

1. レガシーグローバルinitスクリプト(legacy global init script) 
1. グローバルinitスクリプト(global init script)
1. クラスターネームドinitスクリプト(Cluster-named init script)
1. クラスタースコープinitスクリプト(Cluster-scoped init script)

グローバルinitスクリプトはワークスペースのすべてのクラスターで動作するinitスクリプトであり、クラスターネームドinitスクリプトやクラスタースコープinitスクリプトは個々のクラスターで動作するinitスクリプトです。

1はすでに非推奨になっているので、仮に使っているのであれば、すぐに[グローバルinitスクリプトに移行](https://qiita.com/taka_yayoi/items/2c39d2c7bcf7b1213823)してください。そして、3もすでに非推奨になっていますので、仮に使っているのであればこちらもすぐにクラスタースコープinitスクリプトに移行してください。

冒頭のメールは上のリストの **4. クラスタースコープinitスクリプト(Cluster-scoped init script)** が対象です。

これまで、このクラスタースコープinitスクリプトの保管場所は、DBFS(Databricksファイルシステム)でしたが、これが2023/9/1に非推奨になるのでクラウドオブジェクトストレージ(S3/ADLS/GCS)あるいは[ワークスペースファイル](https://qiita.com/taka_yayoi/items/54c6c23d705c2b777b62#init%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90)に格納していただく必要があります。

以下では確認手順、移行手順を説明します。

## ワークスペースで稼働しているクラスターが少ない場合

目視でクラスター設定を確認します。作成済みのクラスターにアクセスし、**高度なオプション -> initスクリプト**で設定されたものが無ければ、
initスクリプトは使用されていないと言えます。
![Screenshot 2023-07-10 at 18.32.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/830eaf57-cf50-2968-dc02-2303cd8c2bae.png)

逆に**タイプ**が**DBFS**のinitスクリプトが設定されている場合には移行が必要です。
![Screenshot 2023-07-11 at 8.55.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b3c4f322-7f11-a53c-dc0b-30b4644a34d2.png)

手動で移行するには、DBFSに格納されているinitスクリプトの中身をコピーして、ワークスペース上のファイルとして作成し、initスクリプトとして参照するようにクラスターを設定しなおします。手順は[こちら](https://qiita.com/taka_yayoi/items/54c6c23d705c2b777b62#init%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90)をご覧ください。

## ワークスペースで稼働しているクラスターが多い場合

[移行ノートブック](https://static.helpjuice.com/helpjuice_production/uploads/upload/image/10723/3173374/1685035056411-05-24-2023%2B-%2BMigrate%2Bcluster-named%2Band%2Bcluster-scoped%2Binit%2Bscripts.html)をお使いください。

### 準備

1. ワークスペース管理者の[パーソナルアクセストークン](https://qiita.com/taka_yayoi/items/fa7f10bc80475c513383)を取得します。
1. ローカルマシンでDatabricks CLIを用いて、[Databricksシークレット](https://qiita.com/taka_yayoi/items/338ef0c5394fe4eb87c0)にパーソナルアクセストークンを登録します。以下の例ではシークレットスコープ`my_scope`、キー`db_token`にパーソナルアクセストークンを登録しています。

    ```
    databricks secrets create-scope --scope my_scope
    ```
    ```
    databricks secrets put --scope my_scope --key db_token
    ```

### ノートブックのドライラン

このノートブックはDBFS上のクラスタースコープスクリプトを、ワークスペースファイルとしてクラスタースコープinitスクリプトとして保存します。レガシーなクラスターネームドのinitスクリプトは無効化されます。

:::note warn
**警告**
このノートブックを実行すると、**変更されたすべてのクラスターを再起動する場合があります**。恒久的な変更を行うことなしに、どのような変更が行われるのかを確認するために**Dry run**オプションを使ってください。
:::

このスクリプトは特定のDatabricksランタイムバージョンに依存しません。コントロールプレーンに対するAPI呼び出しのみを行います。

最初にノートブックの最後のセルを実行するとエラーメッセージが表示されますが、画面の上部にウィジェットが表示されます。
![Screenshot 2023-07-11 at 9.04.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7afd3317-d05b-498a-f6b1-79792a49c3a0.png)

この**Scope Name**と**Secret Name**に、上で設定したシークレットスコープ名とキー名を入力します。そして、一番左の**Dry Run**が**True**になっていることを確認して、再度最後のセルを実行します。
![Screenshot 2023-07-11 at 9.06.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a0178173-1caf-fc49-4cc5-d159495c5d33.png)

移行対象のinitスクリプトがない場合には、`No...init scripts found`、`No change in configuration`のようなメッセージが表示されます。

```
GETting https://xxxx.cloud.databricks.com/api/2.0/clusters/list
Cluster "Takaaki Yayoi's Personal Compute Cluster": No named init scripts found in dbfs:/databricks/init/Takaaki Yayoi's Personal Compute Cluster
Cluster "Takaaki Yayoi's Personal Compute Cluster": No change in configuration
GETting https://tydatabricks-tydb-test-environment.cloud.databricks.com/api/2.1/jobs/list?expand_tasks=true
Workspace: Disabling cluster-named init scripts
Dry run: Would PATCH https://xxxx.cloud.databricks.com/api/2.0/workspace-conf:
{"enableDeprecatedClusterNamedInitScripts": "false"}
...Error 202
```

移行対象のinitスクリプトがある場合には、移行先含めてメッセージが表示されます。

```
GETting https://xxx.cloud.databricks.com/api/2.0/clusters/list
Cluster "Takaaki Yayoi's Personal Compute Cluster": No named init scripts found in dbfs:/databricks/init/Takaaki Yayoi's Personal Compute Cluster
Scripts to update: ['dbfs:/databricks/scripts/librosa_init_script.sh']
Dry run: Would POST {'path': "/init-scripts/Takaaki Yayoi's Personal Compute Cluster"} to https://xxx.cloud.databricks.com/api/2.0/workspace/mkdirs
```

### 移行スクリプトの実行

ウィジェットの**Dry Run**を**False**に変更すると、更新処理が実行されます。initスクリプトが移行され、クラスターの設定も更新されt再起動されます。
![Screenshot 2023-07-11 at 9.24.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/38d055aa-ffbb-14f4-2cf7-e510a3abf07d.png)
![Screenshot 2023-07-11 at 9.23.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/534ff733-ff17-9ad8-5d11-5c70ccdf2068.png)



### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)