メインコンテンツまでスキップ

Google Cloud Storage に接続する

注記

この記事では、GCS へのアクセスを設定するための従来のパターンについて説明します。 Databricks では、Unity Catalog を使用して、ファイルと直接対話するための GCS とボリュームへのアクセスを構成することをお勧めします。 「Unity Catalog を使用してクラウド オブジェクト ストレージとサービスに接続する」を参照してください。

この記事では、Google Cloud Storage (GCS) に保存されているテーブルとデータを読み書きするために、Databricks からの接続を構成する方法について説明します。

クラスターで Google Cloud サービス アカウントを使用して GCS バケットにアクセスする

GCSバケットには、クラスターの Google Cloud サービス アカウントを使用してアクセスできます。GCS バケットからの読み取りと書き込みのアクセス許可をサービス アカウントに付与する必要があります。 Databricks では、このサービス アカウントに、タスクを実行するために必要な最小限の特権を付与することをお勧めします。 その後、そのサービス アカウントを Databricks クラスターに関連付けることができます。

サービスアカウント Eメール アドレス (推奨される方法) またはサービスアカウント用に生成したキーを使用して、バケットに直接接続できます。

important

サービス アカウントは、Databricks ワークスペースの設定に使用した Google Cloud プロジェクトに含まれている必要があります。

サービス アカウント ロールを作成する GCP ユーザーは、次の条件を満たす必要があります。

  • GCPサービス アカウントを作成し、 バケットの読み取りと書き込みのアクセス許可ロールを付与するアクセス許可を持つ アカウントGCS ユーザーであること。

サービス アカウントをクラスターに追加する Databricks ユーザーは、クラスターに対する [管理可能 ] アクセス許可を持っている必要があります。

ステップ 1: Google Cloud Console を使用して Google Cloud サービス アカウントを設定する

  1. 左側のナビゲーション・ペインで「 IAMおよび管理 」をクリックします。

  2. 「サービスアカウント」 をクリックします。

  3. [+ CREATE サービス アカウント ] をクリックします。

  4. サービスアカウントの名前と説明を入力します。

    Google GCS のサービス アカウントを作成する

  5. [ 作成 ]をクリックします。

  6. 続行 」をクリックします。

  7. [ 完了] をクリックします。

  8. Google Cloud Console のサービス アカウントのリスト に移動し、サービス アカウントを選択します。

    関連付けられたEメールアドレスをコピーします。 これは、クラスターを設定するときに必要 Databricks なります。

ステップ 2: GCS バケットを設定する

バケットを作成する

バケットがまだない場合は、バケットを作成します。

  1. 左側のナビゲーション ウィンドウで [ストレージ ] をクリックします。

  2. バケットを作成 」をクリックします。

    Google Create バケット

  3. バケットに名前を付けます。 Google の GCS バケット の命名要件 に準拠した、グローバルに一意で永続的な名前を選択します。

important

DBFSマウントを操作する際は、バケット名にアンダースコアを含めることはできません。

  1. [ 作成 ]をクリックします。

バケットを構成する

バケットを設定します。

  1. バケットの詳細を設定します。

  2. 権限 」タブをクリックします。

  3. [アクセス許可 ] ラベルの横にある [ ADD ] をクリックします。

    Googleバケットの詳細

  4. Cloud Storage ロールからバケットのサービス アカウントに必要な権限を付与します。

    • ストレージ管理者 : このバケットに対する完全な権限を付与します。
      • Storage Object Viewer : このバケット内のオブジェクトに対する読み取りおよび一覧表示の権限を付与します。

    Google バケットの権限

  5. [ 保存 ]をクリックします。

ステップ 3: Databricks クラスターを構成する

クラスターを設定する際に、[ 詳細設定 ] を展開し、[ Google サービス アカウント ] フィールドをサービス アカウントの Eメール アドレスに設定します。

クラスターアクセス制御とノートブックアクセス制御の両方を一緒に使用して、サービスアカウントと GCS バケット内のデータへのアクセスを保護します。 コンピュートの権限Databricksノートブックを使用した共同作業を参照してください。

Google Cloud サービス アカウント キーを使用して GCS バケットに直接アクセスする

バケットを直接読み書きするには、サービス アカウント Eメール アドレスを設定するか、 Spark 設定で定義されたキーを設定します。

注記

Databricks サービスアカウント Eメール アドレスは、キーが介しないため、キーが漏れるリスクがないため、利用を推奨しています。 キーを使用する理由の 1 つは、ワークスペースの作成時に使用したプロジェクトとは異なる Google Cloud プロジェクトにサービス アカウントを配置する必要がある場合です。 サービス アカウント Eメール アドレスを使用するには、 クラスターの Google Cloud サービス アカウントを使用して GCS バケットにアクセスするをご覧ください。

ステップ 1: Google Cloud Console を使用して Google Cloud サービス アカウントを設定する

Databricks クラスターのサービス アカウントを作成する必要があります。Databricks では、このサービス アカウントに、タスクを実行するために必要な最小限の特権を付与することをお勧めします。

  1. 左側のナビゲーション・ペインで「 IAMおよび管理 」をクリックします。

  2. 「サービスアカウント」 をクリックします。

  3. [+ CREATE サービス アカウント ] をクリックします。

  4. サービスアカウントの名前と説明を入力します。

    Google GCS のサービス アカウントを作成する

  5. [ 作成 ]をクリックします。

  6. 続行 」をクリックします。

  7. [ 完了] をクリックします。

ステップ 2: GCS バケットに直接アクセスするためのキーを作成する

警告

サービス アカウント用に生成する JSON キーは、Google Cloud アカウントのデータセットとリソースへのアクセスを制御するため、許可されたユーザーとのみ共有する必要がある秘密鍵です。

  1. Google Cloud コンソールのサービス アカウント リストで、新しく作成したアカウントをクリックします。
  2. [ キー] セクションで、[ キーの追加] > [新しいキーの作成 ] をクリックします。
  3. JSON キータイプを受け入れます。
  4. [作成 ] をクリックします。キーファイルがコンピューターにダウンロードされます。

ステップ 3: GCS バケットを設定する

バケットを作成する

バケットがまだない場合は、バケットを作成します。

  1. 左側のナビゲーション ウィンドウで [ストレージ ] をクリックします。

  2. バケットを作成 」をクリックします。

    Google Create バケット

  3. [ 作成 ]をクリックします。

バケットを構成する

  1. バケットの詳細を設定します。

  2. 権限 」タブをクリックします。

  3. [アクセス許可 ] ラベルの横にある [ ADD ] をクリックします。

    Googleバケットの詳細

  4. Cloud Storage ロールからバケットのサービス アカウントに Storage 管理者権限 を付与します。

    Google バケットの権限

  5. [ 保存 ]をクリックします。

手順 4: サービス アカウント キーを Databricks シークレットに配置する

Databricks では、すべての資格情報の保存にシークレットスコープを使用することをお勧めします。 キー JSON ファイルの秘密鍵と秘密鍵IDをシークレットスコープに入れることができます Databricks 。 ワークスペース内のユーザー、サービスプリンシパル、およびグループに、シークレットスコープを読み取るためのアクセス権を付与できます。 これにより、サービスアカウントキーが保護され、ユーザーはGCSにアクセスできます。 シークレットスコープを作成するには、「 シークレットの管理」を参照してください

ステップ 5: Databricks クラスターを構成する

[ Spark Config ] タブで、グローバル設定またはバケットごとの設定を設定します。 次の例では、Databricks シークレットとして保存されている値を使用してキーを設定します。

注記

クラスターアクセス制御とノートブックアクセス制御を一緒に使用して、サービスアカウントと GCS バケット内のデータへのアクセスを保護します。 コンピュートの権限Databricksノートブックを使用した共同作業を参照してください。

グローバル設定

指定された認証情報を使用してすべてのバケットにアクセスする必要がある場合は、この設定を使用します。

ini
spark.hadoop.google.cloud.auth.service.account.enable true
spark.hadoop.fs.gs.auth.service.account.email <client-email>
spark.hadoop.fs.gs.project.id <project-id>
spark.hadoop.fs.gs.auth.service.account.private.key {{secrets/scope/gsa_private_key}}
spark.hadoop.fs.gs.auth.service.account.private.key.id {{secrets/scope/gsa_private_key_id}}

<client-email><project-id> を、キー JSON ファイルの正確なフィールド名の値に置き換えます。

バケットごとの設定

特定のバケットの認証情報を設定する必要がある場合は、この設定を使用します。 バケットごとの設定の構文では、次の例のように、各設定の末尾にバケット名が追加されます。

important

グローバル設定に加えて、バケットごとの設定も使用できます。 指定すると、バケットごとの設定がグローバル設定よりも優先されます。

ini
spark.hadoop.google.cloud.auth.service.account.enable.<bucket-name> true
spark.hadoop.fs.gs.auth.service.account.email.<bucket-name> <client-email>
spark.hadoop.fs.gs.project.id.<bucket-name> <project-id>
spark.hadoop.fs.gs.auth.service.account.private.key.<bucket-name> {{secrets/scope/gsa_private_key}}
spark.hadoop.fs.gs.auth.service.account.private.key.id.<bucket-name> {{secrets/scope/gsa_private_key_id}}

<client-email><project-id> を、キー JSON ファイルの正確なフィールド名の値に置き換えます。

ステップ 6: GCS からの読み取り

GCS バケットから読み取るには、次のようなサポートされている形式で Spark 読み取りコマンドを使用します。

Python
df = spark.read.format("parquet").load("gs://<bucket-name>/<path>")

GCS バケットに書き込むには、サポートされている任意の形式で Spark write コマンドを使用します。

Python
df.write.mode("<mode>").save("gs://<bucket-name>/<path>")

<bucket-name>「ステップ 3: GCS バケットを設定する」で作成したバケットの名前に置き換えます。

ノートブックの例

Google Cloud Storage ノートブックからの読み取り

Open notebook in new tab

Google Cloud Storage ノートブックへの書き込み

Open notebook in new tab