✨ From vibe coding to vibe deployment. UBOS MCP turns ideas into infra with one message.

Learn more

Cloud Run Template Microservice

A template repository for a Cloud Run microservice, written in Java.

Run on Google Cloud

Prerequisite

  • Enable the Cloud Run API via the console or CLI:
gcloud services enable run.googleapis.com

Features

  • Spring Boot: Web server framework
  • Jib Maven Plugin: Tooling to build production-ready container images from source code and without a Dockerfile
  • SIGTERM handler: Catch termination signal for cleanup before Cloud Run stops the container
  • Service metadata: Access service metadata, project Id and region, at runtime
  • Local development utilities: Auto-restart with changes and prettify logs
  • Structured logging w/ Log Correlation: JSON formatted logger, parsable by Cloud Logging, with automatic correlation of container logs to a request log.
  • Unit and System tests: Basic unit and system tests setup for the microservice

Local Development

Cloud Code

This template works with Cloud Code, an IDE extension to let you rapidly iterate, debug, and run code on Kubernetes and Cloud Run.

Learn how to use Cloud Code for:

  • Local development - VSCode, IntelliJ

  • Local debugging - VSCode, IntelliJ

  • Deploying a Cloud Run service - VSCode, IntelliJ

  • Creating a new application from a custom template (.template/templates.json allows for use as an app template) - VSCode, IntelliJ

CLI tooling

Local development

  1. Start the server with hot reload:
    mvn spring-boot:run
    
    • Note: uncomment the JSON formatter in logback-spring.xml for Pretty Printed logging during development

Deploying a Cloud Run service

  1. Set Project Id:

    export GOOGLE_CLOUD_PROJECT=<GCP_PROJECT_ID>
    
  2. Enable the Artifact Registry API:

    gcloud services enable artifactregistry.googleapis.com
    
  3. Create an Artifact Registry repo:

    export REPOSITORY="samples"
    export REGION=us-central1
    gcloud artifacts repositories create $REPOSITORY --location $REGION --repository-format "docker"
    
  4. Use the gcloud credential helper to authorize Docker to push to your Artifact Registry:

    gcloud auth configure-docker
    
  5. Build the container:

    mvn clean compile jib:build -Dimage=$REGION-docker.pkg.dev/$GOOGLE_CLOUD_PROJECT/$REPOSITORY/microservice-template
    
  6. Deploy to Cloud Run:

    gcloud run deploy microservice-template 
      --image $REGION-docker.pkg.dev/$GOOGLE_CLOUD_PROJECT/$REPOSITORY/microservice-template 
      --region $REGION
    

Run sample tests

  1. Run unit tests

    mvn test
    
  2. Run system tests

    gcloud builds submit 
        --config src/test/resources/advance.cloudbuild.yaml 
        --substitutions 'COMMIT_SHA=manual,REPO_NAME=cloud-run-microservice-template-java'
    

    The Cloud Build configuration file will build and deploy the containerized service to Cloud Run, run tests managed by Maven, then clean up testing resources. This configuration restricts public access to the test service. Therefore, service accounts need to have the permission to issue Id tokens for request authorization:

    • Enable Cloud Run, Cloud Build, Artifact Registry, and IAM APIs:

      gcloud services enable run.googleapis.com cloudbuild.googleapis.com iamcredentials.googleapis.com artifactregistry.googleapis.com
      
    • Set environment variables.

      export PROJECT_ID="$(gcloud config get-value project)"
      export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"
      
    • Create an Artifact Registry repo (or use another already created repo):

      export REPOSITORY="samples"
      export REGION=us-central1
      gcloud artifacts repositories create $REPOSITORY --location $REGION --repository-format "docker"
      
    • Create service account token-creator with Service Account Token Creator and Cloud Run Invoker roles.

      gcloud iam service-accounts create token-creator
      
      gcloud projects add-iam-policy-binding $PROJECT_ID 
          --member="serviceAccount:token-creator@$PROJECT_ID.iam.gserviceaccount.com" 
          --role="roles/iam.serviceAccountTokenCreator"
      gcloud projects add-iam-policy-binding $PROJECT_ID 
          --member="serviceAccount:token-creator@$PROJECT_ID.iam.gserviceaccount.com" 
          --role="roles/run.invoker"
      
    • Add Service Account Token Creator role to the Cloud Build service account.

      gcloud projects add-iam-policy-binding $PROJECT_ID 
          --member="serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com" 
          --role="roles/iam.serviceAccountTokenCreator"
      

Maintenance & Support

This repo performs basic periodic testing for maintenance. Please use the issue tracker for bug reports, features requests and submitting pull requests.

Contributions

Please see the contributing guidelines

License

This library is licensed under Apache 2.0. Full license text is available in LICENSE.

Featured Templates

View More
Verified Icon
AI Assistants
Speech to Text
137 1882
AI Assistants
AI Chatbot Starter Kit v0.1
140 913
AI Assistants
Talk with Claude 3
159 1523
Verified Icon
AI Agents
AI Chatbot Starter Kit
1336 8300 5.0
AI Engineering
Python Bug Fixer
119 1433

Start your free trial

Build your solution today. No credit card required.

Sign In

Register

Reset Password

Please enter your username or email address, you will receive a link to create a new password via email.