クラウド ストレージを Databricks に接続するための外部ロケーションを作成する
この記事では、クラウド ストレージを Databricks に接続するためにUnity Catalogで外部ロケーションを構成する方法について説明します。
外部ロケーション Unity Catalog ストレージの資格情報をクラウド オブジェクト ストレージ コンテナーに関連付けます。 外部ロケーションは、カタログおよびスキーマの管理対象ストレージ・ロケーションの定義、および外部表および外部ボリュームのロケーションの定義に使用されます。
AWS S3 または Cloudflare R2 バケット内のストレージを参照する外部ロケーションを作成できます。
外部ロケーションは、カタログ エクスプローラー、Databricks CLI、ノートブックの SQL コマンド、Databricks SQL クエリー、または Terraform を使用して作成できます。
注:
ボリュームを定義すると、ボリューム パスの下のデータへのクラウド URI アクセスは、ボリュームの権限によって管理されます。
始める前に
前提条件:
Databricks で外部ロケーション オブジェクトを作成する前に、外部ロケーションとして使用する AWS S3 または Cloudflare R2 バケットを作成する必要があります。
AWS CloudFormation テンプレートは S3 バケットのみをサポートします。
ユーザーが読み取りおよび書き込みできる S3 バケットの名前には、ドット表記を使用できません (例:
incorrect.bucket.name.notation
)。 バケットの命名ガイドの詳細については、 「AWS バケットの命名規則」を参照してください。
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) をクリックしてカタログエクスプローラーを開きます。
[ + 追加 ] ボタンをクリックし、[ 外部ロケーションの追加] を選択します。
[ Create a new external location ] ダイアログで、[ AWS Quickstart (Recommended)] を選択し、[ Next] をクリックします。
AWS Quickstart は、外部ロケーションを設定し、ストレージ認証情報を作成します。 [ 手動 ] オプションを使用する場合は、S3 バケットへのアクセスを許可する IAMロールを手動で作成し、Databricks でストレージ資格情報を自分で作成する必要があります。
[ Create external location with Quickstart ] ダイアログで、[ Bucket Name ] フィールドに S3 バケットへのパスを入力します。
[ 新しいトークンの生成 ] をクリックして、Databricks と AWS アカウント間の認証に使用する個人用アクセストークンを生成します。
トークンをコピーし、 [ クイック スタート] で [起動] をクリックします。
起動する AWS CloudFormation テンプレート ( [クイック作成スタック] というラベル) で、トークンを [Databricks Account Credentials] (Databricks アカウント資格情報 ) フィールドに貼り付けます。
ページ下部の利用規約に同意します (AWS CloudFormation がカスタム名で IAM リソースを作成する可能性があることを認めます)。
「 スタックの作成」をクリックします。
CloudFormation テンプレートが Databricks での外部ロケーション オブジェクトの作成を完了するまでに数分かかる場合があります。
Databricks ワークスペースに戻り、「カタログ」をクリックしてカタログ・エクスプローラーを開きます。
カタログエクスプローラーの左側の表示枠で、下にスクロールして「外部 データ」(External Data) > 外部ロケーション」(External location) の順にクリックします。
新しい外部ロケーションが作成されたことを確認します。
自動生成された外部ロケーションでは、命名構文
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 バケットの外部ロケーションを作成する」を参照してください。
[ Create a new external location manually ] ダイアログで、 外部ロケーション名を入力します。
必要に応じて、既存のマウント ポイントからバケット パスをコピーします (S3 バケットのみ)。
既存のマウント ポイントからコピーしていない場合は、 URLフィールドを使用して、外部ロケーションとして使用する S3 または R2 バケットのパスを入力します。
たとえば、
S3://mybucket/<path>
やr2://mybucket@my-account-id.r2.cloudflarestorage.com/<path>
などです。外部ロケーションへのアクセスを許可するストレージ資格情報を選択します。
(オプション)ユーザーに外部ロケーションへの読み取り専用アクセス権を付与する場合は、[ 詳細オプション ] をクリックして [ 読み取り専用] を選択します。 詳しくは、「 外部ロケーションを読み取り専用にする」をご覧ください。
「 作成」をクリックします。
外部ロケーションの使用権限を付与します。
すべてのユーザーが外部ロケーションを使用するには、アクセス許可を付与する必要があります。
外部ロケーションを使用して、メタストア、カタログ、またはスキーマに管理されたストレージの場所を追加するには、
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>'];
次のステップ
外部ロケーションを使用する権限を他のユーザーに付与します。 「 外部ロケーションの管理」を参照してください。
外部ロケーションを使用して、管理ストレージの場所を定義します。 「 Unity Catalog で管理対象ストレージの場所を指定する」を参照してください。
外部ロケーションを使用して外部テーブルを定義します。 「外部テーブルの作成」を参照してください。
外部ロケーションを使用して外部ボリュームを定義します。 「ボリュームの作成と操作」を参照してください。