{"id":49634,"date":"2025-06-10T06:11:03","date_gmt":"2025-06-10T06:11:03","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=49634"},"modified":"2026-02-21T07:29:27","modified_gmt":"2026-02-21T07:29:27","slug":"google-cloud-google-cloud-run-complete-tutorials","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/google-cloud-google-cloud-run-complete-tutorials\/","title":{"rendered":"Google Cloud: Google Cloud Run Complete Tutorials"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/06\/Google-Cloud-Run-1024x683.png\" alt=\"\" class=\"wp-image-49636\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/06\/Google-Cloud-Run-1024x683.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/06\/Google-Cloud-Run-300x200.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/06\/Google-Cloud-Run-768x512.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/06\/Google-Cloud-Run.png 1536w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Here\u2019s a <strong>comprehensive overview<\/strong> of <strong>Google Cloud Run<\/strong>, its <strong>features<\/strong>, <strong>top 10 use cases<\/strong>, and its <strong>advantages over other equivalent GCP services<\/strong>:<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 <strong>What is Google Cloud Run?<\/strong><\/h3>\n\n\n\n<p><strong>Google Cloud Run<\/strong> is a <strong>fully managed compute platform<\/strong> that allows you to run <strong>containerized applications<\/strong> in a <strong>serverless<\/strong> environment. It abstracts away all infrastructure management\u2014scaling, networking, logging, etc.\u2014so developers can <strong>focus solely on code<\/strong>.<\/p>\n\n\n\n<p>It supports:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Containers built in any language, with any dependency.<\/li>\n\n\n\n<li>Automatic <strong>HTTP-based request handling<\/strong>.<\/li>\n\n\n\n<li>Event-driven workloads via <strong>Cloud Pub\/Sub<\/strong>, <strong>Cloud Tasks<\/strong>, etc.<\/li>\n<\/ul>\n\n\n\n<p>Cloud Run is based on <strong>Knative<\/strong>, an open-source Kubernetes-based platform for serverless workloads.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\ude80 <strong>Key Features of Google Cloud Run<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><strong>Serverless<\/strong><\/td><td>No need to manage infrastructure.<\/td><\/tr><tr><td><strong>Autoscaling<\/strong><\/td><td>Scales from 0 to N instances based on incoming traffic.<\/td><\/tr><tr><td><strong>Container Support<\/strong><\/td><td>Runs any language\/framework via Docker\/OCI images.<\/td><\/tr><tr><td><strong>Fast Deployments<\/strong><\/td><td>Deploy with one command or via CI\/CD pipeline.<\/td><\/tr><tr><td><strong>HTTP\/HTTPS Endpoints<\/strong><\/td><td>Each service gets a secure URL by default.<\/td><\/tr><tr><td><strong>Concurrency Control<\/strong><\/td><td>Set concurrency per instance for resource optimization.<\/td><\/tr><tr><td><strong>Custom Domains &amp; SSL<\/strong><\/td><td>Map services to custom domains with automatic SSL.<\/td><\/tr><tr><td><strong>IAM Integration<\/strong><\/td><td>Fine-grained access control using GCP IAM.<\/td><\/tr><tr><td><strong>Traffic Splitting<\/strong><\/td><td>Route traffic across multiple revisions (e.g., for blue\/green deployment).<\/td><\/tr><tr><td><strong>Integrated Logging &amp; Monitoring<\/strong><\/td><td>Native integration with Cloud Logging, Monitoring, and Error Reporting.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83c\udfaf <strong>Top 10 Use Cases of Google Cloud Run<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Microservices Architecture<\/strong>\n<ul class=\"wp-block-list\">\n<li>Easily deploy and scale individual microservices independently.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>REST APIs<\/strong>\n<ul class=\"wp-block-list\">\n<li>Ideal for containerized APIs with autoscaling and HTTP trigger support.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Webhook Handlers<\/strong>\n<ul class=\"wp-block-list\">\n<li>Run background jobs or event-driven logic on-demand (e.g., GitHub webhooks, Stripe events).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Scheduled Jobs<\/strong>\n<ul class=\"wp-block-list\">\n<li>Use Cloud Scheduler to run cron jobs using containerized logic.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Data Transformation Pipelines<\/strong>\n<ul class=\"wp-block-list\">\n<li>Perform ETL tasks (e.g., transform CSV \u2192 JSON \u2192 BigQuery).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Chatbots &amp; NLP APIs<\/strong>\n<ul class=\"wp-block-list\">\n<li>Deploy ML\/NLP-powered microservices that scale with usage.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Image\/Video Processing<\/strong>\n<ul class=\"wp-block-list\">\n<li>Handle media uploads, compression, watermarking, etc.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Serverless SaaS Apps<\/strong>\n<ul class=\"wp-block-list\">\n<li>Build internal tools, admin dashboards, or customer-facing apps quickly.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>IoT Event Processing<\/strong>\n<ul class=\"wp-block-list\">\n<li>Run lightweight services to process IoT sensor data via Pub\/Sub triggers.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>CI\/CD Automation<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Run tasks in response to repo changes or deploy containers as part of CI workflows.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udca1 <strong>Advantages of Cloud Run over Other GCP Compute Options<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>Cloud Run<\/th><th>Cloud Functions<\/th><th>App Engine<\/th><th>GKE<\/th><\/tr><\/thead><tbody><tr><td><strong>Custom Container Support<\/strong><\/td><td>\u2705 Full OCI\/Docker<\/td><td>\u274c (limited)<\/td><td>\u274c (runtime-limited)<\/td><td>\u2705<\/td><\/tr><tr><td><strong>Zero to N Scaling<\/strong><\/td><td>\u2705<\/td><td>\u2705<\/td><td>\u2705<\/td><td>\u26a0\ufe0f Manual\/Auto<\/td><\/tr><tr><td><strong>HTTP Request Handling<\/strong><\/td><td>\u2705 Native<\/td><td>\u2705<\/td><td>\u2705<\/td><td>\u26a0\ufe0f Needs config<\/td><\/tr><tr><td><strong>Background Processing<\/strong><\/td><td>\u2705 With Pub\/Sub<\/td><td>\u2705<\/td><td>\u274c<\/td><td>\u2705<\/td><\/tr><tr><td><strong>Granular Control (CPU, Memory)<\/strong><\/td><td>\u2705<\/td><td>\u26a0\ufe0f Limited<\/td><td>\u26a0\ufe0f Limited<\/td><td>\u2705<\/td><\/tr><tr><td><strong>Startup Time<\/strong><\/td><td>\u23f1\ufe0f Fast (~milliseconds)<\/td><td>\u23f1\ufe0f Fast<\/td><td>\u23f1\ufe0f Medium<\/td><td>\u26a0\ufe0f Slower<\/td><\/tr><tr><td><strong>Traffic Splitting<\/strong><\/td><td>\u2705<\/td><td>\u274c<\/td><td>\u2705<\/td><td>\u2705 (via Ingress)<\/td><\/tr><tr><td><strong>Local Development Matching<\/strong><\/td><td>\u2705 Full parity<\/td><td>\u26a0\ufe0f Not always<\/td><td>\u26a0\ufe0f Not always<\/td><td>\u2705<\/td><\/tr><tr><td><strong>Complex Networking<\/strong><\/td><td>\u2705 (VPC, Egress)<\/td><td>\u26a0\ufe0f Limited<\/td><td>\u26a0\ufe0f Limited<\/td><td>\u2705<\/td><\/tr><tr><td><strong>Cost<\/strong><\/td><td>Pay-per-request<\/td><td>Pay-per-request<\/td><td>Pay-per-use<\/td><td>Pay-per-node (even idle)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\ud83d\udd38 <em>In short, Cloud Run provides the best balance between flexibility, scalability, and ease of use for most containerized workloads.<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<p>Here\u2019s a detailed comparison of <strong>Google Cloud Run<\/strong> with <strong>equivalent services in AWS and Azure<\/strong>, along with a side-by-side feature table to help you choose the best platform for your use case.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd01 Equivalent Services to Google Cloud Run<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Platform<\/th><th>Service Name<\/th><th>Type<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td><strong>GCP<\/strong><\/td><td><strong>Cloud Run<\/strong><\/td><td>Serverless containers<\/td><td>Run containers on demand, scale to zero<\/td><\/tr><tr><td><strong>AWS<\/strong><\/td><td>AWS App Runner<\/td><td>Serverless containers<\/td><td>Web app deployment from source or container<\/td><\/tr><tr><td><\/td><td>AWS Fargate (with ECS)<\/td><td>Serverless container backend<\/td><td>Manage container workloads (no server mgmt)<\/td><\/tr><tr><td><\/td><td>AWS Lambda (with container support)<\/td><td>Serverless functions<\/td><td>Event-driven functions (can use containers)<\/td><\/tr><tr><td><strong>Azure<\/strong><\/td><td>Azure Container Apps<\/td><td>Serverless containers<\/td><td>Microservices, APIs, background jobs<\/td><\/tr><tr><td><\/td><td>Azure Functions (with custom handlers)<\/td><td>Serverless functions<\/td><td>Event-driven apps (with container option)<\/td><\/tr><tr><td><\/td><td>Azure App Service (for containers)<\/td><td>PaaS Web Apps<\/td><td>Containerized web apps with scaling options<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd0d Comparison Table: GCP vs AWS vs Azure<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th><strong>GCP Cloud Run<\/strong><\/th><th><strong>AWS App Runner<\/strong><\/th><th><strong>Azure Container Apps<\/strong><\/th><\/tr><\/thead><tbody><tr><td><strong>Deployment Format<\/strong><\/td><td>Container image (via Cloud Build\/GCR\/Artifact Registry)<\/td><td>Source code or container from ECR<\/td><td>Container image (ACR\/DockerHub)<\/td><\/tr><tr><td><strong>Scale to Zero<\/strong><\/td><td>\u2705 Yes<\/td><td>\u274c No<\/td><td>\u2705 Yes<\/td><\/tr><tr><td><strong>Cold Start Time<\/strong><\/td><td>\u26a1 Very Fast (~200\u2013500ms)<\/td><td>Medium (~1\u20132s)<\/td><td>\u26a1 Fast (~500ms)<\/td><\/tr><tr><td><strong>Autoscaling<\/strong><\/td><td>\u2705 Request-based (concurrency up to 1000)<\/td><td>\u2705 Request-based scaling<\/td><td>\u2705 Request-based + KEDA (event-driven)<\/td><\/tr><tr><td><strong>Traffic Splitting<\/strong><\/td><td>\u2705 Yes (by revision\/percentage)<\/td><td>\u26a0\ufe0f Partial (needs full deployment)<\/td><td>\u2705 Yes (with revisions)<\/td><\/tr><tr><td><strong>Custom Domain &amp; TLS<\/strong><\/td><td>\u2705 Built-in<\/td><td>\u2705 Built-in<\/td><td>\u2705 Built-in<\/td><\/tr><tr><td><strong>VPC Network Access<\/strong><\/td><td>\u2705 Serverless VPC access<\/td><td>\u2705 Yes<\/td><td>\u2705 Yes<\/td><\/tr><tr><td><strong>Authentication<\/strong><\/td><td>\u2705 IAM + IAP (OAuth2\/JWT)<\/td><td>\u2705 IAM + Cognito<\/td><td>\u2705 Azure AD, Managed Identity<\/td><\/tr><tr><td><strong>Logging &amp; Monitoring<\/strong><\/td><td>Cloud Logging, Cloud Trace, Cloud Monitoring<\/td><td>CloudWatch, X-Ray<\/td><td>Azure Monitor, Log Analytics<\/td><\/tr><tr><td><strong>Container Startup Time Limit<\/strong><\/td><td>15 min<\/td><td>No hard limit (but must be responsive)<\/td><td>30 min (default), configurable<\/td><\/tr><tr><td><strong>Max Request Timeout<\/strong><\/td><td>60 minutes<\/td><td>15 minutes<\/td><td>60 minutes<\/td><\/tr><tr><td><strong>Pricing Model<\/strong><\/td><td>Per-request (CPU, Memory, Time)<\/td><td>Per vCPU\/sec + GB memory used<\/td><td>Per vCPU\/sec + GB memory used<\/td><\/tr><tr><td><strong>Concurrency Handling<\/strong><\/td><td>\u2705 Configurable (default 80)<\/td><td>\u2705 Concurrent<\/td><td>\u2705 Configurable (1+ per instance)<\/td><\/tr><tr><td><strong>Supported Languages<\/strong><\/td><td>Any (via container)<\/td><td>Any (via container)<\/td><td>Any (via container)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Summary Table: When to Choose Which<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Use Case<\/th><th><strong>GCP Cloud Run<\/strong><\/th><th><strong>AWS App Runner<\/strong><\/th><th><strong>Azure Container Apps<\/strong><\/th><\/tr><\/thead><tbody><tr><td>Microservices &amp; APIs<\/td><td>\u2705 Best<\/td><td>\u2705 Good<\/td><td>\u2705 Best<\/td><\/tr><tr><td>Event-driven scaling (Kafka, Queues, etc.)<\/td><td>\u26a0\ufe0f Needs setup<\/td><td>\u26a0\ufe0f Limited<\/td><td>\u2705 KEDA + Event Triggers<\/td><\/tr><tr><td>Scale to zero (for cost savings)<\/td><td>\u2705 Native<\/td><td>\u274c Not supported<\/td><td>\u2705 Native<\/td><\/tr><tr><td>Request-based autoscaling<\/td><td>\u2705 High performance<\/td><td>\u2705 Native<\/td><td>\u2705 Native<\/td><\/tr><tr><td>GitHub to deployment workflow<\/td><td>\u2705 Via Cloud Build<\/td><td>\u2705 Native<\/td><td>\u2705 With GitHub Actions<\/td><\/tr><tr><td>Built-in traffic splitting between versions<\/td><td>\u2705 Yes<\/td><td>\u274c No<\/td><td>\u2705 Yes<\/td><\/tr><tr><td>Custom metrics and observability<\/td><td>\u2705 Cloud Monitoring<\/td><td>\u2705 CloudWatch<\/td><td>\u2705 Azure Monitor<\/td><\/tr><tr><td>Startup speed for cold container<\/td><td>\u26a1 Very fast<\/td><td>\u26a0\ufe0f Slower (~2s)<\/td><td>\u26a1 Fast (~500ms)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udfaf Conclusion<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Choose Google Cloud Run<\/strong> if:\n<ul class=\"wp-block-list\">\n<li>You need rapid startup, scale-to-zero, and clean traffic management.<\/li>\n\n\n\n<li>You are building microservices or event-driven APIs in a cost-efficient way.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Choose AWS App Runner<\/strong> if:\n<ul class=\"wp-block-list\">\n<li>You\u2019re in the AWS ecosystem and want a fully managed service for containerized web apps without configuring ECS.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Choose Azure Container Apps<\/strong> if:\n<ul class=\"wp-block-list\">\n<li>You need integrated KEDA event-driven scaling and you&#8217;re using Azure services like Azure Service Bus or Cosmos DB.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<p>Here\u2019s a comprehensive list of <strong>terminologies used in Google Cloud Run<\/strong>, with clear and concise explanations to help you understand and navigate Cloud Run effectively:<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 Google Cloud Run Terminologies<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>Term<\/strong><\/th><th><strong>Description<\/strong><\/th><\/tr><\/thead><tbody><tr><td><strong>Service<\/strong><\/td><td>A deployed containerized application that receives requests. A service can have multiple <strong>revisions<\/strong> over time.<\/td><\/tr><tr><td><strong>Revision<\/strong><\/td><td>An <strong>immutable snapshot<\/strong> of your service\u2019s configuration and container image. A new revision is created on each deploy or config change.<\/td><\/tr><tr><td><strong>Container Image<\/strong><\/td><td>The Docker image used to run your app. This is stored in <strong>Artifact Registry<\/strong> or <strong>Container Registry<\/strong>.<\/td><\/tr><tr><td><strong>Container Port<\/strong><\/td><td>Cloud Run expects the container to listen on <strong>port 8080<\/strong> by default (but it can be overridden).<\/td><\/tr><tr><td><strong>Traffic Splitting<\/strong><\/td><td>Allows you to split incoming traffic between multiple revisions (e.g., 90% to v1, 10% to v2 for canary deployments).<\/td><\/tr><tr><td><strong>Concurrency<\/strong><\/td><td>The number of simultaneous requests a single container instance can handle (default: 80).<\/td><\/tr><tr><td><strong>Autoscaling<\/strong><\/td><td>Cloud Run <strong>automatically scales<\/strong> instances up\/down based on request volume. You can set min\/max instances.<\/td><\/tr><tr><td><strong>Minimum Instances<\/strong><\/td><td>Keeps a certain number of <strong>warm container instances<\/strong> ready to serve traffic, reducing cold starts.<\/td><\/tr><tr><td><strong>Maximum Instances<\/strong><\/td><td>Limits how many container instances can be spun up to control resource usage and costs.<\/td><\/tr><tr><td><strong>Cold Start<\/strong><\/td><td>Delay that happens when a request arrives and no instances are ready. Reduced with <strong>min instances<\/strong>.<\/td><\/tr><tr><td><strong>Request Timeout<\/strong><\/td><td>The maximum time (default: 300s) a request is allowed to run. Configurable up to 3600s.<\/td><\/tr><tr><td><strong>Environment Variables<\/strong><\/td><td>Key-value pairs injected into your container at runtime (e.g., <code>DB_HOST<\/code>, <code>ENV=prod<\/code>).<\/td><\/tr><tr><td><strong>Cloud Run Job<\/strong><\/td><td>A <strong>non-HTTP<\/strong> workload (batch job, task, etc.) that runs to completion and does not listen for requests.<\/td><\/tr><tr><td><strong>Ingress Settings<\/strong><\/td><td>Determines <strong>who can access<\/strong> your service:\u2022 All (public)\u2022 Internal (only GCP)\u2022 Internal + Auth<\/td><\/tr><tr><td><strong>Authentication (IAM)<\/strong><\/td><td>Use <strong>IAM policies<\/strong> to allow or deny who can invoke a Cloud Run service.<\/td><\/tr><tr><td><strong>VPC Connector<\/strong><\/td><td>Allows your Cloud Run service to connect to <strong>VPC-hosted resources<\/strong> (e.g., Cloud SQL, Redis, etc.).<\/td><\/tr><tr><td><strong>Domain Mapping<\/strong><\/td><td>You can assign <strong>custom domains<\/strong> (e.g., <code>api.example.com<\/code>) and Cloud Run will manage SSL certs.<\/td><\/tr><tr><td><strong>Service Account<\/strong><\/td><td>Identity used by Cloud Run service to authenticate to other GCP APIs (e.g., Pub\/Sub, Storage).<\/td><\/tr><tr><td><strong>Logs (Cloud Logging)<\/strong><\/td><td>All stdout\/stderr logs from your container go to <strong>Cloud Logging<\/strong>.<\/td><\/tr><tr><td><strong>Metrics (Cloud Monitoring)<\/strong><\/td><td>Autoscaling, request count, latency metrics go to <strong>Cloud Monitoring<\/strong> for observability.<\/td><\/tr><tr><td><strong>Regions<\/strong><\/td><td>Cloud Run services are regional. Common regions: <code>us-central1<\/code>, <code>asia-northeast1<\/code>, etc.<\/td><\/tr><tr><td><strong>gcloud run<\/strong><\/td><td>Command-line tool (<code>gcloud run<\/code>) to deploy, describe, and manage Cloud Run services.<\/td><\/tr><tr><td><strong>Artifact Registry<\/strong><\/td><td>Modern replacement for Container Registry. Stores your container images.<\/td><\/tr><tr><td><strong>Cloud Build<\/strong><\/td><td>Often used to <strong>build and deploy images<\/strong> to Cloud Run via CI\/CD pipelines.<\/td><\/tr><tr><td><strong>Cloud Deploy<\/strong><\/td><td>A managed <strong>progressive delivery<\/strong> service for deploying to Cloud Run with approvals and rollbacks.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Visual Summary<\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Code\/Image  \u279c  Revision  \u279c  Service\n                       \u21b3 handles HTTP requests\n                       \u21b3 manages versions\n                       \u21b3 can split traffic\n                       \u21b3 autoscaled\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<p>Here\u2019s a <strong>step-by-step guide<\/strong> to get started with <strong>Google Cloud Run<\/strong>, whether you&#8217;re deploying a containerized microservice, API, or static app.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 Step-by-Step Guide to Getting Started with <strong>Google Cloud Run<\/strong><\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 <strong>Step 1: Set Up Your Environment<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1.1. <strong>Install the Google Cloud SDK<\/strong><\/h4>\n\n\n\n<p>\ud83d\udc49 <a href=\"https:\/\/cloud.google.com\/sdk\/docs\/install\" target=\"_blank\" rel=\"noopener\">https:\/\/cloud.google.com\/sdk\/docs\/install<\/a><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">gcloud init\n<\/code><\/span><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>Authenticate your account<\/li>\n\n\n\n<li>Select your GCP project<\/li>\n\n\n\n<li>Set a default region (e.g., <code>asia-northeast1<\/code>)<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">1.2. <strong>Enable Required APIs<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">gcloud<\/span> <span class=\"hljs-selector-tag\">services<\/span> <span class=\"hljs-selector-tag\">enable<\/span> <span class=\"hljs-selector-tag\">run<\/span><span class=\"hljs-selector-class\">.googleapis<\/span><span class=\"hljs-selector-class\">.com<\/span> <span class=\"hljs-selector-tag\">containerregistry<\/span><span class=\"hljs-selector-class\">.googleapis<\/span><span class=\"hljs-selector-class\">.com<\/span> <span class=\"hljs-selector-tag\">cloudbuild<\/span><span class=\"hljs-selector-class\">.googleapis<\/span><span class=\"hljs-selector-class\">.com<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 <strong>Step 2: Prepare Your Application<\/strong><\/h3>\n\n\n\n<p>You can use <strong>any language<\/strong> that runs in a container. Here&#8217;s an example with a basic <strong>Python Flask app<\/strong>:<\/p>\n\n\n\n<p><strong><code>app.py<\/code><\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">from<\/span> flask <span class=\"hljs-keyword\">import<\/span> Flask\napp = Flask(__name__)\n\n@app.route(<span class=\"hljs-string\">'\/'<\/span>)\ndef hello():\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">'Hello from Cloud Run!'<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong><code>requirements.txt<\/code><\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">flask==2.3.2\n<\/code><\/span><\/pre>\n\n\n<p><strong><code>Dockerfile<\/code><\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">FROM python:<span class=\"hljs-number\">3.11<\/span>-slim\nWORKDIR \/app\nCOPY . .\nRUN pip install -r requirements.txt\nCMD &#91;<span class=\"hljs-string\">\"gunicorn\"<\/span>, <span class=\"hljs-string\">\"-b\"<\/span>, <span class=\"hljs-string\">\":8080\"<\/span>, <span class=\"hljs-string\">\"app:app\"<\/span>]\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>\u26a0\ufe0f <strong>Important:<\/strong> Your app must listen on <strong>port 8080<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 <strong>Step 3: Build &amp; Push Your Image<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Option A: Using Google Cloud Build<\/h4>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">gcloud builds submit --tag gcr.io\/YOUR_PROJECT_ID\/hello-cloud-run\n<\/code><\/span><\/pre>\n\n\n<h4 class=\"wp-block-heading\">Option B: Using Docker + Artifact Registry<\/h4>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker build -t asia-northeast1-docker.pkg.dev\/YOUR_PROJECT_ID\/my-repo\/my-app .\ndocker push asia-northeast1-docker.pkg.dev\/YOUR_PROJECT_ID\/my-repo\/my-app\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 <strong>Step 4: Deploy to Cloud Run<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">gcloud run deploy hello-cloud-run \n  --image gcr.io\/YOUR_PROJECT_ID\/hello-cloud-run \n  --platform managed \n  --region asia-northeast1 \n  --allow-unauthenticated\n<\/code><\/span><\/pre>\n\n\n<p>You\u2019ll get a <strong>public HTTPS URL<\/strong> like:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">https:<span class=\"hljs-comment\">\/\/hello-cloud-run-xxxx.a.run.app<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 <strong>Step 5: Test Your Deployment<\/strong><\/h3>\n\n\n\n<p>Visit the URL in your browser or run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">curl https:<span class=\"hljs-comment\">\/\/hello-cloud-run-xxxx.a.run.app<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 <strong>Step 6: Monitor &amp; Observe<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Logs: <code>gcloud logs read --project=YOUR_PROJECT_ID<\/code><\/li>\n\n\n\n<li>Cloud Console:<br>Navigate to <strong>Cloud Run &gt; Services<\/strong> to:\n<ul class=\"wp-block-list\">\n<li>View logs<\/li>\n\n\n\n<li>Manage traffic &amp; revisions<\/li>\n\n\n\n<li>Configure environment variables<\/li>\n\n\n\n<li>Set min\/max instances<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 <strong>Optional: Add a Custom Domain<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to <strong>Cloud Run &gt; Domain Mapping<\/strong><\/li>\n\n\n\n<li>Add your domain (e.g., <code>app.example.com<\/code>)<\/li>\n\n\n\n<li>Update your DNS provider with the TXT + CNAME records<\/li>\n\n\n\n<li>TLS is provisioned automatically<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 <strong>Optional: Secure Access with IAM<\/strong><\/h3>\n\n\n\n<p>To make it <strong>private<\/strong> (authenticated only):<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">gcloud run services add-iam-policy-binding hello-cloud-run \n  --member=<span class=\"hljs-string\">\"user:someone@example.com\"<\/span> \n  --role=<span class=\"hljs-string\">\"roles\/run.invoker\"<\/span> \n  --region=asia-northeast1 \n  --platform=managed\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udce6 Summary<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Step<\/th><th>Task<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>Install SDK + Init Project<\/td><\/tr><tr><td>2<\/td><td>Create your containerized app<\/td><\/tr><tr><td>3<\/td><td>Build and push the container<\/td><\/tr><tr><td>4<\/td><td>Deploy to Cloud Run<\/td><\/tr><tr><td>5<\/td><td>Access and test it<\/td><\/tr><tr><td>6<\/td><td>Observe, log, and secure<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here\u2019s a comprehensive overview of Google Cloud Run, its features, top 10 use cases, and its advantages over other equivalent GCP services: \u2705 What is Google Cloud Run? Google Cloud&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-49634","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=49634"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49634\/revisions"}],"predecessor-version":[{"id":59004,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49634\/revisions\/59004"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=49634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=49634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=49634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}