以下はDatabricksサポートからのメールの翻訳です。
Databricksでは、以前DBFS(Databricksファイルシステム)に格納されたinitスクリプトを非推奨とすることを発表しました。DBFSに格納されたinitスクリプトでは既知のセキュリティの影響があります。DBFSに格納されたinitスクリプトを使用しているのであれば、より強力なセキュリティ保証とユーザー分離を提供するワークスペースファイル上のinitスクリプトにすぐに移行してください。
2023/9/1にDBFSのinitスクリプトのサポートはエンドオブライフとなり、この日以降はこの機能は動作しなくなります。
2023/9/1以降にクラスターやジョブが動作し続けるようにするには、以下のアクションを取らなくてはなりません:
- DBFS上でcluster-named initスクリプトを使っているのであればそれらを無効化し、cluster-scopedスクリプトに移行し、ワークスペースファイルとしてそのスクリプトを格納されるようにしなくてはなりません。移行作業を自動化するために、このノートブックを活用することができます。
- すべてのDBFSに格納されているcluster-scoped initスクリプトをワークスペースファイルに移行する必要があります。移行作業を自動化するために、このノートブックを活用することができます。
さらに
- レガシーなグローバルinitスクリプトを使い続けているのであれば、すぐに新たなグローバルinitスクリプトに移行してください。移行作業を自動化するために、このノートブックを活用することができます。
initスクリプトの詳細については、こちらのinitスクリプトのドキュメントをご覧ください。
さらにご質問があるのであれば、help@databricks.com にお問い合わせください。
Thanks,
Databricks Support
訳者補足
Databricksには、クラスター起動時にスクリプトを実行するためのinitスクリプトの機能がありますが、これにはいくつかの種類があります。
- レガシーグローバルinitスクリプト(legacy global init script)
- グローバルinitスクリプト(global init script)
- クラスターネームドinitスクリプト(Cluster-named init script)
- クラスタースコープinitスクリプト(Cluster-scoped init script)
グローバルinitスクリプトはワークスペースのすべてのクラスターで動作するinitスクリプトであり、クラスターネームドinitスクリプトやクラスタースコープinitスクリプトは個々のクラスターで動作するinitスクリプトです。
1はすでに非推奨になっているので、仮に使っているのであれば、すぐにグローバルinitスクリプトに移行してください。そして、3もすでに非推奨になっていますので、仮に使っているのであればこちらもすぐにクラスタースコープinitスクリプトに移行してください。
冒頭のメールは上のリストの 4. クラスタースコープinitスクリプト(Cluster-scoped init script) が対象です。
これまで、このクラスタースコープinitスクリプトの保管場所は、DBFS(Databricksファイルシステム)でしたが、これが2023/9/1に非推奨になるのでクラウドオブジェクトストレージ(S3/ADLS/GCS)あるいはワークスペースファイルに格納していただく必要があります。
以下では確認手順、移行手順を説明します。
ワークスペースで稼働しているクラスターが少ない場合
目視でクラスター設定を確認します。作成済みのクラスターにアクセスし、高度なオプション -> initスクリプトで設定されたものが無ければ、
initスクリプトは使用されていないと言えます。
逆にタイプがDBFSのinitスクリプトが設定されている場合には移行が必要です。
手動で移行するには、DBFSに格納されているinitスクリプトの中身をコピーして、ワークスペース上のファイルとして作成し、initスクリプトとして参照するようにクラスターを設定しなおします。手順はこちらをご覧ください。
ワークスペースで稼働しているクラスターが多い場合
移行ノートブックをお使いください。
準備
-
ワークスペース管理者のパーソナルアクセストークンを取得します。
-
ローカルマシンでDatabricks CLIを用いて、Databricksシークレットにパーソナルアクセストークンを登録します。以下の例ではシークレットスコープ
my_scope
、キーdb_token
にパーソナルアクセストークンを登録しています。databricks secrets create-scope --scope my_scope
databricks secrets put --scope my_scope --key db_token
ノートブックのドライラン
このノートブックはDBFS上のクラスタースコープスクリプトを、ワークスペースファイルとしてクラスタースコープinitスクリプトとして保存します。レガシーなクラスターネームドのinitスクリプトは無効化されます。
警告
このノートブックを実行すると、変更されたすべてのクラスターを再起動する場合があります。恒久的な変更を行うことなしに、どのような変更が行われるのかを確認するためにDry runオプションを使ってください。
このスクリプトは特定のDatabricksランタイムバージョンに依存しません。コントロールプレーンに対するAPI呼び出しのみを行います。
最初にノートブックの最後のセルを実行するとエラーメッセージが表示されますが、画面の上部にウィジェットが表示されます。
このScope NameとSecret Nameに、上で設定したシークレットスコープ名とキー名を入力します。そして、一番左のDry RunがTrueになっていることを確認して、再度最後のセルを実行します。
移行対象の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再起動されます。