クラウドストレージをDatabricksに接続するための外部ロケーションを作成する
この記事では、 Unity Catalog で外部ロケーションを設定してクラウド ストレージを Databricksに接続する方法について説明します。
外部ロケーション Unity Catalog ストレージの資格情報をクラウドオブジェクトストレージ コンテナーに関連付けます。 外部ロケーションは、カタログおよびスキーマの管理対象ストレージ・ロケーションの定義、外部テーブル・外部ボリュームのロケーションの定義に使用されます。
AWS S3 または Cloudflare R2 バケット内のストレージを参照する外部ロケーションを作成できます。
外部ロケーションを作成するには、Catalog Explorer、ノートブックまたはDatabricksCLI SQLクエリの コマンド、 コマンド、またはDatabricks SQL Terraformを使用します。
外部ロケーションの使用と、ストレージの認証情報と外部ロケーションの関係の詳細については、「Unity Catalogを使用してクラウド ストレージへのアクセスを管理する」を参照してください。
始める前に
前提条件:
Databricks で外部ロケーションオブジェクトを作成する前に、外部ロケーションとして使用する AWS S3 または Cloudflare R2 バケットを作成する必要があります。
AWS CloudFormation テンプレートは S3 バケットのみをサポートします。
ユーザーが読み取りおよび書き込みできる 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
を持っています。
AWS CloudFormation テンプレートを使用している場合は、メタストアに対する
CREATE STORAGE CREDENTIAL
権限も必要です。 メタストア管理者は、デフォルトでメタストアにCREATE STORAGE CREDENTIAL
を持っています。
AWS CloudFormation テンプレートを使用して S3 バケットの外部ロケーションを作成する
AWS CloudFormation テンプレートを使用して外部ロケーションを作成する場合、Databricks は外部ロケーションを構成し、ストレージ認証情報を作成します。 外部ロケーションを手動で作成するオプションもあります。その場合は、まず、外部ロケーションによって参照される S3 バケットへのアクセスを許可する IAM ロールと、その IAM ロールを参照するストレージ認証情報を作成する必要があります。 詳細については、 「AWS S3 に接続するためのストレージ認証情報を作成する」を参照してください。
注:
AWS CloudFormation テンプレートを使用して Cloudflare R2 バケットの外部ロケーションを作成することはできません。 代わりに、 カタログ エクスプローラーの手動フロー を使用するか、 Databricks ノートブックまたは SQL クエリ エディターの SQL ステートメントを使用します。
アクセス許可と前提条件: 「開始する前に」を参照してください。
外部ロケーションを作成するには:
メタストアにアタッチされているワークスペースにログインします。
「カタログ 」(Catalog) をクリックしてカタログエクスプローラーを開きます。
クイック アクセス ページで、外部データ > ボタンをクリックし、外部ロケーション タブに移動して、ロケーションの作成 をクリックします。
[ 新しい外部ロケーションを作成 ] ダイアログで、[ AWSクイックスタート(推奨)]を選択し、[ 次のページ] をクリックします。
AWS クイックスタートでは、外部ロケーションが構成され、ストレージ資格情報が作成されます。[手動] オプションを使用する場合は、IAM S3バケットへのアクセス権を付与する ロールを手動で作成し、ストレージ認証情報を自分で作成Databricks 必要があります。
[クイックスタートで外部ロケーションを作成]ダイアログで、[バケット名]フィールドにS3バケットへのパスを入力します。
「 Generate new token 」をクリックして、 Databricks と AWS アカウント間の認証に使用する個人用アクセストークンを生成します。
トークンをコピーし、 [クイックスタートで起動]をクリックします。
起動する AWS CloudFormation テンプレート ( [クイック作成スタック] というラベル) で、トークンを [Databricksアカウント資格情報]フィールドに貼り付けます。
ページ下部の利用規約に同意します (AWS CloudFormation がカスタム名で IAM リソースを作成する可能性があることを認めます)。
[スタックを作成] をクリックします。
CloudFormation テンプレートが Databricksで外部ロケーションオブジェクトの作成を完了するまでに数分かかる場合があります。
Databricks ワークスペースに戻り、[カタログ]をクリックしてカタログエクスプローラーを開きます。
[クイック アクセス] ページで、[外部データ >] ボタンをクリックして外部ロケーション タブに移動します。
新しい外部ロケーションが作成されたことを確認します。
自動的に生成される外部ロケーションは、
db_s3_external_databricks-S3-ingest-<id>
という命名構文を使用します。(オプション)外部ロケーションを特定のワークスペースにバインドします。
デフォルトにより、特権ユーザーは、メタストアにアタッチされた任意のワークスペース上の外部ロケーションを使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、 ワークスペース タブに移動してワークスペースを割り当てます。 (オプション)特定のワークスペースに外部ロケーションを割り当てるを参照してください。
外部ロケーションの使用を許可します。
外部ロケーションを誰でも使用できるようにするには、次の権限を付与する必要があります。
外部ロケーションを使用して、管理されたストレージの場所をメタストア、カタログ、またはスキーマに追加するには、
CREATE MANAGED LOCATION
特権を付与します。外部テーブルまたはボリュームを作成するには、
CREATE EXTERNAL TABLE
またはCREATE EXTERNAL VOLUME
を付与します。
カタログエクスプローラーを使用してアクセス権を付与するには
外部ロケーション名をクリックして、詳細ペインを開きます。
[アクセス許可] タブで、[許可] をクリックします。
「
<external location>
に付与」ダイアログで、[プリンシパル]フィールドでユーザー、グループ、またはサービスプリンシパルを選択し、付与する権限を選択します。[付与] をクリックします。
Catalog Explorer を使用した外部ロケーションの手動作成
カタログエクスプローラを使用して、外部ロケーションを手動で作成できます。
アクセス許可と前提条件: 「開始する前に」を参照してください。
S3 バケットの外部ロケーションを作成する場合、Databricks では、ここで説明する手順ではなく、 AWS CloudFormation テンプレート を使用することをお勧めします。 AWS CloudFormation テンプレートを使用する場合、ストレージ認証情報を作成する必要はありません。 それはあなたのために作られています。
外部ロケーションを作成するには:
メタストアにアタッチされているワークスペースにログインします。
サイドバーで、「 カタログ 」をクリックします。
クイック アクセス ページで、外部データ > ボタンをクリックし、外部ロケーション タブに移動して、ロケーションの作成 をクリックします。
[新しい外部ロケーションの作成]ダイアログで、[手動]をクリックし、[次へ]をクリックします。
AWS クイックスタートオプションの詳細については、「 AWS CloudFormation テンプレートを使用して S3 バケットの外部ロケーションを作成する」を参照してください。
「 新規外部ロケーションを手動で作成 」ダイアログで、 外部ロケーション名を入力します。
必要に応じて、既存のマウントポイントからバケットパスをコピーします(S3バケットのみ)。
既存のマウントポイントからコピーしない場合は、[ URL ] フィールドを使用して、外部ロケーションとして使用する S3 または R2 バケットパスを入力します。
たとえば、
S3://mybucket/<path>
やr2://mybucket@my-account-id.r2.cloudflarestorage.com/<path>
などです。外部ロケーションへのアクセスを許可するストレージ認証情報を選択します。
(オプション)ユーザーに外部ロケーションへの読み取り専用アクセス権を付与する場合は、[詳細オプション] をクリックして[読み取り専用]を選択します。 詳しくは、「外部ロケーションを読み取り専用にする」をご覧ください。
(オプション)S3 バケットで SSEencryption が必要な場合は、Unity Catalog の外部テーブルとボリュームが S3 バケット内のデータにアクセスできるように暗号化アルゴリズムを構成できます。 手順については、「 外部ロケーションでの暗号化アルゴリズムの構成」を参照してください。
[作成] をクリックします。
(オプション)外部ロケーションを特定のワークスペースにバインドします。
デフォルトにより、特権ユーザーは、メタストアにアタッチされた任意のワークスペース上の外部ロケーションを使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、 ワークスペース タブに移動してワークスペースを割り当てます。 (オプション)特定のワークスペースに外部ロケーションを割り当てるを参照してください。
外部ロケーションの使用を許可します。
外部ロケーションを使用するには、次の権限を付与する必要があります。
外部ロケーションを使用して、管理されたストレージの場所をメタストア、カタログ、またはスキーマに追加するには、
CREATE MANAGED LOCATION
特権を付与します。外部テーブルまたはボリュームを作成するには、
CREATE EXTERNAL TABLE
またはCREATE EXTERNAL VOLUME
を付与します。
カタログエクスプローラーを使用してアクセス権を付与するには
外部ロケーション名をクリックして、詳細ペインを開きます。
[アクセス許可] タブで、[許可] をクリックします。
「
<external location>
に付与」ダイアログで、[プリンシパル]フィールドでユーザー、グループ、またはサービスプリンシパルを選択し、付与する権限を選択します。[付与] をクリックします。
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 つ以上のワークスペースにバインドする
外部ロケーションを特定のワークスペースに割り当てるには、Catalog Explorer または Databricks CLIを使用します。
必要な権限: Metastore 管理者または外部ロケーションの所有者。
注:
メタストアの管理者は、Catalog Explorer を使用してメタストア内のすべての外部ロケーションを表示でき、外部ロケーションの所有者は、外部ロケーションが現在のワークスペースに割り当てられているかどうかに関係なく、メタストア内で所有するすべての外部ロケーションを表示できます。 ワークスペースに割り当てられていない外部ロケーションはグレー表示されます。
メタストアにリンクされているワークスペースにログインします。
サイドバーで、「 カタログ 」をクリックします。
[クイック アクセス] ページで、[外部データ >] ボタンをクリックして外部ロケーション タブに移動します。
外部ロケーションを選択し、 ワークスペース タブに移動します。
[ワークスペース] タブで、[すべてのワークスペースがアクセス可能] チェックボックスをオフにします。
外部ロケーションがすでに 1 つ以上のワークスペースにバインドされている場合、このチェックボックスはすでにオフになっています。
[ワークスペースに割り当てる] をクリックし、割り当てるワークスペースを入力または検索します。
アクセス権を取り消すには、[ワークスペース] タブに移動し、ワークスペースを選択して、[取り消し] をクリックします。すべてのワークスペースからのアクセスを許可するには、[すべてのワークスペースがアクセス可能] チェックボックスをオンにします。
ワークスペースに外部ロケーションを割り当てるには、2 つの Databricks CLI コマンド グループと 2 つのステップ が必要です。
次の例では、 <profile-name>
をDatabricks認証構成プロファイルの名前に置き換えます。これには、パーソナルアクセストークンを生成したワークスペースのワークスペースインスタンス名とワークスペースIDに加えて、パーソナルアクセストークンの値を含める必要があります。「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"
プロパティを使用します。注:
読み取り専用バインディング (
BINDING_TYPE_READ_ONLY
) は、外部ロケーションでは使用できません。 したがって、外部ロケーションのバインディングにbinding_type
を設定する理由はありません。
外部ロケーションのすべてのワークスペース割り当てを一覧表示するには、 workspace-bindings
コマンド グループの get-bindings
コマンドを使用します。
databricks workspace-bindings get-bindings external-location <my-location> \
--profile <profile-name>
REST API リファレンスの 「ワークスペース バインド 」も参照してください。
ワークスペースからの外部ロケーションのバインド解除
Catalog Explorer または workspace-bindings
CLI コマンド グループを使用して、ワークスペースから外部ロケーションへのアクセスを取り消す手順については、「 外部ロケーションを 1 つ以上のワークスペースにバインドする」を参照してください。
次のステップ
他のユーザーに外部ロケーションの使用権限を付与します。 「 外部ロケーションの管理」を参照してください。
外部ロケーションを使用して、管理ストレージの場所を定義します。 「 Unity Catalog で管理対象ストレージの場所を指定する」を参照してください。
外部ロケーションを使用して外部テーブルを定義します。 外部テーブルの操作を参照してください。
外部ロケーションを使用して外部ボリュームを定義します。 「Unity Catalogボリュームとは」を参照してください。