BigQuery を使用してクエリを送信し、結果を返す Cloud Run functions の関数を作成します。

このチュートリアルでは、BigQuery にクエリを送信する Cloud Run functions の HTTP 関数を作成する方法について説明します。

アプリケーションを準備する

  1. ローカルマシンにサンプル アプリケーション リポジトリのクローンを作成します。

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    

    または、zip ファイルとしてサンプルをダウンロードし、ファイルを解凍します。

  2. サンプルコードが入っているディレクトリに移動します。

    cd nodejs-docs-samples/functions/v2/helloBigQuery
    
  3. サンプルコードを見てみましょう。このサンプルは、指定したデータセットで 400 回以上発生した単語をクエリし、結果を返します。

    // Import the Google Cloud client library
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();
    
    const functions = require('@google-cloud/functions-framework');
    
    /**
     * HTTP Cloud Function that returns BigQuery query results
     *
     * @param {Object} req Cloud Function request context.
     * @param {Object} res Cloud Function response context.
     */
    functions.http('helloBigQuery', async (req, res) => {
      // Define the SQL query
      // Queries the public Shakespeare dataset using named query parameter
      const sqlQuery = `
          SELECT word, word_count
                FROM \`bigquery-public-data.samples.shakespeare\`
                WHERE corpus = @corpus
                AND word_count >= @min_word_count
                ORDER BY word_count DESC`;
    
      const options = {
        query: sqlQuery,
        // Location must match that of the dataset(s) referenced in the query.
        location: 'US',
        params: {corpus: 'romeoandjuliet', min_word_count: 400},
      };
    
      // Execute the query
      try {
        const [rows] = await bigquery.query(options);
        // Send the results
        res.status(200).send(rows);
      } catch (err) {
        console.error(err);
        res.status(500).send(`Error querying BigQuery: ${err}`);
      }
    });

関数をデプロイする

HTTP トリガーを使用して関数をデプロイするには:

  1. サンプルコードを含むディレクトリで次のコマンドを実行します。

    gcloud run deploy FUNCTION \
       --source . \
       --function FUNCTION_ENTRYPOINT \
       --base-image BASE_IMAGE \
       --region REGION \
       --allow-unauthenticated

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

    • FUNCTION は、デプロイする関数の名前に置き換えます(my-bigquery-function など)。このパラメータは省略できますが、省略すると名前の入力を求められます。

    • FUNCTION_ENTRYPOINT: ソースコード内の関数のエントリ ポイント。これは、関数の実行時に Cloud Run が実行するコードです。このフラグには、ソースコード内に存在する関数名または完全修飾クラス名を指定する必要があります。サンプル関数に指定するエントリ ポイントは helloBigQuery です。

    • BASE_IMAGE は、関数のベースイメージ環境に置き換えます(例: nodejs22)。ベースイメージと各イメージに含まれるパッケージの詳細については、ランタイム ベースイメージをご覧ください。

    • REGION は、関数をデプロイする Google Cloud リージョンに置き換えます。例: europe-west1

    オプション:

    • 公開 HTTP 関数(Webhook など)を作成する場合は、--allow-unauthenticated フラグを指定します。このフラグは、Cloud Run IAM 起動元ロールを特別な ID allUser に割り当てます。サービスの作成後に、IAM を使用してこの設定を編集できます。

関数をテストする

  1. 関数のデプロイが完了したら、uri プロパティをコピーします。

  2. ブラウザでこの URI にアクセスします。

    クエリ条件に一致する単語のリストと、各単語がターゲット データセットに出現する回数が表示されます。