このページでは、Azure Data Lake Storage Gen2 (ADLS Gen2) 外部の場所に接続する方法について説明します。 この接続が完了したら、Unity カタログを使用して、これらの ADLS Gen2 オブジェクトへのアクセスを管理できます。
ADLS Gen2 コンテナー パスに接続するには、セキュリティ保護可能な 2 つの Unity カタログ オブジェクトが必要です。 1 つ目は storage 資格情報 で、ADLS Gen2 コンテナーへのアクセスを許可するAzureマネージド ID を指定します。 このストレージ資格情報は、2 番目に必要なオブジェクト ( ADLS Gen2 ストレージの場所へのパスと、その場所にアクセスするために必要な資格情報を定義する外部の場所) に必要です。
Requirements
Azure Databricks で:
- Unity カタログ向けに有効化されている Azure Databricks ワークスペース。
- ワークスペースにアタッチされている Unity Catalog メタストアの
CREATE STORAGE CREDENTIAL権限。 アカウント管理者とメタストア管理者には、既定でこの特権があります。 -
CREATE EXTERNAL LOCATIONUnity カタログ メタストアと、外部の場所によって参照されるストレージ資格情報の両方に対する特権。 メタストア管理者とワークスペース管理者は、既定でこの特権を持っています。
Azure アカウントで次の手順を実行します。
ADLS Gen2 ストレージ アカウントとコンテナー。 エグレス料金を回避するには、データにアクセスするワークスペースと同じリージョンに存在する必要があります。
外部の場所のパスには、標準の ASCII 文字 (文字
A–Z、a–z、数字の0–9、および/、_、-などの一般的な記号) のみを含める必要があります。外部の場所として使用する Azure Data Lake Storage ストレージ アカウントには、階層型名前空間が必要です。
不変性 (WORM - Write Once、Read Many) ポリシーが外部の場所として有効になっている Azure ストレージ コンテナーを使用することはできません。 Unity カタログにはストレージ コンテナーに対する DELETE アクセス許可が必要であり、不変ポリシーによって防止されます。 不変ポリシーの詳細については、「 コンテナーの不変ポリシーを構成する」を参照してください。
ストレージ アカウントでパブリック ネットワーク アクセスが無効になっている場合は、[ Azure 信頼できるサービスを許可 する] オプションを有効にして、Azure Databricks がストレージ アカウントに接続できるようにする必要があります。 この設定は、Azure CLI を使用して構成できます。
# Check current network rule set az storage account show --name <storage_account_name> --resource-group <resource_group_name> --query "networkRuleSet" # Set bypass for Azure Services az storage account update \ --name <storage_account_name> \ --resource-group <resource_group_name> \ --bypass AzureServices
Azure サブスクリプション内で Azure Databricks 用アクセス コネクタを作成するためのアクセス許可。 これを行うには、Azure リソース グループの
ContributorまたはOwnerである必要があります。ストレージ アカウントのアクセス ポリシーを変更するアクセス許可。 これを行うには、ストレージ アカウントで
User Access AdministratorAzure RBAC ロールを持つ所有者またはユーザーである必要があります。
ADLS Gen2 にアクセスするストレージ資格情報を作成する
ADLS Gen2 コンテナーにアクセスするためのストレージ資格情報を作成するには、まず、マネージド ID を持つAzure Databricks用のアクセス コネクタを作成してから、マネージド ID にストレージ アカウントへのアクセス権を付与します。
手順 1: Azure Databricks用のアクセス コネクタを作成する
Azure Databricksのアクセス コネクタは、マネージド ID をAzure Databricks アカウントに接続できるファースト パーティのAzure リソースです。 Azure Databricks の各アクセス コネクタには、システム割り当てマネージド ID、1 つ以上のユーザー割り当てマネージド ID、またはその両方を含めることができます。
リソース グループの共同作成者または所有者としてAzure portalにログインします。
+ 作成 または リソースの作成 をクリックします。
Access Connector for Azure Databricks を検索してそれを選択します。
Create をクリックしてください。
[基本] タブで、以下のフィールドの値をそのまま使用するか、選択または入力します。
- Subscription: アクセス コネクタが作成されるAzure サブスクリプションです。 既定値は、現在使用しているAzure サブスクリプションです。 テナント内の任意のサブスクリプションにすることができます。
- リソース グループ: これは、アクセス コネクタが作成されるAzureリソース グループです。
- [名前]: コネクタの目的を示す名前を入力します。
- [リージョン]: これは、接続先のストレージ アカウントと同じリージョンである必要があります。
[次 ] をクリックし、タグを入力し、[次 ] をクリックします。
[マネージド ID ] タブで、次のようにマネージド ID を作成します。
- システム割り当てマネージド ID を使用するには、[ 状態] を [オン] に設定します。
- ユーザー割り当てマネージド ID を追加するには、[+ の追加] をクリックし、1 つ以上のユーザー割り当てマネージド ID を選択します。
[Review + create](レビュー + 作成) をクリックします。
構成設定を確認し、[ 作成] をクリックします。
デプロイが完了したら、[リソースに移動] をクリックします。
リソース ID を記録しておきます。
リソース ID の形式は次のとおりです。
/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
ステップ 2: マネージド ID にストレージ アカウントへのアクセスを許可する
この手順でアクセス許可を付与するには、ストレージ アカウントに Owner または User Access Administrator Azure RBAC ロールが必要です。
マネージド ID にストレージ アカウントとコンテナーへのアクセスを許可する場合は、次のオプションがあります。
-
Storage Blob Data Contributorロールを使用して、ストレージ アカウント全体に読み取りと書き込みのアクセス権を付与します。 -
Storage Blob Delegatorロールを使用してストレージ アカウントに対してより制限されたロールを付与し、Storage Blob Data Contributorロールを使用して特定のコンテナーへの読み取りおよび書き込みアクセスを許可します。
次の手順では、ストレージ アカウントに Storage Blob Data Contributor ロールを付与していることを前提としていますが、必要に応じて他のオプションに置き換えることができます。
- Azure Data Lake Storage アカウントにログインします。
- Access Control (IAM) に移動し、+ Add をクリックし、ロールの割り当ての追加 を選択します。
- [ストレージ BLOB データ共同作成者] ロールを選択し、[次へ] をクリックします。
- [アクセスの割り当て先] で [マネージド ID] を選択します。
- + メンバーの選択をクリックし、Access コネクタ (Azure Databricks) または ユーザー割り当てのマネージドID を選択します。
- コネクタ名またはユーザー割り当て ID を検索して選択し、[確認と割り当て] をクリックします。
手順 3: マネージド ID にファイル イベントへのアクセス権を付与する
マネージド ID にファイル イベントへのアクセス権を付与すると、Azure Databricks はクラウド プロバイダーにより生成されたファイル イベント通知にサブスクライブできます。 これにより、ファイル処理の効率が向上します。 詳細については、「 外部の場所のファイル イベントを設定する」を参照してください。
この手順でアクセス許可を付与するには、ストレージ アカウントの所有者またはユーザー アクセス管理者 Azure RBAC ロールが必要です。
- Azure Data Lake Storage アカウントにログインします。
- Access Control (IAM) に移動し、+ Add をクリックし、ロールの割り当ての追加 を選択します。
- [ストレージ キュー データ共同作成者] ロールを選択し、[次へ] をクリックします。
- [アクセスの割り当て先] で [マネージド ID] を選択します。
- + メンバーの選択をクリックし、Access コネクタ (Azure Databricks) または ユーザー割り当てのマネージドID を選択します。
- コネクタ名またはユーザー割り当て ID を検索して選択し、[確認と割り当て] をクリックします。
ステップ 4: ユーザーに代わってファイル イベントを構成するためのAzure Databricks アクセス権を付与する
Note
この手順は省略可能ですが、強くお勧めします。 Azure Databricks に代わってファイル イベントを構成するためのアクセス権を付与しない場合は、場所ごとにファイル イベントを手動で構成する必要があります。また、Databricks が今後リリースする可能性のある重要な機能へのアクセスも制限されます。 ファイル イベントの詳細については、「 外部の場所のファイル イベントを設定する」を参照してください。
この手順により、Azure Databricks でファイル イベントを自動的に設定できます。 この手順でアクセス許可を付与するには、マネージド ID と Azure Data Lake Storage アカウントが存在するリソース グループに対する所有者またはユーザー アクセス管理者の Azure RBAC ロールが必要です。
「手順 3: マネージド ID にファイル イベントへのアクセス権を付与し、ストレージ アカウント共同作成者をマネージド ID に割り当てる」の手順に従います。
このロールは、このページの手順 2 または 3 で付与されたロールを置き換えるのではなく、追加されます。
Azure Data Lake Storage アカウントが存在する Azure リソース グループに移動します。
Access Control (IAM) に移動し、+ Add をクリックし、ロールの割り当ての追加 を選択します。
EventGrid EventSubscription 共同作成者ロールを選択し、[次へ] をクリックします。
[アクセスの割り当て先] で [マネージド ID] を選択します。
+ メンバーの選択をクリックし、Access コネクタ (Azure Databricks) または ユーザー割り当てのマネージドID を選択します。
コネクタ名またはユーザー割り当て ID を検索して選択し、[確認と割り当て] をクリックします。
手順 5: Databricks でストレージ資格情報を作成する
マネージド ID を持つアクセス コネクタを作成し、ストレージ アカウントへのアクセス許可を付与したら、Azure Databricksでストレージ資格情報を作成できます。
メタストアに対する
CREATE STORAGE CREDENTIAL特権を持つユーザーとして、Unity カタログ対応の Azure Databricks ワークスペースにログインします。サイドバーで、[データ] アイコンをクリック
カタログ。
[
をクリックし、[ 資格情報の作成] をクリックします。[資格情報の種類]としてAzure Managed Identityを選びます。
ストレージ資格情報名とオプションのコメントを入力します。
Access Connector ID (手順 1 で説明したリソース ID) を入力します。
リソース ID の形式は次のとおりです。
/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>(省略可能)ユーザー割り当てマネージド ID を使用してアクセス コネクタを作成した場合は、 マネージド ID (マネージド ID のリソース ID) を入力します。
(省略可能)このストレージ資格情報を使用する外部の場所への読み取り専用アクセス権をユーザーに付与する場合は、[ 詳細オプション] をクリックし、[制限] を選択 して読み取り専用で使用します。 詳細については、「ストレージ資格情報を読み取り専用 としてマークする」を参照してください。
Create をクリックしてください。
(省略可能) ストレージの資格情報を特定のワークスペースにバインドする。
既定では、特権ユーザーであれば誰でも、メタストアに接続されている任意のワークスペースでストレージ資格情報を使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、[ワークスペース] タブに移動してワークスペースを割り当てます。 「特定のワークスペースにストレージ資格情報を割り当てる」を参照してください。
ストレージ資格情報 を参照する外部の場所を作成 できるようになりました。
ADLS Gen2 コンテナーの外部の場所を作成する
このセクションでは、カタログ エクスプローラーまたは SQL を使用して外部の場所を作成する方法について説明します。 ADLS Gen2 コンテナーへのアクセスを許可するストレージ資格情報が既にあることを前提としています。 ストレージ資格情報がない場合は、「 ADLS Gen2 にアクセスするストレージ資格情報を作成する」の手順に従います。
オプション 1: カタログ エクスプローラーを使用して外部の場所を手動で作成する
Catalog Explorer を使って、外部の場所を手動で作成できます。
外部の場所を作成するには、次の手順を実行します。
メタストアにアタッチされているワークスペースにログインします。
サイドバーで、[データ] アイコンをクリック
カタログ。
[
をクリックし、[ 外部の場所の作成] をクリックします。外部の場所の名前を入力します。
[Storage type で、Azure を選択します。
[ URL] に、ADLS Gen2 コンテナー パスを入力します。 たとえば、「
abfss://mycontainer@mystorageaccount.dfs.core.windows.net/<path>」のように入力します。[ ストレージ資格情報] で、外部の場所へのアクセスを許可するストレージ資格情報を選択します。
(省略可能)ユーザーに外部の場所への読み取り専用アクセス権を付与する場合は、[ 詳細オプション] をクリックし、[制限] を選択 して読み取り専用で使用します。 詳細については、「外部の場所を読み取り専用としてマークする」を参照してください。
(省略可能) 外部の場所がHiveメタストアフェデレーションカタログを対象としている場合は、詳細オプション をクリックし、フォールバックモードを有効にします。
外部の場所でフォールバック モードを有効にするを参照してください。
(省略可能)外部の場所で変更通知をサブスクライブする機能を有効にするには、[ 詳細オプション] をクリックし、[ ファイル イベントを有効にする] を選択します。
詳細については、「 外部の場所のファイル イベントを設定する」を参照してください。
Create をクリックしてください。
(省略可能) 外部の場所を特定のワークスペースにバインドします。
既定では、特権ユーザーは誰でも、メタストアに接続された任意のワークスペース上の外部の場所を使用できます。 特定のワークスペースからのアクセスのみを許可する場合は、[ワークスペース] タブに移動してワークスペースを割り当てます。 「特定のワークスペースに外部の場所を割り当てる」を参照してください。
[アクセス許可] タブに移動して、外部の場所を使用するアクセス許可を付与します。
他のユーザーが外部の場所を使用可能にするには、アクセス許可を付与する必要があります。
- 外部の場所を使用して、マネージド ストレージの場所をメタストア、カタログ、またはスキーマに追加するには、
CREATE MANAGED LOCATION特権を付与します。 - 外部テーブルまたはボリュームを作成するには、
CREATE EXTERNAL TABLEまたはCREATE EXTERNAL VOLUMEを付与してください。
次の手順に従います。
- [許可] をクリックします。
-
[
<external location>への付与] ダイアログの "プリンシパル" フィールドでユーザー、グループ、またはサービス プリンシパルを選択し、付与する特権を選択します。 - [許可] をクリックします。
- 外部の場所を使用して、マネージド ストレージの場所をメタストア、カタログ、またはスキーマに追加するには、
オプション 2: SQL を使用して外部の場所を作成する
SQL を使用して外部の場所を作成するには、ノートブックまたは SQL クエリ エディターで次のコマンドを実行します。 次のプレースホルダー値を置き換えます。 必要なアクセス許可と前提条件については、「 要件」を参照してください。
-
<location-name>: 外部の場所の名前。location_nameにハイフン (-) などの特殊文字が含まれている場合は、バッククォート (` `) で囲む必要があります。 「名前」を参照してください。 -
<container-path>: この外部の場所によってアクセスを付与するクラウド テナント内のパス。 たとえば、「abfss://mycontainer@mystorageaccount.dfs.core.windows.net/」のように入力します。 -
<storage-credential-name>: コンテナーとの間の読み取りと書き込みを承認するストレージ資格情報の名前。 ストレージ資格情報名にハイフン (-) などの特殊文字が含まれている場合、バッククォート (` `) で囲む必要があります。
CREATE EXTERNAL LOCATION [IF NOT EXISTS] `<location-name>`
URL '<container-path>'
WITH ([STORAGE] CREDENTIAL `<storage-credential-name>`)
[COMMENT '<comment-string>'];
アカウント内の特定のワークスペース (ワークスペース バインドまたは外部の場所の分離とも呼ばれます) への外部の場所アクセスを制限する場合は、「 特定のワークスペースに外部の場所を割り当てる」を参照してください。
接続を確認する
外部の場所が正常に作成されたことを確認するには、外部の場所からファイルを読み取ってみてください。 たとえば、abfss://mycontainer@mystorageaccount.dfs.core.windows.net/という名前の CSV ファイルを含む外部の場所example.csvがあるとします。
abfss://mycontainer@mystorageaccount.dfs.core.windows.net/example.csv ファイルから読み取る手順は次のとおりです。
サイドバーで、[ノートブック]
をクリックします。ワークスペース。
[ 作成] をクリックし、[ノートブック] を選択 します。
次のPythonコード スニペットを実行します。
display(dbutils.fs.ls('abfss://mycontainer@mystorageaccount.dfs.core.windows.net/'))これにより、外部の場所にあるファイル パスの一覧が表示されます。 この例では、
abfss://mycontainer@mystorageaccount.dfs.core.windows.net/example.csvファイルが出力に表示されます。外部の場所にある特定のファイルを読み取るために、次のPythonコード スニペットを実行します。
spark.read.format("csv") \ .option("header", "true") \ .option("delimiter", ";") \ .load('abfss://mycontainer@mystorageaccount.dfs.core.windows.net/example.csv') \ .display()これにより、
abfss://mycontainer@mystorageaccount.dfs.core.windows.net/example.csvファイル内のデータが表示されます。
次のステップ
- 外部の場所を使用するアクセス許可を他のユーザーに付与します。 「外部の場所を管理する」を参照してください。
- 外部の場所を使用して、マネージド ストレージの場所を定義します。 「Unity Catalog の管理されたストレージの場所の指定」を参照してください。
- 外部の場所を使用して外部テーブルを定義します。 「外部テーブルを操作する」を参照してください。
- 外部の場所を使用して外部ボリュームを定義します。 「Unity カタログ ボリュームとは」を参照してください。