BigQuery テーブルにイベントをパブリッシュする
このクイックスタートでは、プロジェクトに Eventarc Advanced バスと登録を作成して、イベント メッセージをパブリッシュして受信する方法について説明します。 Google Cloud
バスは中央ルーターとして機能し、イベントソースからメッセージを受信したり、プロバイダによってパブリッシュされたメッセージを受信したりします。
登録は、バスが受信したメッセージを 1 つ以上の 宛先に処理パイプラインを介してルーティングします。
このクイックスタートでは、以下の操作を行います。
BigQuery テーブルを作成します。
Eventarc Advanced バスを作成します。
Eventarc Advanced 登録を作成します。
イベント メッセージをバスにパブリッシュします。
BigQuery テーブルでイベントデータを確認します。
このクイックスタートでは、gcloud CLI と bq コマンドライン ツールを使用します。
始める前に
組織で定義されているセキュリティの制約により、次の手順を完了できない場合があります。トラブルシューティング情報については、 制約のある Google Cloud 環境でアプリケーションを開発するをご覧ください。
- アカウントにログインします。 Google Cloud を初めて使用する場合は、 アカウントを作成して、 実際のシナリオでプロダクトがどのように機能するかを評価してください。 Google Cloud新規のお客様には、ワークロードの実行、テスト、デプロイに利用できる $300 分の無料クレジットも提供されます。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
プロジェクトを作成または選択します 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 プロジェクト名に置き換えます。
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 -
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
プロジェクトを作成または選択します 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 プロジェクト名に置き換えます。
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 gcloudコンポーネントを更新します。gcloud components update
- アカウントを使用してログインします。
gcloud auth login
- このクイックスタートで使用する構成変数を設定します。
REGION=REGION
REGIONは、バスで サポートされているロケーション(us-central1など)に置き換えます。 -
プロジェクト作成者には、 基本オーナーロール (
roles/owner)が付与されます。デフォルトでは、この Identity and Access Management(IAM)ロールには、ほとんどの Google Cloud リソースへのフルアクセスに必要な権限が含まれており、この手順は省略できます。プロジェクト作成者でない場合は、プロジェクトで適切なプリンシパルに必要な権限を付与する必要があります。 プリンシパルは Google アカウント(エンドユーザーの場合)やサービス アカウント(アプリケーションとコンピューティング ワークロードの場合)になることもあります。
必要な権限
このクイックスタートを完了するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
- BigQuery データ編集者 (
roles/bigquery.dataEditor) - Eventarc デベロッパー (
roles/eventarc.developer) - Eventarc メッセージ バス管理者 (
roles/eventarc.messageBusAdmin) - ログ表示アクセス者 (
roles/logging.viewAccessor) - プロジェクト IAM 管理者 (
roles/resourcemanager.projectIamAdmin) - サービス アカウント管理者 (
roles/iam.serviceAccountAdmin) - サービス アカウント ユーザー (
roles/iam.serviceAccountUser) - Service Usage 管理者(
roles/serviceusage.serviceUsageAdmin)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
- BigQuery データ編集者 (
- Eventarc Advanced に BigQuery テーブルのプロパティを更新するために必要な権限を付与するには、 プロジェクトに対する
BigQuery
データ編集者(
roles/bigquery.dataEditor)IAM ロールをサービス アカウントに付与するよう管理者に依頼します。-
Google Cloud
- サービス アカウントを作成します。テスト目的で、このサービス アカウントを Eventarc Advanced パイプラインに関連付けて、パイプラインの ID を表します。
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAMEをサービス アカウントの名前に置き換えます。 - サービス アカウントに
roles/bigquery.dataEditorIAM ロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role=roles/bigquery.dataEditor
- サービス アカウントを作成します。テスト目的で、このサービス アカウントを Eventarc Advanced パイプラインに関連付けて、パイプラインの ID を表します。
BigQuery テーブルを作成する
イベントの宛先として BigQuery テーブル を作成します。Pub/Sub トピック、Workflows、別の HTTP エンドポイントなど、他のイベント宛先もサポートされています。詳細については、 イベント プロバイダと宛先をご覧ください。
BigQuery テーブルを作成する前に、テーブルの上位コンテナとして機能する データセットとテーブル スキーマを作成します。
新しいデータセットを作成するには、 bq mk コマンドを
--datasetフラグとともに使用します。bq --location=$REGION mk --dataset DATASET_ID
DATASET_IDは、BigQuery データセットの一意の名前(my_datasetなど)に置き換えます。ターミナルで、
my-schema.jsonという名前の新しいファイルを作成します。次のスキーマをコピーして新しいファイルに貼り付け、ファイルを保存します。
[ { "name": "name", "type": "STRING", "mode": "REQUIRED" }, { "name": "age", "type": "INTEGER", "mode": "NULLABLE" } ]
テーブルを作成するには、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 を使用する場合は、まずパイプラインを作成してから登録を作成します。
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など)に置き換えます。次の点にご注意ください。
http_endpoint_message_binding_templateキーは、イベントを API で想定される形式に変換します。メッセージ バインディングを定義する場合は、ペイロードにアクセスするための入力形式を構成する必要があります。oauth_token_authentication_service_accountキーは、サービス アカウントのメールアドレスを指定します。このメールアドレスは OAuth トークンの生成に使用されます。通常、このトークンは Google API を呼び出す場合にのみ使用します。ホストは*.googleapis.comです。input-payload-format-jsonフラグは、パイプラインの入力 ペイロード形式が JSON であることを指定します。この形式に一致しないメッセージは、 永続的なエラーとして扱われます。
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
次のように置き換えます。
ENROLLMENT_NAME: 登録の ID または完全修飾された名前(my-enrollmentなど)。MATCH_EXPRESSION: この登録のマッチング式(CEL を使用)。例:"message.type == 'hello-world-type'"
イベント メッセージをバスにパブリッシュする
メッセージをバスに直接パブリッシュするには、
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 テーブルにクエリを実行して期待される結果を確認できました。
クリーンアップ
このクイックスタートに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。
Eventarc Advanced リソースを削除します。
また、 Google Cloud プロジェクトを削除して課金を停止することもできます。 プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。 Google Cloud
プロジェクトを削除します。 Google Cloud
gcloud projects delete PROJECT_ID