概要
Azure Data Factory から Databricks シークレットを取得する Databricks ノートブックを実行した際に発生した下記エラーに対する対応方法を共有します。一時的にエラーとなっているだけかもしれませんが、念のため記事にしました。
IllegalArgumentException: No enum constant com.databricks.api.proto.databricks.ErrorCodeEnum.ErrorCode.401
対応方法としては、Unity カタログ アクセス モード
を割り当て済み
に変更する方法です。試しておりませんが、共有
に設定しても動作する可能性があります。
以前に投稿した記事にて、Unity Catalog が有効なワークスペースではアクセスモードがシングルユーザー
となり今回のエラーは発生しませんが、Unity Catalog が有効でないワークスペースでは今回のエラーが発生する可能性があります。
引用元:Azure Data Factory から Databricks Jobs computing を作成した際の挙動確認 #AzureDataFactory - Qiita
エラーの発生方法と
事前準備
Databricks シークレットの登録
%pip install databricks-sdk --upgrade -q
dbutils.library.restartPython()
from databricks.sdk import WorkspaceClient
from databricks.sdk.core import DatabricksError
w = WorkspaceClient()
scope_name = 'qiita'
try:
w.secrets.create_scope(scope=scope_name)
except DatabricksError:
print(f"Scope `{scope_name}` already exists!")
# シークレットの項目名と値をセット
scope_key_and_values = {
"value_01": "qiita_article_01",
"value_02": "qiita_article_02",
}
# シークレットを登録
for key,value in scope_key_and_values.items():
w.secrets.put_secret(
scope=scope_name,
key=key,
string_value=value,
)
シークレットを取得するノートブックを作成
# シークレットを取得できることを確認
scope_name = 'qiita'
print(dbutils.secrets.get(scope_name,"value_01"))
エラーの再現
デフォルトの状態(Unity カタログ アクセス モード
が空)の状態の Databricks のリンクサービスを作成
シークレットを取得するノートブックをパイプラインから実行し、エラー終了となることを確認
IllegalArgumentException: No enum constant com.databricks.api.proto.databricks.ErrorCodeEnum.ErrorCode.401