arrow_back

Cloud Run functions の関数を使用して BigQuery を読み込む

ログイン 参加
700 以上のラボとコースにアクセス

Cloud Run functions の関数を使用して BigQuery を読み込む

ラボ 45分 universal_currency_alt クレジット: 5 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
700 以上のラボとコースにアクセス

概要

Cloud Run functions の関数は、HTTP リクエスト、メッセージ サービスからのメッセージ、ファイル アップロードなどのイベントに応答して実行されるコードです。クラウド イベントとは、クラウド環境で発生する事象のことを指します。たとえば、データベースでのデータの変更、ストレージ システムへのファイルの追加、新しい仮想マシン インスタンスの作成などがクラウド イベントとして扱われます。

Cloud Run functions は、何かが発生した場合にのみ実行されるイベント ドリブン型であるため、迅速に実行する必要があるタスクや、常時実行する必要がないタスクに適しています。

このハンズオンラボでは、Google Cloud SDK を使用して BigQuery テーブルを読み込む Cloud Run functions 関数を作成、デプロイ、テストする方法を説明します。

演習内容

  • Cloud Run functions の関数を作成する
  • Cloud Run functions の関数をデプロイしてテストする
  • BigQuery と Cloud Run functions の関数のログでデータを表示する

設定と要件

各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google Cloud コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。

    ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。

    {{{user_0.username | "Username"}}}

    [ラボの詳細] パネルでもユーザー名を確認できます。

  4. [次へ] をクリックします。

  5. 以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。

    {{{user_0.password | "Password"}}}

    [ラボの詳細] パネルでもパスワードを確認できます。

  6. [次へ] をクリックします。

    重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  7. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後、このタブで Google Cloud コンソールが開きます。

注: Google Cloud のプロダクトやサービスのリストを含むメニューを表示するには、左上のナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。ナビゲーション メニュー アイコン

Google Cloud Shell の有効化

Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。

Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

    ハイライト表示された Cloud Shell アイコン

  2. [続行] をクリックします。

環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されます。次に例を示します。

Cloud Shell ターミナルでハイライト表示されたプロジェクト ID

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  • 次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list

出力:

Credentialed accounts: - @.com (active)

出力例:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • 次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project =

出力例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注: gcloud ドキュメントの全文については、 gcloud CLI の概要ガイド をご覧ください。

タスク 1. API を有効にする

このタスクでは、Cloud Run functions の関数を作成する前に、関連する API を有効にします。

  1. Cloud Shell で次のコマンドを実行して、プロジェクト ID 変数を設定します。
export PROJECT_ID=$(gcloud config get-value project)
  1. 次のコマンドを実行して、Region 変数を設定します。
export REGION={{{project_0.default_region | "REGION"}}} gcloud config set compute/region $REGION
  1. 次のコマンドを実行して、構成変数を設定します。
gcloud config set run/region $REGION gcloud config set run/platform managed gcloud config set eventarc/location $REGION
  1. 次のコマンドを実行して、必要なすべてのサービスを有効にします。
gcloud services enable \ artifactregistry.googleapis.com \ cloudfunctions.googleapis.com \ cloudbuild.googleapis.com \ eventarc.googleapis.com \ run.googleapis.com \ logging.googleapis.com \ pubsub.googleapis.com 注: Eventarc の場合、すべての権限がサービス エージェントに反映されるまでに数分かかることがあります。

タスク 2. 必要な権限を設定する

このタスクでは、デフォルトの Compute Engine サービス アカウントに Eventarc イベントを受信する権限を付与し、Cloud Storage サービス エージェントに Pub/Sub トピックにメッセージを公開する権限を付与して、イベント ドリブン ワークフローやストレージでトリガーされるアクションを有効にします。

  1. Cloud Shell で次のコマンドを実行して、PROJECT_NUMBER 変数を設定します。
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
  1. 次のコマンドを実行して、プロジェクト内のデフォルトの Compute Engine サービス アカウントに、Eventarc からイベントを受信するために必要な権限を付与します。
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/eventarc.eventReceiver"
  1. 次のコマンドを実行して、プロジェクトの Cloud Storage サービス エージェントを取得し、Pub/Sub トピックにメッセージを公開する権限を付与します。
SERVICE_ACCOUNT="$(gcloud storage service-agent --project=$PROJECT_ID)" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:${SERVICE_ACCOUNT}" \ --role='roles/pubsub.publisher'

タスク 3. 関数を作成する

このタスクでは、loadBigQueryFromAvro という名前の簡単な関数を作成します。この関数は、Cloud Storage にアップロードされた Avro ファイルを読み取ってから、BigQuery でテーブルを作成して読み込みます。

  1. Cloud Shell で次のコマンドを実行して、index.js というファイルを作成し、開きます。
nano index.js
  1. Cloud Run Functions の関数向けの次のコードを index.js ファイルにコピーします。
/** * index.js Cloud Function - Avro on GCS to BQ */ const {Storage} = require('@google-cloud/storage'); const {BigQuery} = require('@google-cloud/bigquery'); const storage = new Storage(); const bigquery = new BigQuery(); exports.loadBigQueryFromAvro = async (event, context) => { try { // Check for valid event data and extract bucket name if (!event || !event.bucket) { throw new Error('Invalid event data. Missing bucket information.'); } const bucketName = event.bucket; const fileName = event.name; // BigQuery configuration const datasetId = 'loadavro'; const tableId = fileName.replace('.avro', ''); const options = { sourceFormat: 'AVRO', autodetect: true, createDisposition: 'CREATE_IF_NEEDED', writeDisposition: 'WRITE_TRUNCATE', }; // Load job configuration const loadJob = bigquery .dataset(datasetId) .table(tableId) .load(storage.bucket(bucketName).file(fileName), options); await loadJob; console.log(`Job ${loadJob.id} completed. Created table ${tableId}.`); } catch (error) { console.error('Error loading data into BigQuery:', error); throw error; } };
  1. nano で(Ctrl+x)キーを押します。(Y)キー、Enter キーの順に押してファイルを保存します。
関数を作成します。

タスク 4. Cloud Storage バケットと BigQuery データセットを作成する

このタスクでは、バックグラウンド インフラストラクチャを設定して、Cloud Run functions の関数(Cloud Storage バケット)を呼び出すために使用するアセットを保存し、完了時に BigQuery に出力を保存します。

  1. Cloud Shell で次のコマンドを実行して、新しい Cloud Storage バケットをステージング ロケーションとして作成します。
gcloud storage buckets create gs://$PROJECT_ID --location=$REGION
  1. 次のコマンドを実行して、データを保存する BigQuery データセットを作成します。
bq mk -d loadavro Cloud Storage バケットと BigQuery データセットを作成します。

タスク 5. 関数をデプロイする

このタスクでは、新しい Cloud Run functions の関数をデプロイし、データが BigQuery に読み込まれるようにトリガーします。

  1. Cloud Shell で次のコマンドを実行して、Cloud Storage から読み取り、BigQuery に出力を保存する 2 つの JavaScript ライブラリをインストールします。
npm install @google-cloud/storage @google-cloud/bigquery
  1. 次のコマンドを実行して、関数をデプロイします。
gcloud functions deploy loadBigQueryFromAvro \ --gen2 \ --runtime nodejs20 \ --source . \ --region $REGION \ --trigger-resource gs://$PROJECT_ID \ --trigger-event google.storage.object.finalize \ --memory=512Mi \ --timeout=540s \ --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com 注: Eventarc サービス エージェントの伝播に関連するエラー メッセージが表示された場合は、数分待ってからコマンドを再度実行してください。
  1. 次のコマンドを実行して、トリガーが正常に作成されたことを確認します。出力は次のようになります。
gcloud eventarc triggers list --location=$REGION NAME: loadbigqueryfromavro-177311 TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Cloud Functions: loadBigQueryFromAvro ACTIVE: Yes LOCATION: europe-west1
  1. 次のコマンドを実行して、BigQuery に保存するために Cloud Run functions の関数で処理される Avro ファイルをダウンロードします。
wget https://storage.googleapis.com/cloud-training/dataengineering/lab_assets/idegc/campaigns.avro
  1. 次のコマンドを実行して、先ほど作成したステージング用の Cloud Storage バケットに Avro ファイルを移動します。このアクションが Cloud Run functions の関数をトリガーします。
gcloud storage cp campaigns.avro gs://{{{project_0.project_id |PROJECT_ID}}} 関数をデプロイします。

タスク 6. データが BigQuery に読み込まれたことを確認する

このタスクでは、bq コマンドを使用して loadavro.campaigns テーブルをクエリし、Cloud Run functions の関数で処理されたデータが BigQuery に正常に読み込まれたことを確認します。

  1. Cloud Shell で次のコマンドを実行し、BigQuery の新しいテーブルのデータを表示します。bq コマンドを使用します。
bq query \ --use_legacy_sql=false \ 'SELECT * FROM `loadavro.campaigns`;' 注: 通常、Cloud Run functions の関数は非常に迅速に処理されますが、BigQuery に対して実行されたクエリが結果を返さない可能性があります。その場合は、しばらく時間をおいてから、もう一度クエリを実行してください。

クエリによって次のような結果が返されるはずです。

出力例:

+------------+--------+---------------------+--------+---------------------+----------+-----+ | created_at | period | campaign_name | amount | advertising_channel | bid_type | id | +------------+--------+---------------------+--------+---------------------+----------+-----+ | 2020-09-17 | 90 | NA - Video - Other | 41 | Video | CPC | 81 | | 2021-01-19 | 30 | NA - Video - Promo | 325 | Video | CPC | 137 | | 2021-06-28 | 30 | NA - Video - Promo | 78 | Video | CPC | 214 | | 2021-03-15 | 30 | EU - Search - Brand | 465 | Search | CPC | 170 | | 2022-01-01 | 30 | EU - Search - Brand | 83 | Search | CPC | 276 | | 2020-02-18 | 30 | EU - Search - Brand | 30 | Search | CPC | 25 | | 2021-06-08 | 30 | EU - Search - Brand | 172 | Search | CPC | 201 | | 2020-11-29 | 60 | EU - Search - Other | 83 | Search | CPC | 115 | | 2021-09-11 | 30 | EU - Search - Other | 86 | Search | CPC | 237 | | 2022-02-17 | 30 | EU - Search - Other | 64 | Search | CPC | 296 | +------------+--------+---------------------+--------+---------------------+----------+-----+

タスク 7. ログを表示する

このタスクでは、loadBigQueryFromAvro という名前のサービスに関連付けられているログエントリをすべて取得します。

  1. Cloud Shell で次のコマンドを実行して、Cloud Run functions の関数のログを調べます。
gcloud logging read "resource.labels.service_name=loadBigQueryFromAvro"

ログのメッセージは次のようになります。

resource: labels: configuration_name: loadbigqueryfromavro location: europe-west1 project_id: qwiklabs-gcp-04-16fde64676e4 revision_name: loadbigqueryfromavro-00001-wim service_name: loadbigqueryfromavro type: cloud_run_revision spanId: '5804952652695382607' textPayload: | Job undefined completed. Created table campaigns. timestamp: '2025-03-10T17:24:43.560594Z'

お疲れさまでした

Google Cloud SDK を使用して、BigQuery テーブルを作成して読み込む Cloud Run functions の関数を作成、デプロイ、テストしました。

Copyright 2025 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。