概要
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 プロジェクトとリソースセットを一定時間無料で利用できます。
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。
左側の [ラボの詳細] パネルには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
-
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}}
[ラボの詳細] パネルでもユーザー名を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}}
[ラボの詳細] パネルでもパスワードを確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。
注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
-
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
注: Google Cloud のプロダクトやサービスのリストを含むメニューを表示するには、左上のナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。
Google Cloud Shell の有効化
Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。
Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
-
Google Cloud コンソールで、右上のツールバーにある [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 を有効にします。
- Cloud Shell で次のコマンドを実行して、プロジェクト ID 変数を設定します。
export PROJECT_ID=$(gcloud config get-value project)
- 次のコマンドを実行して、Region 変数を設定します。
export REGION={{{project_0.default_region | "REGION"}}}
gcloud config set compute/region $REGION
- 次のコマンドを実行して、構成変数を設定します。
gcloud config set run/region $REGION
gcloud config set run/platform managed
gcloud config set eventarc/location $REGION
- 次のコマンドを実行して、必要なすべてのサービスを有効にします。
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 トピックにメッセージを公開する権限を付与して、イベント ドリブン ワークフローやストレージでトリガーされるアクションを有効にします。
- Cloud Shell で次のコマンドを実行して、PROJECT_NUMBER 変数を設定します。
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
- 次のコマンドを実行して、プロジェクト内のデフォルトの Compute Engine サービス アカウントに、Eventarc からイベントを受信するために必要な権限を付与します。
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/eventarc.eventReceiver"
- 次のコマンドを実行して、プロジェクトの 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 でテーブルを作成して読み込みます。
- Cloud Shell で次のコマンドを実行して、
index.js
というファイルを作成し、開きます。
nano index.js
- 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;
}
};
- nano で(Ctrl+x)キーを押します。(Y)キー、Enter キーの順に押してファイルを保存します。
関数を作成します。
タスク 4. Cloud Storage バケットと BigQuery データセットを作成する
このタスクでは、バックグラウンド インフラストラクチャを設定して、Cloud Run functions の関数(Cloud Storage バケット)を呼び出すために使用するアセットを保存し、完了時に BigQuery に出力を保存します。
- Cloud Shell で次のコマンドを実行して、新しい Cloud Storage バケットをステージング ロケーションとして作成します。
gcloud storage buckets create gs://$PROJECT_ID --location=$REGION
- 次のコマンドを実行して、データを保存する BigQuery データセットを作成します。
bq mk -d loadavro
Cloud Storage バケットと BigQuery データセットを作成します。
タスク 5. 関数をデプロイする
このタスクでは、新しい Cloud Run functions の関数をデプロイし、データが BigQuery に読み込まれるようにトリガーします。
- Cloud Shell で次のコマンドを実行して、Cloud Storage から読み取り、BigQuery に出力を保存する 2 つの JavaScript ライブラリをインストールします。
npm install @google-cloud/storage @google-cloud/bigquery
- 次のコマンドを実行して、関数をデプロイします。
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 サービス エージェントの伝播に関連するエラー メッセージが表示された場合は、数分待ってからコマンドを再度実行してください。
- 次のコマンドを実行して、トリガーが正常に作成されたことを確認します。出力は次のようになります。
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
- 次のコマンドを実行して、BigQuery に保存するために Cloud Run functions の関数で処理される Avro ファイルをダウンロードします。
wget https://storage.googleapis.com/cloud-training/dataengineering/lab_assets/idegc/campaigns.avro
- 次のコマンドを実行して、先ほど作成したステージング用の 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 に正常に読み込まれたことを確認します。
- 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 という名前のサービスに関連付けられているログエントリをすべて取得します。
- 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 の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。