概要
Storageのアクセス情報をAzureDatabricksのNotebooks上に記載してアクセスするのではなく、AzureKeyVaultを利用してアクセスしてみたいと思います。
必要なリソース
- StorageAccountとBlobコンテナー
- AzureDatabricks
- AzureKeyVault
#手順
blobコンテナーの作成
-
作成したStorageAccountの画面に移動し、[データストレージ]欄の[コンテナー]を選択します。[+コンテナー]を選択し、コンテナー名を入力します。
-
[セキュリティとネットワーク]の下にある[アクセスキー]を選択します。[StorageAccount名]と[key1のキー]情報をメモしておきます。
※キーの情報は、[キーの表示]をクリックすると表示されます。
AzureKeyVaultにシークレットを追加
-
[シークレットの作成]画面で、以下の情報を指定します。残りの値はデフォルトのまま使用します。
※ 対象StorageAccountキーのフレンドリ名はメモしておきます。
AzureDatabricksにシークレットスコープを作成
-
作成したAzureDatabricksのワークスペースを起動します。ワークスペースが別ウィンドウで開かれたら、URLの末尾に[#secrets/createScope]を追加します。
-
[Scope Name]を入力し、メモしておいた[コンテナーの URI]と[リソース ID]を入力します。
※ Scope Nameはメモしておきます。
-
AzureDatabricksワークスペースのホームページで[New Cluster]を選択します。[Cluster Name]を入力し、クラスターを作成します。
-
次のコマンドを実行して、コンテナーにマウントします。以下の値は変更してください。
- your-container-name
- StorageAccountに作成したコンテナ名
- your-storage-account-name
- 作成したStorageAccount名
- mount-name
- 任意で指定したmount-nameを使用してディレクトリが作成されます。
- config-key
- fs.azure.account.key.[your-storage-account-name].blob.core.windows.net" または、"fs.azure.sas.[your-container-name].[your-storage-account-name].blob.core.windows.net"を選択します。
- scope-name
- Databricksで作成したシークレットスコープの名前
- key-name
- AzureKeyVault内のStorageAccountキー用に作成したシークレットの名前
- your-container-name
dbutils.fs.mount(
source = "wasbs://<your-container-name>@<your-storage-account-name>.blob.core.windows.net",
mount_point = "/mnt/<mount-name>",
extra_configs = {"<conf-key>":dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")})
- BlobStorageコンテナー内のテキストファイルをデータフレームに読み込みます。
df = spark.read.text("/mnt/<指定のmount-name>/<コンテナ内のfile-name>")
- ファイルの内容を表示します。
df.show()
- マウントを解除します。
dbutils.fs.unmount("/mnt/<指定のmount-name>")