6
5

More than 5 years have passed since last update.

ストレージアカウントの作成

※既存のBlob Storageをマウントする場合は「DBFSにBlob Storageをマウント」から操作を実行します

Azureポータルの「リソースの作成」をクリックし、一覧から「ストレージアカウント」を選択して作成を開始します。
img03-0001.png
作成に必要な情報を入力します。設定内容は任意ですが、「リソースグループ」と「場所」はAzure Databricksと同じものを指定します。設定が出来たら「次: 詳細 >」をクリックします。
img03-0002.png
「詳細」設定に関してはデフォルトのままで、「確認および作成」をクリックします。
img03-0003.png
設定内容に誤りがないことを確認して、「作成」をクリックします。
img03-0004.png
しばらく待機し、作成が完了したら作成したリソースに移動します。
img03-0005.png
マウント時のパラメータとしてストレージアカウントの「アクセスキー」必要となるため、メニューの「アクセスキー」を開いて、「key1」、「key2」いずれかの「キー」をコピーして控えておきます。
img03-0006.png

Blobコンテナーの作成とファイルの配置

ストレージアカウントのメニューの「概要」に戻り、「サービス」の「BLOB」をクリックします。
img03-0007.png
「+コンテナー」をクリックして、「名前」を任意のコンテナ名、「パブリックアクセスレベル」を「プライベート」としてコンテナを作成します。
img03-0008.png
ファイルを配置するため作成したコンテナーをクリックし、コンテナーを開きます。
img03-0009.png
「↑アップロード」をクリックして、ファイルを選択し、「アップロード」をクリックします。
img03-0010.png
アップロードが完了するとコンテナーにファイルのリストが表示されます。
img03-0011.png

DBFSにBlob Storageをマウント

Blobコンテナーのマウント

Blob Storageのマウントは下記のスクリプトを使用します。(ストレージ情報、マウント先DBFSディレクトリは作成したリソースに合わせて変更してください。)

一度マウントすると、Clusterを停止、変更してもマウント状態が維持されます。
マウントされた状態で再度操作を実行するとエラーが発生するため、マウント状態をチェックするか、スクリプトをコメントアウトしてエラーの回避します。

Cmd 1
# Blob Storage情報
storage = {
  "account": "{ストレージアカウント名}",
  "container": "{Blobコンテナ名}",
  "key": "{ストレージアカウントキー}"
}

# マウント先DBFSディレクトリ
mount_point = "/mnt/{マウント先ディレクトリ}"

try:
  # マウント状態のチェック
  mount_dir = mount_point
  if mount_dir[-1] == "/":
    mount_dir = mount_dir[:-1]
  if len(list(filter(lambda x: x.mountPoint == mount_dir, dbutils.fs.mounts()))) > 0:
    print("Already mounted.")
    mounted = True
  else:
    mounted = False

  # Blob Storageのマウント
  if not mounted:
    source = "wasbs://{container}@{account}.blob.core.windows.net".format(**storage)
    conf_key = "fs.azure.account.key.{account}.blob.core.windows.net".format(**storage)

    mounted = dbutils.fs.mount(
      source=source,
      mount_point = mount_point,
      extra_configs = {conf_key: storage["key"]}
    ) 

except Exception as e:
  raise e

"mounted: {}".format(mounted)

img03-0012.png
下記スクリプトでマウントされているディレクトリを確認します。
Blob Storageをマウントしたディレクトリがリストで確認できます。

Cmd 2
# mount_point = "/mnt/{マウント先ディレクトリ}"
display(dbutils.fs.mounts())

img03-0013.png

マウントされたディレクトリの確認

下記スクリプトを使用してマウントしたディレクトリ内のファイルを表示します。

※ マウントしたディレクトリにファイルが存在しないとエラーが発生します。

Cmd 3
# mount_point = "/mnt/{マウント先ディレクトリ}"
display(dbutils.fs.ls(mount_point))

img03-0014.png

Blobコンテナーのアンマウント

ストレージのマウントを解除する場合は下記スクリプトを使用します。

Cmd 4
# mount_point = "/mnt/{マウント先ディレクトリ}"
dbutils.fs.unmount(mount_point)

img03-0015.png

秘密情報の安全な管理

秘密情報をスクリプト上に記載することはセキュリティ上の懸念となります。

ストレージアカウントキーのような秘密情報を安全に管理するため、Azure Key Vaultの使用が推奨されます。

Azure Key Vaultのキーコンテナー作成

Azureポータルの「リソースの作成」で「Key Vault」を検索し、検索候補の「Key Vault」をクリックして作成を開始します。
img03-0016.png
「キーコンテナーの作成」に必要な情報を入力します。「名前」は任意の名称、「リソースグループ」、「場所」Azure Databricksと同じものを指定します。その他の設定はデフォルトのままとします。
img03-0017.png
作成が完了したらリソースに移動します。
img03-0018.png

キーの登録

作成したキーコンテナーにストレージアカウントキーを登録します。
作成したリソースのメニューから「シークレット」を開いて「+生成/インポート」をクリックします。
img03-0019.png
「アップロードオプション」を「手動」として、「名前」、「値」に任意の名称とストレージアカウントキーを入力し、「作成」をクリックします。
img03-0020.png

DatabricksにAzure Key Vaultを登録

キーコンテナーのメニューから「プロパティ」を開き、「DNS名」と「リソースID」をコピーして控えておきます。
Databricksワークスペースのホーム画面を開き、URLに「#secrets/createScope」を追加して「Create Secret Scope」のページを開きます。
「Scope Name」に任意のスコープ名を入力し、「DNS Name」、「Resource ID」に作成したキーコンテナーの「プロパティ」で取得した「DNS名」、「リソースID」を入力します。
Databricks作成時にStandard Planを選択した場合、「Manage Principal」は「All Users」のみ選択できます。
入力したスコープ名はキーの取得に必要となるため控えておきます。
img03-0021.png
Notebookを開き、下記のスクリプトでスコープのリストを確認します。
スコープが登録されていると、登録したスコープがリストにあることが確認できます。

Cmd1
display(dbutils.secrets.listScopes())

img03-0022.png
BlobコンテナーのマウントにKey Vaultのキーを使用する場合は、Blob Storageの情報を下記のように書き換えます。

# Blob Storage情報
storage = {
  "account": "{ストレージアカウント名}",
  "container": "{Blobコンテナ名}",
  # "key": "{ストレージアカウントキー}"
  "key": dbutils.secrets.get(scope="{スコープ名}", key="{シークレット名}")
}

参考

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5