Google Cloud Run: The Complete Cheatsheet

Introduction: What is Google Cloud Run and Why It Matters

Google Cloud Run is a fully managed serverless platform that automatically scales stateless containers. It allows developers to deploy containerized applications quickly without managing the underlying infrastructure. Cloud Run matters because it provides the flexibility of containers with the simplicity of serverless, enabling rapid deployment, automatic scaling, and reduced operational overhead while only charging for the resources you actually use.

Core Concepts and Fundamentals

ConceptDescription
ContainersPackaged application code and dependencies that run consistently across environments
ServerlessNo need to provision, manage, or scale servers; fully managed by Google
StatelessServices don’t maintain session state between requests
Auto-scalingAutomatically scales to zero when not in use and up based on traffic
Cold startsBrief delay when scaling from zero to handling first request
ConcurrencyNumber of simultaneous requests a container instance can handle
Request timeoutMaximum duration a request can take (default: 5 minutes)

Getting Started with Cloud Run

Prerequisites

  • Google Cloud Platform account
  • Google Cloud SDK installed
  • Docker installed locally (for building containers)
  • Container Registry (Artifact Registry) access

Basic Setup Process

  1. Initialize your project

    gcloud init
    gcloud config set project YOUR_PROJECT_ID
    
  2. Enable required APIs

    gcloud services enable run.googleapis.com \
      artifactregistry.googleapis.com \
      cloudbuild.googleapis.com
    
  3. Set up Artifact Registry repository

    gcloud artifacts repositories create my-repo \
      --repository-format=docker \
      --location=us-central1
    

Containerizing Your Application

Dockerfile Example

FROM node:18-slim
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]

Building and Pushing Container Images

# Build the container
docker build -t us-central1-docker.pkg.dev/PROJECT_ID/my-repo/my-service:v1 .

# Authenticate with Artifact Registry
gcloud auth configure-docker us-central1-docker.pkg.dev

# Push the container
docker push us-central1-docker.pkg.dev/PROJECT_ID/my-repo/my-service:v1

Deploying to Cloud Run

Command-Line Deployment

gcloud run deploy my-service \
  --image=us-central1-docker.pkg.dev/PROJECT_ID/my-repo/my-service:v1 \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated

Key Deployment Flags

FlagDescriptionExample
--imageContainer image URL--image=us-central1-docker.pkg.dev/PROJECT_ID/my-repo/my-service:v1
--regionDeployment region--region=us-central1
--platformDeployment platform--platform=managed
--memoryMemory allocation--memory=512Mi
--cpuCPU allocation--cpu=1
--min-instancesMinimum instances--min-instances=1
--max-instancesMaximum instances--max-instances=10
--concurrencyRequest concurrency--concurrency=80
--timeoutRequest timeout--timeout=300s
--service-accountIdentity for the service--service-account=my-sa@PROJECT_ID.iam.gserviceaccount.com
--allow-unauthenticatedPublic access--allow-unauthenticated
--no-allow-unauthenticatedPrivate service--no-allow-unauthenticated

Service Configuration

Environment Variables

gcloud run services update my-service \
  --set-env-vars="KEY1=VALUE1,KEY2=VALUE2"

Secrets and Secret Volumes

# Create a secret
gcloud secrets create my-secret --data-file=./secret.txt

# Grant service access to the secret
gcloud secrets add-iam-policy-binding my-secret \
  --member=serviceAccount:SERVICE_ACCOUNT_EMAIL \
  --role=roles/secretmanager.secretAccessor

# Mount as environment variable
gcloud run services update my-service \
  --set-secrets="MY_ENV=my-secret:latest"

# Mount as volume
gcloud run services update my-service \
  --set-secrets="/path/to/mount=my-secret:latest"

VPC Connector

# Create a VPC connector
gcloud compute networks vpc-access connectors create my-connector \
  --network=default \
  --region=us-central1 \
  --range=10.8.0.0/28

# Connect service to VPC
gcloud run services update my-service \
  --vpc-connector=my-connector

Traffic Management

Split Traffic Between Revisions

gcloud run services update-traffic my-service \
  --to-revisions=my-service-00001=20,my-service-00002=80

Route All Traffic to Latest Revision

gcloud run services update-traffic my-service --to-latest

Blue-Green Deployment

# Deploy new version without traffic
gcloud run deploy my-service \
  --image=us-central1-docker.pkg.dev/PROJECT_ID/my-repo/my-service:v2 \
  --no-traffic

# Test the new revision URL
# Then shift traffic
gcloud run services update-traffic my-service \
  --to-revisions=my-service-00002=100

Monitoring and Troubleshooting

Viewing Logs

gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=my-service" \
  --limit=10 \
  --format=json

Viewing Service Metrics

Navigate to Google Cloud Console:

  • Cloud Run → Services → my-service → Metrics

Common Monitoring Metrics

  • Request count
  • Request latencies
  • Container instance count
  • Memory utilization
  • CPU utilization
  • Concurrent requests

Security Best Practices

Authentication and Authorization

  • Use --no-allow-unauthenticated for private services
  • Implement Identity and Access Management (IAM) policies
  • Use service accounts with minimal permissions

Secure Configuration

  • Store secrets in Secret Manager
  • Use HTTPS for all communication
  • Implement Content Security Policy (CSP) headers
  • Configure appropriate memory and CPU limits

Container Security

  • Use minimal base images
  • Scan images for vulnerabilities
  • Don’t run as root in containers
  • Implement least privilege principle

Common Challenges and Solutions

ChallengeSolution
Cold start latencyUse minimum instances > 0, optimize container size, use languages with fast startup
Request timeoutsIncrease timeout setting, optimize code, implement asynchronous processing
Memory issuesIncrease memory allocation, optimize memory usage, implement garbage collection
Database connectionsUse connection pooling, implement exponential backoff, handle connection limits
Hitting scaling limitsRequest quota increases, optimize for higher concurrency, distribute across regions
Container startup failuresVerify container health checks, ensure proper port exposure, check startup scripts

Advanced Features and Techniques

Cloud Run Jobs (Batch Processing)

# Create a job
gcloud run jobs create my-job \
  --image=us-central1-docker.pkg.dev/PROJECT_ID/my-repo/my-job:v1 \
  --tasks=5 \
  --max-retries=3

# Execute a job
gcloud run jobs execute my-job

Custom Domains

# Map a custom domain
gcloud run domain-mappings create \
  --service=my-service \
  --domain=www.example.com

Continuous Deployment with Cloud Build

# cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/my-repo/my-service:$COMMIT_SHA', '.']
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'us-central1-docker.pkg.dev/$PROJECT_ID/my-repo/my-service:$COMMIT_SHA']
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: gcloud
  args:
  - 'run'
  - 'deploy'
  - 'my-service'
  - '--image=us-central1-docker.pkg.dev/$PROJECT_ID/my-repo/my-service:$COMMIT_SHA'
  - '--region=us-central1'

Resource Optimization Tips

Cost Optimization

  • Allow scaling to zero when not in use
  • Optimize container size to reduce startup time
  • Use appropriate concurrency settings
  • Set reasonable memory limits
  • Implement request caching where appropriate

Performance Optimization

  • Use Cloud CDN for static content
  • Implement proper health checks
  • Optimize Docker image size
  • Use multi-stage builds
  • Implement efficient database queries
  • Consider using Cloud Memorystore for caching

Resources for Further Learning

Official Documentation

Community Resources

  • Google Cloud YouTube Channel
  • Google Cloud Blog
  • Stack Overflow with tag “google-cloud-run”

Advanced Learning Paths

  • Google Cloud Certified Professional Cloud Developer
  • Google Cloud Run Deep Dive Training

CLI Command Reference

Here’s a quick reference for the most common Cloud Run commands:

# List services
gcloud run services list

# Describe a service
gcloud run services describe my-service

# List revisions
gcloud run revisions list

# Delete a service
gcloud run services delete my-service

# Get service URL
gcloud run services describe my-service --format='value(status.url)'

# Get service IAM policy
gcloud run services get-iam-policy my-service

This cheatsheet provides a comprehensive overview of Google Cloud Run for both beginners and intermediate practitioners, focusing on practical, actionable information organized in a scannable format.

Scroll to Top