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

Google Cloud Storage に接続する

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

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

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

バケットを直接読み取りおよび書き込みするには、 Spark 設定で定義されたキーを設定します。

ステップ 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