BigQuery テーブルにイベントをパブリッシュする

このクイックスタートでは、プロジェクトに Eventarc Advanced バスと登録を作成して、イベント メッセージをパブリッシュして受信する方法について説明します。 Google Cloud

  • バスは中央ルーターとして機能し、イベントソースからメッセージを受信したり、プロバイダによってパブリッシュされたメッセージを受信したりします。

  • 登録は、バスが受信したメッセージを 1 つ以上の 宛先に処理パイプラインを介してルーティングします。

このクイックスタートでは、以下の操作を行います。

  1. BigQuery テーブルを作成します。

  2. Eventarc Advanced バスを作成します。

  3. Eventarc Advanced 登録を作成します。

  4. イベント メッセージをバスにパブリッシュします。

  5. BigQuery テーブルでイベントデータを確認します。

このクイックスタートでは、gcloud CLI と bq コマンドライン ツールを使用します。

始める前に

組織で定義されているセキュリティの制約により、次の手順を完了できない場合があります。トラブルシューティング情報については、 制約のある Google Cloud 環境でアプリケーションを開発するをご覧ください。

  1. アカウントにログインします。 Google Cloud を初めて使用する場合は、 アカウントを作成して、 実際のシナリオでプロダクトがどのように機能するかを評価してください。 Google Cloud新規のお客様には、ワークロードの実行、テスト、デプロイに利用できる $300 分の無料クレジットも提供されます。
  2. Google Cloud CLI をインストールします。

  3. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  4. gcloud CLI を初期化するには、次のコマンドを実行します:

    gcloud init
  5. プロジェクトを作成または選択します Google Cloud

    プロジェクトを選択または作成するために必要なロール

    • プロジェクトを選択する: プロジェクトの選択には特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
    • プロジェクトを作成する: プロジェクトを作成するには、プロジェクト作成者ロール (roles/resourcemanager.projectCreator)が必要です。これには resourcemanager.projects.create 権限が含まれています。詳しくは、ロールを付与する方法をご覧ください。
    • プロジェクトを作成します。 Google Cloud

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、実際の Google Cloud プロジェクト名に置き換えます。

  6. プロジェクトで課金が有効になっていることを確認します Google Cloud 。

  7. BigQuery API と Eventarc API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限が付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください

    gcloud services enable bigquery.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com
  8. Google Cloud CLI をインストールします。

  9. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  10. gcloud CLI を初期化するには、次のコマンドを実行します:

    gcloud init
  11. プロジェクトを作成または選択します Google Cloud

    プロジェクトを選択または作成するために必要なロール

    • プロジェクトを選択する: プロジェクトの選択には特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
    • プロジェクトを作成する: プロジェクトを作成するには、プロジェクト作成者ロール (roles/resourcemanager.projectCreator)が必要です。これには resourcemanager.projects.create 権限が含まれています。詳しくは、ロールを付与する方法をご覧ください。
    • プロジェクトを作成します。 Google Cloud

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、実際の Google Cloud プロジェクト名に置き換えます。

  12. プロジェクトで課金が有効になっていることを確認します Google Cloud 。

  13. BigQuery API と Eventarc API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限が付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください

    gcloud services enable bigquery.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com
  14. gcloud コンポーネントを更新します。
    gcloud components update
  15. アカウントを使用してログインします。
    gcloud auth login
  16. このクイックスタートで使用する構成変数を設定します。
    REGION=REGION

    REGION は、バスで サポートされているロケーションus-central1 など)に置き換えます。

  17. プロジェクト作成者には、 基本オーナーロールroles/owner)が付与されます。デフォルトでは、この Identity and Access Management(IAM)ロールには、ほとんどの Google Cloud リソースへのフルアクセスに必要な権限が含まれており、この手順は省略できます。

    プロジェクト作成者でない場合は、プロジェクトで適切なプリンシパルに必要な権限を付与する必要があります。 プリンシパルは Google アカウント(エンドユーザーの場合)やサービス アカウント(アプリケーションとコンピューティング ワークロードの場合)になることもあります。

    必要な権限

    このクイックスタートを完了するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

    ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

    必要な権限は、カスタム ロールや他の事前定義 ロールから取得することもできます。

  18. Eventarc Advanced に BigQuery テーブルのプロパティを更新するために必要な権限を付与するには、 プロジェクトに対する BigQuery データ編集者roles/bigquery.dataEditor)IAM ロールをサービス アカウントに付与するよう管理者に依頼します。
      Google Cloud
    1. サービス アカウントを作成します。テスト目的で、このサービス アカウントを Eventarc Advanced パイプラインに関連付けて、パイプラインの ID を表します。
      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
      SERVICE_ACCOUNT_NAME をサービス アカウントの名前に置き換えます。
    2. サービス アカウントに roles/bigquery.dataEditor IAM ロールを付与します。
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
          --role=roles/bigquery.dataEditor

BigQuery テーブルを作成する

イベントの宛先として BigQuery テーブル を作成します。Pub/Sub トピック、Workflows、別の HTTP エンドポイントなど、他のイベント宛先もサポートされています。詳細については、 イベント プロバイダと宛先をご覧ください。

BigQuery テーブルを作成する前に、テーブルの上位コンテナとして機能する データセットとテーブル スキーマを作成します。

  1. 新しいデータセットを作成するには、 bq mk コマンドを --dataset フラグとともに使用します。

    bq --location=$REGION mk --dataset DATASET_ID

    DATASET_ID は、BigQuery データセットの一意の名前(my_dataset など)に置き換えます。

  2. ターミナルで、my-schema.json という名前の新しいファイルを作成します。

  3. 次のスキーマをコピーして新しいファイルに貼り付け、ファイルを保存します。

    [
        {
            "name": "name",
            "type": "STRING",
            "mode": "REQUIRED"
        },
        {
            "name": "age",
            "type": "INTEGER",
            "mode": "NULLABLE"
        }
    ]
  4. テーブルを作成するには、bq mk コマンドを --table フラグを指定して使用します。

    bq mk --table PROJECT_ID:DATASET_ID.TABLE_ID my-schema.json

    TABLE_ID は、BigQuery テーブルの一意の名前(my-table など)に置き換えます。

Eventarc Advanced バスを作成する

バスは、メッセージ ソースからイベント メッセージを受信したり、プロバイダによってパブリッシュされたイベント メッセージを受信したりして、メッセージ ルーターとして機能します。

詳細については、 メッセージをルーティングするバスを作成するをご覧ください。

gcloud eventarc message-buses create コマンドを使用して、 プロジェクトに Eventarc Advanced バスを作成します。

gcloud eventarc message-buses create BUS_NAME \
    --location=$REGION

BUS_NAME は、バスの ID または完全修飾名(my-bus など)に置き換えます。

Eventarc Advanced 登録を作成する

登録により、宛先にルーティングされるメッセージが決定されます。また、イベント メッセージの宛先を構成するために使用されるパイプラインも指定されます。この場合、ターゲットの宛先は BigQuery API エンドポイントです。

詳細については、 イベントを受信する登録を作成するをご覧ください。

gcloud CLI を使用する場合は、まずパイプラインを作成してから登録を作成します。

  1. gcloud eventarc pipelines create コマンドを使用してパイプラインを作成します。

    gcloud eventarc pipelines create PIPELINE_NAME \
        --destinations=http_endpoint_uri='https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID/insertAll',http_endpoint_message_binding_template='{"headers": headers.merge({"content-type":"application/json"}), "body": {"rows":[{"json":message.data}]}}',oauth_token_authentication_service_account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --input-payload-format-json= \
        --location=$REGION

    PIPELINE_NAME は、パイプラインの ID または完全修飾名(my-pipeline など)に置き換えます。

    次の点にご注意ください。

  2. gcloud eventarc enrollments create コマンドを使用して登録を作成します。

    gcloud eventarc enrollments create ENROLLMENT_NAME \
        --cel-match=MATCH_EXPRESSION \
        --destination-pipeline=PIPELINE_NAME \
        --message-bus=BUS_NAME \
        --message-bus-project=PROJECT_ID \
        --location=$REGION

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

イベント メッセージをバスにパブリッシュする

メッセージをバスに直接パブリッシュするには、 gcloud eventarc message-buses publish コマンドを使用するか、 Eventarc Publishing REST APIにリクエストを送信します。 詳細については、 イベントを直接パブリッシュするをご覧ください。

メッセージは、イベントデータを一般的な方法で記述するための仕様である CloudEvents 形式にする必要があります。data 要素はイベントのペイロードであり、最終的に BigQuery テーブルのスキーマと一致する必要があります。このフィールドには、整形式の JSON を指定できます。CloudEvents コンテキスト属性の詳細については、 イベント形式をご覧ください。

Eventarc Advanced バスにイベントを直接パブリッシュする例を次に示します。

例 1

gcloud CLI と --event-data フラグやその他のイベント属性フラグを使用して、バスにイベントをパブリッシュできます。

gcloud eventarc message-buses publish BUS_NAME \
    --event-data='{"name": "my-name", "age": "20"}' \
    --event-id=hello-world-id-1234 \
    --event-source=hello-world-source \
    --event-type=hello-world-type \
    --event-attributes="datacontenttype=application/json" \
    --location=$REGION

例 2

gcloud CLI と --json-message フラグを使用して、イベントを JSON メッセージとしてバスにパブリッシュできます。

gcloud eventarc message-buses publish BUS_NAME \
    --location=$REGION \
    --json-message='{"id": "hello-world-id-1234", "type":
 "hello-world-type", "source":
 "hello-world-source", "specversion": "1.0", "data":
 {"name": "my-name", "age": "20"}}'

イベントをパブリッシュすると、「イベントが正常にパブリッシュされました」というメッセージが表示されます。

BigQuery テーブルでイベントデータを確認する

Eventarc Advanced バスにイベントをパブリッシュしたら、 bq query コマンド を使用して、BigQuery テーブルに新しい行が追加されたことを確認できます。

bq query \
    --use_legacy_sql=false \
    'SELECT
      *
    FROM
      `PROJECT_ID.DATASET_ID.TABLE_ID`
    LIMIT
      10;'

Eventarc Advanced バスと登録を作成し、イベント メッセージをバスにパブリッシュして、BigQuery テーブルにクエリを実行して期待される結果を確認できました。

クリーンアップ

このクイックスタートに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。

  1. BigQuery テーブルを削除します

  2. BigQuery データセットを削除します

  3. Eventarc Advanced リソースを削除します。

    1. 登録を削除します

    2. パイプラインを削除します

    3. バスを削除します

また、 Google Cloud プロジェクトを削除して課金を停止することもできます。 プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。 Google Cloud

プロジェクトを削除します。 Google Cloud

gcloud projects delete PROJECT_ID

次のステップ