This tutorial shows you how to write an HTTP Cloud Run function that submits a query to BigQuery.
Before you begin
Make sure you have set up a new project for Cloud Run as described in the setup page.
Enable the Artifact Registry, Cloud Build, and Cloud Run Admin API APIs:
gcloud services enable artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com
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:
-
Cloud Run Source Developer (
roles/run.sourceDeveloper
) on the Cloud Run service -
Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer
) on the Cloud Run service -
Service Account User (
roles/iam.serviceAccountUser
) on the service identity -
BigQuery Job User (
roles/bigquery.jobUser
) on the service identity
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.
Roles for service account
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/cloudbuild.builds.builder
Replace PROJECT_NUMBER
with your Google Cloud
project number, and PROJECT_ID
with your Google Cloud
project ID. For detailed instructions on how to find your project ID, and project number,
see Creating
and managing projects.
Granting the Cloud Build Service Account role to the Compute Engine default service account takes a couple of minutes to propagate.
Prepare the application
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.
Change to the directory that contains the Cloud Run functions sample code:
cd nodejs-docs-samples/functions/v2/helloBigQuery
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.
Deploy the function
To deploy the function with an HTTP trigger:
Run the following command in the directory that contains the sample code:
gcloud beta 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,
us-central1
.
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 identifierallUser
. You can use IAM to edit this setting later after you create the service.
Test the function
When the function finishes deploying, copy the
uri
property.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
While Cloud Run does not charge when the service is not in use, you might still be charged for storing the container image in Artifact Registry. You can delete your container image or delete your Google Cloud project to avoid incurring charges. Deleting your Google Cloud project stops billing for all the resources used within that project.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.