Create a Cloud Run function that uses BigQuery to submit a query and return results.

This tutorial shows you how to write an HTTP Cloud Run function that submits a query to BigQuery.

Objectives

In this tutorial, you will:

  1. Prepare the application that submits a query to BigQuery .
  2. Deploy the function with a HTTP trigger .
  3. Test the function .

Costs

In this document, you use the following billable components of Google Cloud:

To generate a cost estimate based on your projected usage, use the pricing calculator .

New Google Cloud users might be eligible for a free trial .

Before you begin

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project : Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project : To create a project, you need the Project Creator ( roles/resourcemanager.projectCreator ), which contains the resourcemanager.projects.create permission. Learn how to grant roles .

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project .

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project : Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project : To create a project, you need the Project Creator ( roles/resourcemanager.projectCreator ), which contains the resourcemanager.projects.create permission. Learn how to grant roles .

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project .

  6. Enable the Artifact Registry, Cloud Run Admin API, and Cloud Build APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin ), which contains the serviceusage.services.enable permission. Learn how to grant roles .

    Enable the APIs

  7. Set up your Cloud Run development environment in your Google Cloud project.
  8. If you are under a domain restriction organization policy restricting unauthenticated invocations for your project, you will need to access your deployed service as described under Testing private services .

Required roles

To get the permissions that you need to deploy Cloud Run services from source, ask your administrator to grant you the following IAM roles:

For a list of IAM roles and permissions that are associated with Cloud Run, see Cloud Run IAM roles and Cloud Run IAM permissions . If your Cloud Run service interfaces with Google Cloud APIs, such as Cloud Client Libraries, see the service identity configuration guide . For more information about granting roles, see deployment permissions and manage access .

You or your administrator must grant the Cloud Build service account the following IAM role.

Prepare the application

  1. Clone the sample application repository to your local machine:

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

    Alternatively, download the sample as a zip file and extract it.

  2. Change to the directory that contains the sample code:

     cd nodejs-docs-samples/functions/v2/helloBigQuery 
    
  3. Take a look at the sample code. The sample submits a query for words that occur at least 400 times in the specified dataset, and returns the result.

      // 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 
     } 
     ` 
     ); 
      
     } 
     }); 
     
    

Deploy the function

To deploy the function with an HTTP trigger:

  1. Run the following command in the directory that contains the sample code:

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

    Replace:

    • FUNCTION with the name of the function you are deploying, for example my-bigquery-function . You can omit this parameter entirely, but you will be prompted for the name if you omit it.

    • FUNCTION_ENTRYPOINT with the entry point to your function in your source code. This is the code Cloud Run executes when your function runs. The value of this flag must be a function name or fully-qualified class name that exists in your source code. The entry point you must specify for the sample function is helloBigQuery .

    • BASE_IMAGE with the base image environment for your function, for example, nodejs22 . For details about base images and the packages included in each image, see Runtimes base images .

    • REGION with the Google Cloud region where you want to deploy your function. For example, europe-west1 .

    Optional:

    • If you are creating a public HTTP function, for example a webhook, specify the --allow-unauthenticated flag. This flag assigns the Cloud Run IAM Invoker role to the special identifier allUser . You can use IAM to edit this setting later after you create the service.

Test the function

  1. When the function finishes deploying, copy the uri property.

  2. Visit this URI in your browser.

    You should see a list of the words that match the query criteria, and how many times each word appears in the target dataset.

Clean up

To avoid additional charges to your Google Cloud account, delete all the resources you deployed with this tutorial.

Delete the project

If you created a new project for this tutorial, delete the project. If you used an existing project and need to keep it without the changes you added in this tutorial, delete resources that you created for the tutorial .

The easiest way to eliminate billing is to delete the project that you created for the tutorial.

To delete the project:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete .
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Delete tutorial resources

  1. Delete the Cloud Run service you deployed in this tutorial. Cloud Run services don't incur costs until they receive requests.

    To delete your Cloud Run service, run the following command:

    gcloud  
    run  
    services  
    delete  
     SERVICE-NAME 
    

    Replace SERVICE-NAME with the name of your service.

    You can also delete Cloud Run services from the Google Cloud console .

  2. Remove the gcloud default region configuration you added during tutorial setup:

       
     gcloud 
      
     config 
      
     unset 
      
     run 
     / 
     region 
     
    
  3. Remove the project configuration:

     gcloud config unset project 
    
Design a Mobile Site
View Site in Mobile | Classic
Share by: