Google Cloud Storage(GCS)の外部ロケーションに接続する
このページでは、Google Cloud Storage (GCS) の外部ロケーションに接続する方法について説明します。この接続を完了すると、Unity Catalog を使用してこれらの GCS オブジェクトへのアクセスを管理できるようになります。
GCS バケット パスに正常に接続するには、Unity Catalog のセキュリティ保護可能なオブジェクトが 2 つ必要です。1 つ目は、 GCSバケットへのアクセスを許可するIAMロールを指定するストレージ認証情報です。 このストレージ認証情報は、2 番目に必要なオブジェクトである外部ロケーションに必要です。外部ロケーションは、GCS ストレージロケーションへのパスと、そのロケーションにアクセスするために必要な認証情報を定義します。
要件
Databricks:
- Unity Catalogが有効化されたDatabricksワークスペース
CREATE STORAGE CREDENTIAL
権限(ワークスペースにアタッチされたUnity Catalogのメタストア上の)。アカウント管理者とメタストア管理者には、デフォルトでこれらの権限があります。CREATE EXTERNAL LOCATION
Unity Catalogメタストアと、外部ロケーションによって参照されるストレージ資格情報の両方に対する権限。 メタストア管理者とワークスペース管理者は、デフォルトでこの権限を持ちます。
Google Cloudアカウントの場合
-
GCS バケット。送信料金を回避するには、データにアクセスするワークスペースと同じリージョンに配置する必要があります。
- 外部ロケーション パスには、標準 ASCII 文字 (文字
A–Z
、a–z
、数字0–9
、および/
、_
、-
などの一般的な記号) のみを含める必要があります。 - Google Cloud Storage階層型名前空間 (HNS) は、外部ロケーションではサポートされていません。 外部ロケーションを作成する前に、階層型名前空間を無効にします。
- 外部ロケーション パスには、標準 ASCII 文字 (文字
-
そのバケットのアクセスポリシーを変更する権限
GCS にアクセスするストレージ認証情報を作成する
GCSバケットにアクセスするためのストレージ資格情報を作成するには、そのバケット上のIAMロールをDatabricksが生成したGoogle Cloudサービスアカウントに割り当てることで、Unity Catalogにそのバケットへの読み書き権限を与えます。
Catalog Explorer を使用して Google クラウド サービス アカウントを生成する
-
Unity Catalogが有効なDatabricksワークスペースに、メタストアに対する
CREATE STORAGE CREDENTIAL
権限を持つユーザーとしてログインします。 -
サイドバーでクリック
カタログ 。
-
[クイック アクセス ] ページで、 [外部データ >] ボタンをクリックし、 [資格情報] タブに移動して、 [資格情報の作成] を選択します。
-
GCP サービス アカウント の 認証情報タイプ を選択します。
-
ストレージ資格情報名 とオプションのコメントを入力してください。
-
(オプション) ユーザーにこのストレージ資格情報を使用する外部ロケーションへの読み取り専用アクセスを許可する場合は、 [詳細オプション] をクリックし、 [読み取り専用使用に制限] を選択します。 詳細については、 「ストレージ資格情報を読み取り専用としてマークする」を参照してください。
-
作成 をクリックします。
Databricksはストレージ資格情報を作成し、Google Cloudサービスアカウントを生成します。
-
[資格情報の作成] ダイアログで、電子メール アドレスの形式であるサービス アカウント ID をメモし、 [完了] をクリックします。
-
(オプション)ストレージ資格情報を特定のワークスペースにバインドします。
デフォルトでは、権限を持つすべてのユーザーは、メタストアに接続された任意のワークスペースでストレージ資格情報を使用できます。特定のワークスペースからのみアクセスを許可したい場合は、 「ワークスペース」 タブに移動してワークスペースを割り当てます。 「特定のワークスペースにストレージ資格情報を割り当てる」を参照してください。
サービスアカウントの権限を構成する
これで、Google サービス アカウントに関連付けられたストレージ認証情報が Databricks に作成されました。ストレージ認証情報を使用する前に、特定の GCS バケットにアクセスするための権限を Google サービス アカウントに付与する必要があります。
-
Google クラウド コンソールに移動し、 DatabricksからアクセスするGCSバケットを開きます。
送信料金を回避するには、バケットは、データにアクセスする Databricks ワークスペースと同じリージョンに配置する必要があります。
-
[ 権限 ] タブで [ + アクセス権を付与 ] をクリックし、サービスアカウントに以下のロールを割り当てます。
- ストレージレガシーバケットリーダー
- ストレージオブジェクト管理者
サービスアカウントのEメールアドレスを主識別子として使用します。
-
保存 をクリックします。
これで、ストレージ資格情報を参照する外部ロケーションを作成できるようになりました。
(推奨) ファイルイベントの権限を構成する
このステップはオプションですが、強くお勧めします。 Databricks にファイル イベントを構成するアクセス権を付与しない場合は、場所ごとにファイル イベントを手動で構成する必要があります。そうしないと、Databricks がリリースする可能性のある重要な機能へのアクセスが制限されます。
以下のステップにより、 Databricks完全な通知パイプラインをセットアップして、 GCSバケットから Google Cloud Pub/Sub にイベント通知メッセージを発行できるようになります。 ここでは、GCS バケットを持つ GCP プロジェクトがあり、Pub/Sub API が有効になっていることを前提としています。
-
ファイル イベント用のカスタムIAMロールを作成します。
-
GCSバケットを含むプロジェクトの Google クラウド コンソールで、 IAMと管理] > [役割] に移動します。
-
すでにカスタムIAMロールがある場合は、それを選択して 「ロールの編集」を クリックします。 それ以外の場合は、 「ロール」 ページから 「+ ロールの作成」 をクリックして新しいロールを作成します。
-
「ロールの作成」 または 「ロールの編集」 画面で、カスタムIAMロールに次の権限を追加し、変更を保存します。 詳細な手順については、 GCP ドキュメントを参照してください。
pubsub.subscriptions.consume
pubsub.subscriptions.create
pubsub.subscriptions.delete
pubsub.subscriptions.get
pubsub.subscriptions.list
pubsub.subscriptions.update
pubsub.topics.attachSubscription
pubsub.topics.create
pubsub.topics.delete
pubsub.topics.get
pubsub.topics.list
pubsub.topics.update
storage.buckets.update
-
-
ロールへのアクセスを許可します。
- [IAM と管理] > [IAM] に移動します。
- [ アクセス権を付与 ] をクリックします。
- プリンシパルとしてサービス アカウントを入力します。
- カスタムIAMロールを選択します。
- 保存 をクリックします。
-
クラウド ストレージ サービス エージェントにアクセス許可を付与します。
- Google クラウド ドキュメントの次のステップに従って、サービス エージェントのアカウント E メールを見つけます。
- Google クラウド コンソールで、 IAMと管理] > IAM > [アクセスの許可] に移動します。
- サービス エージェントのアカウント 電子メールを入力し、 Pub/Sub パブリッシャー* ロールを割り当てます。
これで、このストレージ資格情報を参照する外部ロケーションを作成できるようになります。
GCS バケットの外部ロケーションを作成する
このセクションでは、カタログ エクスプローラーまたはSQLを使用して外部ロケーションを作成する方法について説明します。 GCS バケットへのアクセスを許可するストレージ認証情報がすでにあることを前提としています。ストレージ認証情報がない場合は、 「 GCSアクセスするストレージ認証情報を作成する」の手順に従ってください。
オプション 1: カタログ エクスプローラーを使用して外部ロケーションを手動で作成する
カタログ エクスプローラーを使用して、外部ロケーションを手動で作成できます。
外部ロケーションを作成するには:
-
メタストアに接続されているワークスペースにログインします。
-
サイドバーでクリック
カタログ 。
-
[クイック アクセス ] ページで、 [外部データ >] ボタンをクリックし、 [外部ロケーション ] タブに移動して、 [外部ロケーションの作成] を クリックします。
-
外部ロケーション名 を入力します。
-
[ストレージ タイプ] で [GCP] を選択します。
-
[URL] の下に、GCS バケットのパスを入力します。たとえば、
gs://mybucket/<path>
。 -
[ストレージ資格情報] で、外部ロケーションへのアクセスを許可するストレージ資格情報を選択します。
-
(オプション) ユーザーに外部ロケーションへの読み取り専用アクセスを許可する場合は、 「詳細オプション」 をクリックし、 「読み取り専用の使用に制限する」 を選択します。 詳細については、 「外部ロケーションを読み取り専用としてマークする」を参照してください。
-
(オプション) 外部ロケーションがHive metastoreフェデレーション カタログを対象としている場合は、 [詳細オプション] をクリックして、 フォールバック モード を有効にします。
「外部ロケーションでフォールバック モードを有効にする」を参照してください。
-
(オプション) 外部ロケーションで変更通知を購読する機能を有効にするには、 [詳細オプション] をクリックし、 [ファイル イベントを有効にする] を選択します。
詳細については、 「(推奨) 外部ロケーションのファイル イベントを有効にする」を参照してください。
-
作成 をクリックします。
-
(オプション) 外部ロケーションを特定のワークスペースにバインドします。
もちろん、特権ユーザーはメタストアに接続されたワークスペースの外部ロケーションを使用できます。 特定のワークスペースからのみアクセスを許可したい場合は、 「ワークスペース」 タブに移動してワークスペースを割り当てます。 「特定のワークスペースに外部ロケーションを割り当てる」を参照してください。
-
「許可」 タブに移動して、外部ロケーションを使用する許可を与えます。
誰でも外部ロケーションを使用するには、次の権限を付与する必要があります。
- 外部ロケーションを使用して、メタストア、カタログ、またはスキーマにマネージドストレージロケーションを追加するには、
CREATE MANAGED LOCATION
特権を付与します。 - 外部テーブルまたはボリュームを作成するには、
CREATE EXTERNAL TABLE
またはCREATE EXTERNAL VOLUME
を付与します。
- 付与 をクリックします。
- 「
<external location>
に付与 」ダイアログで、[ プリンシパル ]フィールドでユーザー、グループ、またはサービスプリンシパルを選択し、付与する権限を選択します。 - 付与 をクリックします。
- 外部ロケーションを使用して、メタストア、カタログ、またはスキーマにマネージドストレージロケーションを追加するには、
オプション 2: SQLを使用して外部ロケーションを作成する
SQLを使用して外部ロケーションを作成するには、ノートブックまたはSQLクエリ エディターで次のコマンドを実行します。 プレースホルダーの値を置き換えます。必要な権限と前提条件については、 「要件」を参照してください。
<location-name>
: 外部ロケーションの名前。location_name
ハイフン (-
) などの特殊文字が含まれている場合は、バッククォート (<bucket-path>
:この外部ロケーションがアクセスを許可するクラウドテナント内のパス。 たとえば、gs://mybucket
。<storage-credential-name>
: バケットの読み取りと書き込みを許可するストレージ認証情報の名前。ストレージ資格情報名にハイフン (-
) などの特殊文字が含まれている場合は、バッククォート (
CREATE EXTERNAL LOCATION [IF NOT EXISTS] `<location-name>`
URL '<bucket-path>'
WITH ([STORAGE] CREDENTIAL `<storage-credential-name>`)
[COMMENT '<comment-string>'];
アカウント内の特定のワークスペースへの外部ロケーション アクセスを制限する場合 (ワークスペース バインディングまたは外部ロケーション分離とも呼ばれます)、 「特定のワークスペースに外部ロケーションを割り当てる」を参照してください。
接続を確認する
外部ロケーションが正常に作成されたことを確認するには、外部ロケーションからファイルを読み取ってみます。 たとえば、 example.csv
という名前のCSVファイルを含む外部ロケーションgs://external-location-bucket
があるとします。 gs://external-location-bucket/example.csv
ファイルから読み取るには、次のステップに従います。
-
サイドバーで、
[ ワークスペース ]をクリックします。
-
[作成] をクリックし、 [ノートブック] を選択します。
-
次の Python コード スニペットを実行します。
Pythondisplay(dbutils.fs.ls('gs://external-location-bucket/'))
外部ロケーション内のファイルパスのリストが表示されます。 この例では、
gs://external-location-bucket/example.csv
ファイルが出力に表示されます。 -
外部ロケーションにある特定のファイルを読み取るには、次のPythonコード スニペットを実行します。
Pythonspark.read.format("csv") \
.option("header", "true") \
.option("delimiter", ";") \
.load('gs://external-location-bucket/example.csv') \
.display()これにより
gs://external-location-bucket/example.csv
ファイル内のデータが表示されます。
次のステップ
- 他のユーザーに外部ロケーションを使用する許可を与えます。 「外部ロケーションの管理」を参照してください。
- 外部ロケーションを使用して、管理されたストレージの場所を定義します。 「Unity Catalog で管理対象ストレージの場所を指定する」を参照してください。
- 外部ロケーションを使用して外部テーブルを定義します。 「外部テーブルの操作」を参照してください。
- 外部ロケーションを使用して外部ボリュームを定義します。 Unity Catalogボリュームとは何ですか?」を参照してください。