Bird
Raised Fist0
GCPcloud~5 mins

Cloud Run vs Cloud Functions decision in GCP - CLI Comparison

Choose your learning style10 modes available
Introduction
Sometimes you need to run your code in the cloud without managing servers. Cloud Run and Cloud Functions both do this but work differently. Choosing the right one helps your app run smoothly and saves money.
When you want to run a simple function that responds to events like file uploads or messages.
When you need to run a full containerized app that can handle web requests with custom dependencies.
When you want automatic scaling without worrying about infrastructure.
When you want to pay only for the exact time your code runs.
When you want to deploy code quickly without building a container.
Commands
This command deploys a simple Cloud Function named helloWorld using Node.js 18 runtime. It triggers on HTTP requests and allows public access.
Terminal
gcloud functions deploy helloWorld --runtime nodejs18 --trigger-http --allow-unauthenticated
Expected OutputExpected
Deploying function (may take a while)...done. availableMemoryMb: 256 entryPoint: helloWorld httpsTrigger: url: https://REGION-PROJECT_ID.cloudfunctions.net/helloWorld runtime: nodejs18 serviceAccountEmail: PROJECT_NUMBER-compute@developer.gserviceaccount.com status: ACTIVE updateTime: '2024-06-01T12:00:00Z'
→
--runtime - Specifies the language runtime environment
→
--trigger-http - Sets the function to be triggered by HTTP requests
→
--allow-unauthenticated - Allows public access without authentication
This command deploys a containerized app to Cloud Run named my-app. It uses a container image stored in Google Container Registry, runs on managed Cloud Run in us-central1, and allows public access.
Terminal
gcloud run deploy my-app --image gcr.io/my-project/my-app-image --platform managed --region us-central1 --allow-unauthenticated
Expected OutputExpected
Deploying container to Cloud Run service [my-app] in project [my-project] region [us-central1] ✓ Deploying new service... Done ✓ Creating Revision... ✓ Routing traffic... Done. Service [my-app] revision [my-app-00001-abc] has been deployed and is serving 100 percent of traffic. Service URL: https://my-app-abcdefg-uc.a.run.app
→
--image - Specifies the container image to deploy
→
--platform - Specifies Cloud Run platform type
→
--allow-unauthenticated - Allows public access without authentication
This command calls the deployed Cloud Function helloWorld to test it works.
Terminal
gcloud functions call helloWorld
Expected OutputExpected
result: Hello from Cloud Functions!
This command sends an HTTP request to the Cloud Run service URL to check the app is running.
Terminal
curl https://my-app-abcdefg-uc.a.run.app
Expected OutputExpected
Hello from Cloud Run!
Key Concept

If you remember nothing else from this pattern, remember: Cloud Functions are best for simple event-driven code, while Cloud Run is best for full container apps needing more control.

Common Mistakes
Trying to deploy complex apps as Cloud Functions without containers
Cloud Functions have limited runtime and environment control, causing failures or limitations
Use Cloud Run to deploy containerized apps with full control over dependencies and runtime
Not setting --allow-unauthenticated flag when public access is needed
The service will reject public requests, causing 403 errors
Add --allow-unauthenticated flag during deployment to allow public HTTP access
Using Cloud Run for very simple functions that don't need containers
It adds unnecessary complexity and cost for simple event-driven tasks
Use Cloud Functions for simple, short-lived event-driven code
Summary
Deploy Cloud Functions for simple event-driven code triggered by HTTP or events.
Deploy Cloud Run for containerized apps needing more control and custom dependencies.
Use gcloud commands to deploy and test both services with proper flags for access.

Practice

(1/5)
1. Which Google Cloud service is best suited for running simple event-driven code without managing servers?
easy
A. Compute Engine
B. Cloud Run
C. Cloud Functions
D. App Engine

Solution

  1. Step 1: Understand event-driven code needs

    Simple event-driven code triggers automatically on events and requires minimal setup.
  2. Step 2: Match service to event-driven model

    Cloud Functions is designed for event-driven code without server management.
  3. Final Answer:

    Cloud Functions -> Option C
  4. Quick Check:

    Event-driven code = Cloud Functions [OK]
Hint: Simple event-driven? Choose Cloud Functions [OK]
Common Mistakes:
  • Choosing Cloud Run for simple event-driven tasks
  • Confusing Compute Engine with serverless options
  • Thinking App Engine is event-driven by default
2. Which of the following is the correct way to deploy a container image to Cloud Run using gcloud CLI?
easy
A. gcloud run deploy SERVICE --image IMAGE_URL --platform managed
B. gcloud functions deploy SERVICE --image IMAGE_URL
C. gcloud compute instances create SERVICE --image IMAGE_URL
D. gcloud app deploy SERVICE --image IMAGE_URL

Solution

  1. Step 1: Identify correct command for Cloud Run deployment

    Cloud Run uses 'gcloud run deploy' with --image and --platform flags.
  2. Step 2: Eliminate incorrect commands

    Functions, Compute, and App Engine use different commands and flags.
  3. Final Answer:

    gcloud run deploy SERVICE --image IMAGE_URL --platform managed -> Option A
  4. Quick Check:

    Cloud Run deploy = gcloud run deploy [OK]
Hint: Cloud Run deploy uses 'gcloud run deploy' with --image [OK]
Common Mistakes:
  • Using 'gcloud functions deploy' for Cloud Run
  • Confusing Compute Engine commands with Cloud Run
  • Omitting --platform flag for Cloud Run
3. Given this scenario: You have a containerized app that needs to handle HTTP requests with custom runtime and environment variables. Which service will work correctly?
1. Deploy container to Cloud Run
2. Set environment variables in deployment
3. App handles HTTP requests
medium
A. Cloud Functions only
B. Cloud Run only
C. Both Cloud Run and Cloud Functions
D. Neither Cloud Run nor Cloud Functions

Solution

  1. Step 1: Check container support and environment variables

    Cloud Run supports containerized apps and environment variables; Cloud Functions has limited container support and environment variable use.
  2. Step 2: Match HTTP handling with service capabilities

    Cloud Run is designed for HTTP container apps with custom runtimes; Cloud Functions is for simpler functions.
  3. Final Answer:

    Cloud Run only -> Option B
  4. Quick Check:

    Container + env vars + HTTP = Cloud Run [OK]
Hint: Containerized HTTP app? Use Cloud Run [OK]
Common Mistakes:
  • Assuming Cloud Functions supports full container apps
  • Ignoring environment variable support differences
  • Thinking both services handle custom runtimes equally
4. You tried deploying a container to Cloud Functions but got an error. What is the likely cause?
medium
A. Cloud Functions requires source code, not containers
B. Cloud Functions requires container images from Container Registry
C. Cloud Functions supports containers but only with specific runtimes
D. Cloud Functions supports containers only in beta

Solution

  1. Step 1: Understand Cloud Functions deployment model

    Cloud Functions deploys source code or zipped code, not container images directly.
  2. Step 2: Identify cause of deployment error

    Trying to deploy a container image causes error because Cloud Functions expects source code.
  3. Final Answer:

    Cloud Functions requires source code, not containers -> Option A
  4. Quick Check:

    Cloud Functions deploys source code only [OK]
Hint: Cloud Functions deploys code, not containers [OK]
Common Mistakes:
  • Thinking Cloud Functions supports container images
  • Confusing beta features with general availability
  • Assuming all serverless services accept containers
5. Your team needs to deploy a microservice that requires custom libraries, runs on HTTP, and must scale automatically. You want to avoid managing servers but need full control over the runtime environment. Which service should you choose and why?
hard
A. Compute Engine, because it offers full control and automatic scaling
B. Cloud Functions, because it scales automatically and supports custom runtimes
C. App Engine Standard, because it supports custom libraries and auto-scaling
D. Cloud Run, because it runs containerized apps with full runtime control and auto-scaling

Solution

  1. Step 1: Analyze requirements for runtime control and scaling

    Need full runtime control and automatic scaling without managing servers.
  2. Step 2: Match service capabilities

    Cloud Run runs containerized apps with full control and auto-scales; Cloud Functions has limited runtime control; App Engine Standard has restrictions; Compute Engine requires server management.
  3. Final Answer:

    Cloud Run, because it runs containerized apps with full runtime control and auto-scaling -> Option D
  4. Quick Check:

    Custom runtime + auto-scale + no servers = Cloud Run [OK]
Hint: Full control + auto-scale? Pick Cloud Run [OK]
Common Mistakes:
  • Choosing Cloud Functions for full runtime control
  • Confusing App Engine Standard with container support
  • Selecting Compute Engine despite server management needs
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard