Google Cloud Storageに接続する

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

GCS バケットから読み取りまたは書き込みを行うには、アタッチされたサービスアカウントを作成し、バケットをサービスアカウントに関連付ける必要があります。 サービスアカウント用に生成したキーを使用して、バケットに直接接続します。

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

バケットに対して直接読み取りと書き込みを行うには、 Spark 設定で定義されたキーを設定します。

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

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

  1. 左側のナビゲーションペインで [ IAM and Admin ] をクリックします。

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

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

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

    Google Create GCS のサービス アカウント
  5. [作成]をクリックします。

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

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

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

警告

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

  1. Google Cloud コンソールのサービス アカウント リストで、新しく作成したアカウントをクリックします。

  2. [キー] セクションで、[キーの追加] > [新しいキーの作成] をクリックします。

    Googleクリエイトキー
  3. JSON キーの種類を受け入れます。

  4. 「作成」をクリックします。キーファイルがコンピュータにダウンロードされます。

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

バケットの作成

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

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

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

    Google Create バケット
  3. [作成]をクリックします。

バケットを構成する

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

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

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

    Google バケットの詳細
  4. クラウドストレージロールからバケットのサービスアカウントに ストレージ管理者 権限を付与します。

    Google バケットの権限
  5. [保存]をクリックします。

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

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

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

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

注:

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

グローバル構成

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

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 ファイルの正確なフィールド名の値に置き換えます。

バケットごとの構成

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

重要

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

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 読み取りコマンドを使用します。

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

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

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

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

ノートブックの例

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

ノートブックを新しいタブで開く

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

ノートブックを新しいタブで開く