クラウド ストレージを Azure Databricks に接続するための外部の場所を作成する
この記事では、クラウド ストレージを Azure Databricks に接続するために Unity Catalog で外部の場所を構成する方法について説明します。
外部の場所によって、Unity Catalog ストレージの資格情報がクラウド オブジェクト ストレージ コンテナーに関連付けられます。 外部の場所は、カタログとスキーマのマネージド ストレージの場所を定義するため、および外部テーブルと外部ボリュームの場所を定義するために使用されます。
Azure Data Lake Storage Gen2 ストレージ コンテナーまたは Cloudflare R2 バケット内のストレージを参照する外部の場所を作成できます。
外部の場所は、カタログ エクスプローラー、Databricks CLI、ノートブックまたは Databricks SQL クエリの SQL コマンド、または Terraform を使用して作成できます。
Note
ボリュームを定義すると、ボリューム パスの下のデータへのクラウド URI アクセスは、そのボリュームのアクセス許可によって管理されます。
始める前に
前提条件:
Azure Databricks で外部の場所オブジェクトを作成する前に、外部の場所として使用する Azure Data Lake Storage Gen2 ストレージ コンテナーまたは Cloudflare R2 バケットを作成する必要があります。
外部の場所として使う Azure Data Lake Storage Gen2 ストレージ アカウントには、階層型名前空間が必要です。
クラウド ストレージの場所のパスへのアクセスを許可するストレージ資格情報が Azure Databricks で定義されている必要があります。 「Azure Data Lake Storage Gen2 に接続するためのストレージ資格情報を作成する」と「Cloudflare R2 に接続するためのストレージ資格情報を作成する」を参照してください。
アクセス許可の要件:
- メタストアと、外部の場所で参照されているストレージ資格情報の両方に対する
CREATE EXTERNAL LOCATION
特権が必要です。 メタストア管理者は、既定でメタストアに対するCREATE EXTERNAL LOCATION
が付与されています。
カタログ エクスプローラーを使用して外部の場所を手動で作成する
カタログ エクスプローラーを使って、外部の場所を手動で作成できます。
アクセス許可と前提条件: 開始する前にをご覧ください。
外部の場所を作成するには:
メタストアに接続されているワークスペースにログインします。
サイド バーで、 [カタログ] をクリックします。
[カタログ] ペインの上部にある [追加] アイコンをクリックし、メニューから [外部の場所の追加] を選択します。
または、[クイック アクセス] ページから、[外部データ]> ボタンをクリックし、[外部の場所] タブに移動し、[場所の作成] をクリックします。
外部の場所の名前を入力してください。
必要に応じて、既存のマウント ポイントからコンテナーのパスをコピーします (Azure Data Lake Storage Gen2 コンテナーのみ)。
既存のマウント ポイントからコピーしない場合は、URL フィールドを使って、外部の場所として使うストレージ コンテナーまたは R2 バケット パスを入力してください。
たとえば、
abfss://my-container-name@my-storage-account.dfs.core.windows.net/<path>
またはr2://my-bucket@my-account-id.r2.cloudflarestorage.com/<path>
です。場所へのアクセスを付与するストレージの資格情報を選択してください。
(省略可能)ユーザーに外部の場所への読み取り専用アクセス権を付与する場合は、[詳細オプション] をクリックし、[読み取り専用] を選択してください。 詳細については、「外部の場所を読み取り専用としてマークする」を参照してください。
Create をクリックしてください。
(省略可能) 外部の場所を特定のワークスペースにバインドします。
既定では、すべての特権ユーザーが、メタストアに接続されている任意のワークスペースで外部の場所を使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、[ワークスペース] タブに移動してワークスペースを割り当てます。 「(省略可能) 外部の場所を特定のワークスペースに割り当てる」を参照してください。
外部の場所を使用するアクセス許可を付与します。
外部の場所を使用するすべてのユーザーに、アクセス許可を付与する必要があります。
- 外部の場所を使用して、マネージド ストレージの場所をメタストア、カタログ、またはスキーマに追加するには、
CREATE MANAGED LOCATION
権限を付与してください。 - 外部テーブルまたはボリュームを作成するには、
CREATE EXTERNAL TABLE
またはCREATE EXTERNAL VOLUME
を付与してください。
カタログ エクスプローラーを使用してアクセス許可を付与するには:
- 外部の場所の名前をクリックして、詳細ウィンドウを開いてください。
- [アクセス許可] タブで [付与] をクリックします。
- [
<external location>
の許可] ダイアログの [プリンシパル] フィールドでユーザー、グループ、またはサービス プリンシパルを選択し、付与する権限を選択してください。 - [許可] をクリックします。
- 外部の場所を使用して、マネージド ストレージの場所をメタストア、カタログ、またはスキーマに追加するには、
SQL を使って外部の場所を作成する
SQL を使用して外部の場所を作成するには、ノートブックまたは SQL クエリ エディターで次のコマンドを実行します。 プレースホルダー値を置き換えます。
アクセス許可と前提条件: 開始する前にをご覧ください。
<location-name>
: 外部の場所の名前。location_name
にハイフン (-
) などの特殊文字が含まれている場合は、バッククォート (` `
) で囲む必要があります。 「名前」を参照してください。<bucket-path>
: この外部の場所によってアクセスを付与するクラウド テナント内のパス。 たとえば、abfss://my-container-name@my-storage-account.dfs.core.windows.net/<path>
またはr2://my-bucket@my-account-id.r2.cloudflarestorage.com/<path>
です。<storage-credential-name>
: ストレージ コンテナーまたはバケット パスに対する読み取りと書き込みを認可するストレージ資格情報の名前。 ストレージ資格情報名にハイフン (-
) などの特殊文字が含まれている場合は、バッククォート (` `
) で囲む必要があります。
CREATE EXTERNAL LOCATION [IF NOT EXISTS] `<location-name>`
URL '<bucket-path>'
WITH ([STORAGE] CREDENTIAL `<storage-credential-name>`)
[COMMENT '<comment-string>'];
外部の場所のアクセスをアカウント内の特定のワークスペースに制限する (ワークスペースのバインディングまたは外部の場所の分離とも呼ばれます) 場合、「(省略可能) 外部の場所を特定のワークスペースに割り当てる」を参照してください。
(省略可能) 外部の場所を特定のワークスペースに割り当てる
重要
この機能はパブリック プレビュー段階にあります。
既定では、外部の場所は、メタストア内のすべてのワークスペースからアクセスできます。 つまり、ユーザーがその外部の場所で特権 (READ FILES
など) を付与されている場合、メタストアに接続されたどのワークスペースからでもその特権を行使できるということです。 ワークスペースを使用してユーザーのデータ アクセスを分離する場合、特定のワークスペースからのみ外部の場所へのアクセスを許可することができます。 この機能はワークスペースのバインディングまたは外部の場所の分離とも呼ばれます。
外部の場所を特定のワークスペースにバインドする一般的なユース ケースには次のものがあります。
- 運用データを含む外部の場所に対する
CREATE EXTERNAL TABLE
特権を持つデータ エンジニアが、運用ワークスペース内のその場所でのみ外部テーブルを作成できることを確実にする。 - 機密データを含む外部の場所に対する
READ FILES
特権を持つデータ エンジニアが、特定のワークスペースのみを使用してそのデータにアクセスできることを確実にする。
ワークスペース別に他の種類のデータ アクセスを制限する方法の詳細については、「特定のワークスペースに対するカタログ アクセスの制限」を参照してください。
重要
ワークスペース バインディングは、外部の場所に対する特権が行使される時点で参照されます。 たとえば、ユーザーが myWorkspace
ワークスペースからステートメント CREATE TABLE myCat.mySch.myTable LOCATION 'abfss://my-container-name@storage-account-name.dfs.core.windows.net/finance'
を発行して外部テーブルを作成した場合、通常のユーザー特権チェックに加えて、次のワークスペース バインド チェックが実行されます。
'abfss://my-container-name@storage-account-name.dfs.core.windows.net/finance'
を対象範囲とする外部の場所はmyWorkspace
にバインドされているかどうか。- カタログ
myCat
はアクセス レベルRead & Write
でmyWorkspace
にバインドされているかどうか。
その後、外部の場所が myWorkspace
からバインド解除されると、外部テーブルは引き続き機能します。
この機能を使用すると、中央のワークスペースからカタログを設定し、カタログ バインドを使用して他のワークスペースで使用できるようにできます。外部の場所を他のワークスペースでも使用できるようにする必要はありません。
外部の場所を 1 つ以上のワークスペースにバインドする
特定のワークスペースに外部の場所を割り当てる場合、カタログ エクスプローラーまたは Databricks CLI を使用できます。
必要なアクセス許可: メタストア管理者または外部の場所の所有者。
Note
外部の場所が現在のワークスペースに割り当てられているかどうかに関係なく、メタストア管理者はカタログ エクスプローラーを使用してメタストア内のすべての外部の場所を表示できます。また、外部の場所の所有者は、メタストア内で自分が所有しているすべての外部の場所を表示できます。 ワークスペースに割り当てられていない外部の場所は、灰色で表示されます。
カタログ エクスプローラー
メタストアにリンクされているワークスペースにログインします。
サイド バーで、 [カタログ] をクリックします。
[カタログ] ペインの上部にある 歯車アイコンをクリックし、[外部の場所] を選択します。
または、[クイック アクセス] ページから、[外部データ]> ボタンをクリックし、[外部の場所] タブに移動します。
外部の場所を選択し、[ワークスペース] タブに移動します。
[ワークスペース] タブ で、[All workspaces have access] (すべてのワークスペースにアクセス権がある) チェック ボックスをオフにします。
外部の場所が既に 1 つ以上のワークスペースにバインドされている場合、このチェック ボックスは既にオフになっています。
[Assign to workspaces] (ワークスペースに割り当てる) をクリックし、割り当てるワークスペースを入力または検索します。
アクセスを取り消すには、[ワークスペース] タブに移動し、ワークスペースを選択して [失効] をクリックします。 すべてのワークスペースからのアクセスを許可するには、[All workspaces have access] (すべてのワークスペースにアクセス権がある) チェック ボックスをオンにします。
CLI
外部の場所をワークスペースに割り当てるには、2 つの Databricks CLI コマンド グループと 2 つの手順が必要です。
次の例では、<profile-name>
を Azure Databricks 認証構成プロファイルの名前に置き換えてください。 これには、個人用アクセス トークンを生成したワークスペースのワークスペース インスタンス名とワークスペース ID に加えて、個人用アクセス トークンの値が含まれている必要があります。 「Azure Databricks 個人用アクセス トークン認証」をご覧ください。
external-locations
コマンド グループのupdate
コマンドを使用して、外部の場所のisolation mode
をISOLATED
に設定します。databricks external-locations update <my-location> \ --isolation-mode ISOLATED \ --profile <profile-name>
既定の
isolation-mode
は、メタストアにアタッチされているすべてのワークスペースでOPEN
です。workspace-bindings
コマンド グループのupdate-bindings
コマンドを使用して、ワークスペースを外部の場所に割り当てます。databricks workspace-bindings update-bindings external-location <my-location> \ --json '{ "add": [{"workspace_id": <workspace-id>}...], "remove": [{"workspace_id": <workspace-id>}...] }' --profile <profile-name>
"add"
プロパティと"remove"
プロパティを使用し、ワークスペース バインドを追加するか、削除します。Note
読み取り専用バインディング (
BINDING_TYPE_READ_ONLY
) は、外部の場所では使用できません。 したがって、外部の場所のバインディングにbinding_type
を設定する理由はありません。
外部の場所のすべてのワークスペース割り当てを一覧表示するには、workspace-bindings
コマンド グループの get-bindings
コマンドを使用します。
databricks workspace-bindings get-bindings external-location <my-location> \
--profile <profile-name>
REST API リファレンスの「ワークスペース バインド」もご覧ください。
ワークスペースから外部の場所のバインドを解除する
カタログ エクスプローラーまたは workspace-bindings
CLI コマンドを使用して外部の場所へのワークスペース アクセスを取り消す手順は、「外部の場所を 1 つ以上のワークスペースにバインドする」に記載されています。
次のステップ
- 外部の場所を使用するためのアクセス許可を他のユーザーに付与します。 「外部の場所を管理する」を参照してください。
- 外部の場所を使用して、マネージド ストレージの場所を定義します。 「Unity Catalog の管理されたストレージの場所の指定」を参照してください。
- 外部の場所を使用して外部テーブルを定義します。 「外部テーブルの操作」を参照してください。
- 外部の場所を使用して外部ボリュームを定義します。 「Unity Catalog ボリュームとは?」を参照してください。