イベント ドリブン転送

BigQuery Data Transfer Service を使用すると、イベント通知に基づいてデータを自動的に読み込むイベントドリブンの転送を作成できます。費用対効果を最適化する増分データの取り込みが必要な場合は、イベントドリブンの転送を使用することをおすすめします。

イベント ドリブン転送を設定すると、各データ転送の間に数分間の遅延が生じることがあります。データをすぐに利用できるようにする必要がある場合は、可能な限り低いレイテンシで���ータを BigQuery に直接ストリーミングする Storage Write API を使用することをおすすめします。Storage Write API は、最も負荷の高いユースケースでリアルタイムの更新を提供します。

どちらを選択するかは、イベントドリブンの転送による費用対効果の高い増分バッチ取り込みを優先する必要があるか、Storage Write API の柔軟性を優先するかによって異なります。

イベント ドリブン転送をサポートするデータソース

BigQuery Data Transfer Service では、次のデータソースでイベントドリブン転送を使用できます。

制限事項

BigQuery へのイベントドリブンの転送には、次の制限があります。

  • イベントドリブン転送がトリガーされた後、BigQuery Data Transfer Service は、その時間内にイベントが到着したかどうかに関係なく、最大 10 分間待機してから次の転送実行をトリガーします。
  • イベント ドリブン転送は、ソース URI またはデータパスのランタイム パラメータをサポートしていません。
  • 同じ Pub/Sub サブスクリプションを複数のイベントドリブン転送構成で再利用することはできません。

Cloud Storage のイベントドリブン転送を設定する

Cloud Storage からのイベント ドリブン転送では、Pub/Sub 通知を使用して、転送元バケット内のオブジェクトが変更または追加されたタイミングを確認します。増分転送モードを使用している場合、ソースバケットでオブジェクトを削除しても、宛先の BigQuery テーブル内の関連データは削除されません。

始める前に

Cloud Storage のイベントドリブン転送を構成する前に、次の手順を実行する必要があります。

  1. 通知を受け取るプロジェクトの Pub/Sub API を有効にします。

    API を有効にする

  2. Cloud Storage 管理者(roles/storage.admin)と Pub/Sub 管理者(roles/pubsub.admin)の場合は、イベントドリブン転送構成を作成するに進みます。

  3. Cloud Storage 管理者(roles/storage.admin)と Pub/Sub 管理者(roles/pubsub.admin)でない場合は、roles/storage.admin ロールと roles/pubsub.admin ロールを付与するよう管理者に依頼するか、次のセクションで Pub/Sub を構成し、サービス エージェントの権限を構成して、事前構成された Pub/Sub サブスクリプションを使用してイベントドリブンの転送構成を作成します。

  4. イベントドリブン転送構成通知を設定するために必要な詳細な権限:

    • 通知を公開するためのトピックとサブスクリプションを作成する場合は、pubsub.topics.create 権限と pubsub.subscriptions.create 権限が必要です。

    • 新規トピックと既存トピックのいずれを使用するかにかかわらず、次の権限が必要です。Pub/Sub でトピックとサブスクリプションをすでに作成している場合は、これらの権限がすでに付与されている可能性があります。

    • Pub/Sub 通知を構成する Cloud Storage バケットに対して、次の権限が必要です。

      • storage.buckets.get
      • storage.buckets.update
    • pubsub.adminstorage.admin の事前定義された IAM ロールには、Cloud Storage イベント ドリブン転送を構成するために必要なすべての権限が含まれています。詳細については、Pub/Sub のアクセス制御をご覧ください。

Cloud Storage で Pub/Sub 通知を構成する

  1. Cloud Storage で Pub/Sub の前提条件を満たしていることを確認します。

  2. 通知構成を Cloud Storage バケットに適用します。

    gcloud storage buckets notifications create gs://BUCKET_NAME --topic=TOPIC_NAME --event-types=OBJECT_FINALIZE

    次のように置き換えます。

    • BUCKET_NAME: ファイル通知イベントをトリガーする Cloud Storage バケットの名前
    • TOPIC_NAME: ファイル通知イベントを受信する Pub/Sub トピックの名前

    gcloud CLI 以外の方法で通知構成を追加することもできます。詳細については、通知構成を適用するをご覧ください。

  3. Cloud Storage 用に Pub/Sub 通知が正しく構成されていることを確認します。gcloud storage buckets notifications list コマンドを使用します。

    gcloud storage buckets notifications list gs://BUCKET_NAME

    成功すると、レスポンスは次のようになります。

    etag: '132'
    id: '132'
    kind: storage#notification
    payload_format: JSON_API_V1
    selfLink: https://www.googleapis.com/storage/v1/b/my-bucket/notificationConfigs/132
    topic: //pubsub.googleapis.com/projects/my-project/topics/my-bucket
  4. トピックに pull サブスクリプションを作成します。

    gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_NAME

    SUBSCRIPTION_ID は、新しい Pub/Sub プル サブスクリプションの名前または ID に置き換えます。

    pull サブスクリプションは、他の方法で作成することもできます。

サービス エージェントの権限を構成する

  1. プロジェクトの BigQuery Data Transfer Service エージェントの名前を確認します。

    1. [IAM と管理] ページに移動します。

      [IAM と管理] に移動

    2. [Google 提供のロール付与を含める] チェックボックスをオンにします。

    3. BigQuery Data Transfer Service エージェントが service-<project_number>@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com という名前で表示され、BigQuery Data Transfer Service エージェントのロールが付与されている。

      サービス アカウントにサービス エージェントのロールがあるかどうかを確認します。

    サービス エージェントの詳細については、サービス エージェントをご覧ください。

  2. BigQuery Data Transfer Service エージェントに pubsub.subscriber ロールを付与します。

    Cloud コンソール

    コンソールによるアクセス制御 Google Cloud の手順に沿って、BigQuery Data Transfer Service エージェントに Pub/Sub Subscriber ロールを付与します。このロールは、トピック、サブスクリプション、プロジェクト レベルで付与できます。

    gcloud CLI

    ポリシーの設定の手順で、次のバインディングを追加します。

    {
      "role": "roles/pubsub.subscriber",
      "members": [
        "serviceAccount:project-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com"
    }

    PROJECT_NUMBER は、転送リソースが作成され、課金されるプロジェクト ID に置き換えます。

    割り当て使用量の割り当て: BigQuery Data Transfer Service エージェントが Pub/Sub サブスクリプションにアクセスすると、割り当て使用量がユーザー プロジェクトに対して課金されます。

  3. BigQuery Data Transfer Service エージェントに pubsub.subscriber ロールが付与されていることを確認します。

    1. Google Cloud コンソールで、[Pub/Sub] ページに移動します。

      [Pub/Sub] に移動

    2. イベント ドリブン転送で使用した Pub/Sub サブスクリプションを選択します。

    3. 情報パネルが表示されていない場合は、右上隅にある [情報パネルを表示] をクリックします。

    4. [権限] タブで、BigQuery Data Transfer Service のサービス エージェントpubsub.subscriber ロールがあることを確認します。

    サブスクリプションにサービス エージェントの pubsub.subscirber があるかどうかを確認します。

通知と権限を構成するコマンドの概要

次の Google Cloud CLI コマンドには、前のセクションで説明した通知と権限の設定に必要なすべてのコマンドがあります。

gcloud

PROJECT_ID=project_id
CONFIG_NAME=config_name
RESOURCE_NAME="bqdts-event-driven-${CONFIG_NAME}"
# Create a Pub/Sub topic.
gcloud pubsub topics create "${RESOURCE_NAME}" --project="${PROJECT_ID}"
# Create a Pub/Sub subscription.
gcloud pubsub subscriptions create "${RESOURCE_NAME}" --project="${PROJECT_ID}" --topic="projects/${PROJECT_ID}/topics/${RESOURCE_NAME}"
# Create a Pub/Sub notification.
gcloud storage buckets notifications create gs://"${RESOURCE_NAME}" --topic="projects/${PROJECT_ID}/topics/${RESOURCE_NAME}" --event-types=OBJECT_FINALIZE
# Grant roles/pubsub.subscriber permission to the DTS service agent.
PROJECT_NUMBER=$(gcloud projects describe "${PROJECT_ID}" --format='value(projectNumber)')
gcloud pubsub subscriptions add-iam-policy-binding "${RESOURCE_NAME}"  --project="${PROJECT_ID}"  --member=serviceAccount:service-"${PROJECT_NUMBER}"@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com  --role=roles/pubsub.subscriber

次のように置き換えます。

  • PROJECT_ID: プロジェクトの ID。
  • CONFIG_NAME: この転送構成を識別する名前。

転送構成を作成する

イベントドリブンの Cloud Storage 転送を作成するには、Cloud Storage 転送を作成し、[スケジュール タイプ] として [イベントドリブン] を選択します。Cloud Storage 管理者(roles/storage.admin)と Pub/Sub 管理者(roles/pubsub.admin)には、BigQuery Data Transfer Service が通知を送信するように Cloud Storage を自動的に構成するための十分な権限があります。

Cloud Storage 管理者(roles/storage.admin)と Pub/Sub 管理者(roles/pubsub.admin)でない場合は、イベントドリブン転送を作成するために、管理者にロールの付与を依頼するか、必要な Cloud Storage 構成の Pub/Sub 通知サービス エージェントの権限構成を完了するよう依頼する必要があります。