クラウドストレージをDatabricksに接続するための外部ロケーションを作成する
この記事では、 からクラウド ストレージにアクセスするために で外部ロケーションUnity Catalog Databricksオブジェクトを構成する方法について説明します。
外部ロケーションの概要
外部ロケーションは、 ストレージ資格情報 を Cloud Object Storage コンテナに関連付けます。 外部ロケーションは、カタログとスキーマの管理ストレージ・ロケーションを定義するため、および外部テーブルと外部ボリュームのロケーションを定義するために使用されます。
AWS S3 または Cloudflare R2 バケット内のストレージを参照する外部ロケーションを作成できます。
次のいずれかのインターフェイスを使用して、外部ロケーションを作成できます。
-
これは、 AWS S3 バケットを参照する外部ロケーションを作成する場合に推奨されます。 Databricks では、前提条件となるストレージ資格情報オブジェクトが作成されるため、このオプションは他のオプションよりも簡単になります。
-
このオプションではグラフィカル UI が提供されますが、Databricks ユーザーが前提条件のストレージ資格情報を作成する必要があります。Catalog Explorer を使用して、 S3 バケット、Cloudflare R2 バケット、 DBFSルート (レガシー) を参照する外部ロケーションを作成できます
この記事では、オプション 1 から 3 について説明します。
DBFSルートのストレージ場所にデータを格納することは従来の方法であり、Databricks では推奨していません。ただし、ワークスペースが DBFSルートにデータを格納している場合は、 Unity Catalogを使用して外部ロケーションを作成し、そのデータへのアクセスを制御できます。 詳細については、「DBFSルート (レガシ) でデータの外部ロケーションを作成する」を参照してください。
外部ロケーションの使用、およびストレージ資格情報と外部ロケーションの関係の詳細については、「Unity Catalogを使用したクラウド オブジェクト ストレージへの接続」を参照してください。
始める前に
前提条件 :
-
Databricks で外部ロケーションオブジェクトを作成する前に、外部ロケーションとして使用する AWS S3 または Cloudflare R2 バケットを作成する必要があります。
-
S3 バケット名にはドット表記 (
incorrect.bucket.name.notation
など) は使用できません。バケットの命名規則の詳細については、 AWS バケットの命名規則を参照してください。 -
S3別の メタストアで外部ロケーションとして既に定義されているパスをUnity Catalog で使用しないでください。1 つの外部 S3 場所にあるデータを複数のメタストアから安全に読み取ることができますが、複数のメタストアから同じ S3 場所への並列書き込みは、一貫性の問題が発生する可能性があります。
-
-
AWS CloudFormation テンプレートを使用して外部ロケーションを作成しない場合は、まず、クラウドストレージロケーションパスへのアクセス権を付与するストレージ認証情報を Databricks で作成する必要があります。「 AWS S3に接続するためのストレージ認証情報を作成する 」および「 Cloudflare R2に接続するためのストレージ認証情報を作成する」を参照してください。
AWS CloudFormation フローを使用すると、そのストレージ認証情報が作成されます。
権限の要件 :
-
メタストアと、外部ロケーションで参照されるストレージ資格情報の両方に対する
CREATE EXTERNAL LOCATION
権限が必要です。 メタストア管理者は、デフォルトでメタストアにCREATE EXTERNAL LOCATION
を持っています。 -
DBFSルート ストレージの場所の外部ロケーションを作成する場合は、システムによってストレージ資格情報を作成できますが、ワークスペース管理者である必要があります。詳細については、「DBFSルートのデータ用の外部ロケーションの作成 (レガシ)」を参照してください。
-
AWS CloudFormation テンプレートを使用している場合は、メタストアに対する
CREATE STORAGE CREDENTIAL
権限も必要です。 メタストア管理者は、デフォルトでメタストアにCREATE STORAGE CREDENTIAL
を持っています。
オプション 1: AWS CloudFormation テンプレートを使用して S3 バケットの外部ロケーションを作成する
AWS CloudFormation テンプレートは、S3 バケットの外部ロケーションを作成するための推奨されるアプローチです。AWS CloudFormation テンプレートを使用して外部ロケーションを作成すると、Databricks は外部ロケーションを設定し、ストレージ認証情報を作成します。
次のいずれかで外部ロケーションを作成する場合は、CloudFormation テンプレートを使用しないでください。代わりに、「 オプション 2: カタログ エクスプローラーを使用して外部ロケーションを手動で作成する 」または 「オプション 3: SQL を使用して外部ロケーションを作成する」の手順を使用してください。
- Cloudflare R2バケット
- 既存の DBFS マウント ポイント
- DBFSルート
- ボリューム
カタログエクスプローラまたは を使用する場合は、まず、外部ロケーションによって参照される バケットへのアクセス権を付与する SQLIAMロールと、そのロールを参照するS3ストレージ認証情報 IAMを作成する必要があります。
Catalog Explorer と SQL オプションは、AWS CloudFormation テンプレートが失敗した場合にも役立ちます。
権限と前提条件: 「始める前に」を参照してください。
外部ロケーションを作成するには:
-
メタストアにアタッチされているワークスペースにログインします。
-
「カタログ 」(Catalog) をクリックしてカタログエクスプローラーを開きます。
-
クイック アクセス ページで、 外部データ > ボタンをクリックし、 外部ロケーション タブに移動して、 ロケーションの作成 をクリックします。
-
[ 新しい外部ロケーションを作成 ] ダイアログで、[ AWSクイックスタート(推奨) ]を選択し、[ 次のページ ] をクリックします。
AWS クイックスタートでは、外部ロケーションが構成され、ストレージ資格情報が作成されます。 手動 オプションを使用する場合は、IAMロールを手動で作成し、Databricksで S3バケットへのアクセス権を付与する ストレージ認証情報を自分で作成する必要があります。
-
クイックスタートで外部ロケーションを作成 ダイアログで、 バケット名 フィールドにS3バケットへのパスを入力します。
-
Generate new token をクリックして、 Databricks と AWS アカウント間の認証に使用する個人用アクセストークンを生成します。
-
トークンをコピーし、 クイックスタートで起動 をクリックします。
-
起動する AWS CloudFormation テンプレート ( クイック作成スタック というラベル) で、トークンを Databricksアカウント資格情報 フィールドに貼り付けます。
-
ページ下部の利用規約に同意します ( AWS CloudFormation がカスタム名で IAM リソースを作成する可能性があることを認めます )。
-
スタックを作成 をクリックします。
CloudFormation テンプレートが Databricksで外部ロケーションオブジェクトの作成を完了するまでに数分かかる場合があります。
CloudFormation テンプレートで外部ロケーションの作成に失敗した場合は、 オプション 2: Catalog Explorer を使用して外部ロケーションを手動で作成する または オプション 3: SQL を使用して外部ロケーションを作成する オプションを試すことができます。
-
Databricks ワークスペースに戻り、[ カタログ ]をクリックして カタログエクスプローラー を開きます。
-
[クイック アクセス ] ページで、[ 外部データ > ] ボタンをクリックして外部 ロケーション タブに移動します。
-
新しい外部ロケーションが作成されたことを確認します。
自動的に生成される外部ロケーションは、
db_s3_external_databricks-S3-ingest-<id>
という命名構文を使用します。 -
(オプション)外部ロケーションを特定のワークスペースにバインドします。
デフォルトにより、特権ユーザーは、メタストアにアタッチされた任意のワークスペース上の外部ロケーションを使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、 ワークスペース タブに移動してワークスペースを割り当てます。 (オプション)特定のワークスペースに外部ロケーションを割り当てるを参照してください。
-
外部ロケーションの使用を許可します。
外部ロケーションを誰でも使用できるようにするには、次の権限を付与する必要があります。
- 外部ロケーションを使用して、メタストア、カタログ、またはスキーマにマネージドストレージロケーションを追加するには、
CREATE MANAGED LOCATION
特権を付与します。 - 外部テーブルまたはボリュームを作成するには、
CREATE EXTERNAL TABLE
またはCREATE EXTERNAL VOLUME
を付与します。
カタログエクスプローラーを使用してアクセス権を付与するには
- 外部ロケーション名をクリックして、詳細ペインを開きます。
- アクセス許可 タブで、 許可 をクリックします。
- 「
<external location>
に付与 」ダイアログで、[ プリンシパル ]フィールドでユーザー、グループ、またはサービスプリンシパルを選択し、付与する権限を選択します。 - 付与 をクリックします。
- 外部ロケーションを使用して、メタストア、カタログ、またはスキーマにマネージドストレージロケーションを追加するには、
オプション 2: Catalog Explorer を使用して外部ロケーションを手動で作成する
カタログエクスプローラを使用して、外部ロケーションを手動で作成できます。
権限と前提条件: 「始める前に」を参照してください。
S3 バケットの外部ロケーションを作成する場合、Databricks では、ここで説明する手順ではなく、 AWS CloudFormation テンプレート を使用することをお勧めします。 AWS CloudFormation テンプレートを使用する場合、ストレージ認証情報を作成する必要はありません。 それはあなたのために作られています。
外部ロケーションを作成するには:
-
メタストアにアタッチされているワークスペースにログインします。
-
サイドバーで、「
カタログ 」をクリックします。
-
クイック アクセス ページで、 外部データ > ボタンをクリックし、 外部ロケーション タブに移動して、 ロケーションの作成 をクリックします。
-
[ 新しい外部ロケーションの作成 ]ダイアログで、[ 手動 ]をクリックし、[ 次へ ]をクリックします。
AWS クイックスタートオプションの詳細については、「 オプション 1: AWS CloudFormation テンプレートを使用して S3 バケットの外部ロケーションを作成する」を参照してください。
-
「 新規外部ロケーションを手動で作成 」ダイアログで、 外部ロケーション名 を入力します。
-
ストレージタイプ ( S3 、 R2 、 またはDBFSルート )を選択します。
DBFSルートにデータを格納することは、推奨されない従来の方法です。詳細については、「DBFSルート (レガシ) でデータの外部ロケーションを作成する」を参照してください。
-
[URL ] で、外部ロケーションへのパスを入力または選択します。
S3 には、次のオプションがあります。
-
既存の DBFS マウント・ポイントからコンテナ・パスをコピーするには、「 DBFS からコピー 」をクリックします。
-
既存のマウントポイントからコピーしない場合は、[ URL ] フィールドを使用して、外部ロケーションとして使用する S3 バケットパスを入力します。
たとえば、
S3://mybucket/<path>
。
R2 の場合:
- パスを入力します。次に例を示します
r2://my-bucket@my-account-id.r2.cloudflarestorage.com/<path>
DBFSルートの場合:
- システムは、 DBFSルート ストレージの場所へのサブパスを設定します。 ワークスペース管理者の場合は、システムによってストレージ資格情報も作成されます。
「DBFSルート (レガシ) でデータ用の外部ロケーションを作成する」を参照してください。
-
-
外部ロケーションへのアクセスを許可するストレージ認証情報を選択します。
外部ロケーションが DBFSルート用で、ワークスペース管理者である場合は、システムによってストレージ資格情報が作成されるため、1 つを選択する必要はありません。
ストレージ認証情報をお持ちでない場合は、次の方法で作成できます。
-
[ ストレージ資格情報 ] ドロップダウン リストで、 [+ 新しいストレージ資格情報の作成 ] を選択します。
-
IAMロールには、ストレージの場所へのアクセスを許可するIAMロールARNを指定します。Cloudflare API トークンの場合は、Cloudflare アカウント、アクセスキーID、シークレットアクセスキーを入力します。
バケットの場所をカバーする インスタンスプロファイル がすでにある場合は、[S3 インスタンスプロファイルのコピー]をクリックして、そのインスタンスプロファイルの IAMロールARN をコピーできます。Databricksユーザーに代わってバケットにアクセスするには、インスタンスプロファイルのIAMロールに、Databricksロールを引き受けることができるクロスアカウント信頼関係が必要です。IAMロール ポリシーと信頼関係の要件の詳細については、「ステップ 1: IAMロールを作成する」を参照してください。
詳細については、「 AWS S3 に接続するためのストレージ認証情報を作成する 」または「 Cloudflare R2 に接続するためのストレージ認証情報を作成する」を参照してください。
-
(オプション)ユーザーに外部ロケーションへの読み取り専用アクセスを許可する場合は、[ 詳細オプション ] をクリックし、[ 読み取り専用の使用に制限 ] を選択します。 詳細については、「 外部ロケーションを読み取り専用としてマークする」を参照してください。
-
(オプション)外部ロケーションが従来のワークロードの移行を対象としている場合は、 [詳細オプション ] をクリックし、 フォールバック モード を有効にします。
「 外部ロケーションでフォールバックモードを有効にする」を参照してください。
-
(オプション)S3 バケットで SSE 暗号化が必要な場合は、Unity Catalog の外部テーブルとボリュームが S3 バケット内のデータにアクセスできるように、暗号化アルゴリズムを構成できます。
手順については、「 外部ロケーションでの暗号化アルゴリズムの構成 (AWS S3 のみ)」を参照してください。
-
(オプション)外部ロケーションで変更通知をサブスクライブするには、「 拡張オプション 」をクリックし、「 ファイル・イベントの有効化 」を選択します。
ファイル イベントにより、セットアップが簡素化され、ファイル到着トリガーや Auto Loader ファイル通知などの機能のパフォーマンスと容量が向上します。 この手順はオプションですが、強くお勧めします。
プレビュー
ファイル イベントは パブリック プレビュー段階です。
詳細については、「 (推奨) 外部ロケーションのファイル イベントを有効にする」を参照してください。 13. 作成 をクリックします。
-
(オプション)外部ロケーションを特定のワークスペースにバインドします。
デフォルトにより、特権ユーザーは、メタストアにアタッチされた任意のワークスペース上の外部ロケーションを使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、 ワークスペース タブに移動してワークスペースを割り当てます。 (オプション)特定のワークスペースに外部ロケーションを割り当てるを参照してください。
-
[ 権限 ]タブに移動して、外部ロケーションの使用権限を付与します。
外部ロケーションを使用するには、次の権限を付与する必要があります。
-
外部ロケーションを使用して、メタストア、カタログ、またはスキーマにマネージドストレージロケーションを追加するには、
CREATE MANAGED LOCATION
特権を付与します。 -
外部テーブルまたはボリュームを作成するには、
CREATE EXTERNAL TABLE
またはCREATE EXTERNAL VOLUME
を付与します。
- 付与 をクリックします。
- 「
<external location>
に付与 」ダイアログで、[ プリンシパル ]フィールドでユーザー、グループ、またはサービスプリンシパルを選択し、付与する権限を選択します。 - 付与 をクリックします。
-
オプション 3: SQL を使用して外部ロケーションを作成する
SQLを使用して外部ロケーションを作成するには、ノートブックまたはSQLクエリ エディターで次のコマンドを実行します。プレースホルダーの値を置き換えます。 必要な権限と前提条件については、 開始する前にを参照してください。
-
<location-name>
: 外部ロケーションの名前。location_name
にハイフン(-
)などの特殊文字が含まれている場合は、バッククォート( -
<bucket-path>
: この外部ロケーションがアクセスを許可するクラウド テナント内のパス。 たとえば、S3://mybucket
やr2://mybucket@my-account-id.r2.cloudflarestorage.com
などです。 -
<storage-credential-name>
: バケットからの読み取りとバケットへの書き込みを許可するストレージ認証情報の名前。 ストレージ資格情報の名前にハイフン (-
) などの特殊文字が含まれている場合は、バッククォート (
CREATE EXTERNAL LOCATION [IF NOT EXISTS] `<location-name>`
URL '<bucket-path>'
WITH ([STORAGE] CREDENTIAL `<storage-credential-name>`)
[COMMENT '<comment-string>'];
アカウント内の特定のワークスペースへの外部ロケーションへのアクセスを制限する場合 (ワークスペースバインディングまたは外部ロケーション分離とも呼ばれます) は、「 (オプション) 特定のワークスペースに外部ロケーションを割り当てる」を参照してください。
(オプション)特定のワークスペースに外部ロケーションを割り当てる
By デフォルト, 外部ロケーションは、メタストア内のすべてのワークスペースからアクセスできます。 つまり、ユーザーにその外部ロケーションに対する特権 ( READ FILES
など) が付与されている場合、メタストアにアタッチされた任意のワークスペースからその特権を行使できます。 ワークスペースを使用してユーザーデータへのアクセスを分離する場合は、特定のワークスペースからのみ外部ロケーションへのアクセスを許可することができます。 この機能は、ワークスペース バインディングまたは外部ロケーション分離と呼ばれます。
外部ロケーションを特定のワークスペースにバインドする一般的な使用例には、次のようなものがあります。
- 本番運用データを含む外部ロケーションに対する
CREATE EXTERNAL TABLE
権限を持つデータエンジニアが、本番運用ワークスペースでのみそのロケーションに外部テーブルを作成できるようにします。 - 機密データを含む外部ロケーションに対する
READ FILES
権限を持つデータエンジニアが、特定のワークスペースのみを使用してそのデータにアクセスできるようにします。
ワークスペースによって他の種類のデータアクセスを制限する方法の詳細については、「 カタログアクセスを特定のワークスペースに制限する」を参照してください。
ワークスペース バインディングは、外部ロケーションに対する特権が行使された時点で参照されます。 たとえば、ユーザーがmyWorkspace
ワークスペースから文 CREATE TABLE myCat.mySch.myTable LOCATION 's3://bucket/path/to/table'
を発行して外部テーブルを作成する場合、通常のユーザー権限チェックに加えて、次のワークスペースバインディングチェックが実行されます。
- 外部ロケーションカバー
's3://bucket/path/to/table'``myWorkspace
にバインドされていますか? - カタログ
myCat
アクセス・レベルがRead & Write
のmyWorkspace
にバインドされていますか?
その後、外部ロケーションが myWorkspace
からバインド解除された場合、外部テーブルは引き続き機能します。
また、この機能を使用すると、中央のワークスペースからカタログを取り込み、カタログ バインドを使用して他のワークスペースでカタログを使用できるようにすることもできます。また、外部ロケーションを他のワークスペースで使用できるようにする必要はありません。
外部ロケーションを 1 つ以上のワークスペースにバインドする
外部ロケーションを特定のワークスペースに割り当てるには、カタログエクスプローラ または Databricks CLIを使用します。
必要なアクセス許可 : Metastore 管理者、外部ロケーションの所有者、または外部ロケーションの MANAGE
。
メタストアの管理者は、カタログエクスプローラ を使用してメタストア内のすべての外部ロケーションを表示でき、外部ロケーションの所有者は、外部ロケーションが現在のワークスペースに割り当てられているかどうかに関係なく、メタストア内で所有するすべての外部ロケーションを表示できます。 ワークスペースに割り当てられていない外部ロケーションはグレー表示されます。
- Catalog Explorer
- CLI
-
メタストアにリンクされているワークスペースにログインします。
-
サイドバーで、「
カタログ 」をクリックします。
-
[クイック アクセス ] ページで、[ 外部データ > ] ボタンをクリックして外部 ロケーション タブに移動します。
-
外部ロケーションを選択し、 ワークスペース タブに移動します。
-
[ ワークスペース ] タブで、[ すべてのワークスペースがアクセス可能] チェックボックスをオフにします。
外部ロケーションがすでに 1 つ以上のワークスペースにバインドされている場合、このチェックボックスはすでにオフになっています。
-
[ ワークスペースに割り当てる ] をクリックし、割り当てるワークスペースを入力または検索します。
アクセス権を取り消すには、[ ワークスペース ] タブに移動し、ワークスペースを選択して、[ 取り消し ] をクリックします。すべてのワークスペースからのアクセスを許可するには、[ すべてのワークスペースがアクセス可能 ] チェックボックスをオンにします。
ワークスペースに外部ロケーションを割り当てるには、2 つの Databricks CLI コマンド グループと 2 つの手順が必要です。
次の例では、 <profile-name>
を Databricks 認証構成プロファイルの名前に置き換えます。これには、個人用アクセス トークンを生成したワークスペースのワークスペース インスタンス名とワークスペース ID に加えて、個人用アクセス トークンの値を含める必要があります。「Databricks 個人用アクセス トークン認証」を参照してください。
-
external-locations
コマンド グループのupdate
コマンドを使用して、外部ロケーションのisolation mode
をISOLATED
に設定します。Bashdatabricks external-locations update <my-location> \
--isolation-mode ISOLATED \
--profile <profile-name>デフォルトの
isolation-mode
は、メタストアにアタッチされているすべてのワークスペースに対してOPEN
です。 -
workspace-bindings
コマンド グループのupdate-bindings
コマンドを使用して、ワークスペースを外部ロケーションに割り当てます。Bashdatabricks workspace-bindings update-bindings external-location <my-location> \
--json '{
"add": [{"workspace_id": <workspace-id>}...],
"remove": [{"workspace_id": <workspace-id>}...]
}' --profile <profile-name>ワークスペースのバインドを追加または削除するには、
"add"
プロパティと"remove"
プロパティを使用します。
読み取り専用バインディング (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ボリュームとはを参照してください。