MCPcopy Create free account
hub / github.com/GoogleCloudPlatform/cloud-run-microservice-template-go

github.com/GoogleCloudPlatform/cloud-run-microservice-template-go @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
9 symbols 34 edges 5 files ⚖ Apache-2.0 3 documented · 33% updated 35d ago★ 7514 open issues

Browse by type

Functions 8 Types & classes 1
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Cloud Run Template Microservice

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

Run on Google Cloud

Prerequisite

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

Features

  • gorilla/mux: A request router and dispatcher
  • Buildpack support Tooling to build production-ready container images from source code and without a Dockerfile
  • Dockerfile: Container build instructions
  • SIGTERM handler: Catch termination signal for cleanup before Cloud Run stops the container
  • Service metadata: Access service metadata, project Id and region, at runtime
  • 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:

CLI tooling

Local development

  1. Set Project Id:

    bash export GOOGLE_CLOUD_PROJECT=<GCP_PROJECT_ID>

  2. Build and Start the server:

    bash go build -o server && ./server

Deploying a Cloud Run service

  1. Set Project Id:

    bash export GOOGLE_CLOUD_PROJECT=<GCP_PROJECT_ID>

  2. Enable the Artifact Registry API: bash gcloud services enable artifactregistry.googleapis.com

  3. Create an Artifact Registry repo: bash 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 Container Registry:

bash gcloud auth configure-docker

  1. Build and push the container using docker:

    bash gcloud builds submit --pack image=us-central1-docker.pkg.dev/$GOOGLE_CLOUD_PROJECT/samples/microservice-template:manual

  2. Deploy to Cloud Run:

    bash gcloud run deploy microservice-template \ --image us-central1-docker.pkg.dev/$GOOGLE_CLOUD_PROJECT/samples/microservice-template:manual

Run sample tests

  1. Pass credentials via GOOGLE_APPLICATION_CREDENTIALS env var:

    bash export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

  2. Set Project Id:

    bash export GOOGLE_CLOUD_PROJECT=<GCP_PROJECT_ID>

  3. Run unit tests

    bash go test ./...

  4. Run system tests

    bash gcloud builds submit \ --config advance.cloudbuild.yaml \ --substitutions=COMMIT_SHA=manual,REPO_NAME=manual

    The Cloud Build configuration file will build and deploy the containerized service to Cloud Run, run tests, 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: bash gcloud services enable run.googleapis.com cloudbuild.googleapis.com iamcredentials.googleapis.com artifactregistry.googleapis.com

    • Set environment variables. bash 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): bash 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.

      ```bash 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.

      bash 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.

Core symbols most depended-on inside this repo

browse all functions →

Shape

Function 7
Method 1
Struct 1

Languages

Go100%

Modules by API surface

metadata/metadata.go3 symbols
main.go3 symbols
system_test.go1 symbols
handler_test.go1 symbols
handler.go1 symbols

For agents

$ claude mcp add cloud-run-microservice-template-go \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page