0
0
GCPcloud~7 mins

Backend services and backend buckets in GCP - Commands & Configuration

Choose your learning style9 modes available
Introduction
When you want to deliver content or services on the internet, you need a way to connect users to your resources. Backend services and backend buckets help you manage and serve your app or website content efficiently by linking your storage or compute resources to a load balancer.
When you want to serve static website files stored in a Google Cloud Storage bucket through a load balancer.
When you need to distribute traffic to multiple virtual machine instances running your backend application.
When you want to cache content closer to users by using a backend bucket with a CDN.
When you want to control how traffic is routed to your backend resources based on health checks.
When you want to combine multiple backend services and buckets under one global load balancer.
Config File - backend-service.yaml
backend-service.yaml
apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeBackendService
metadata:
  name: example-backend-service
spec:
  protocol: HTTP
  backends:
  - group: projects/my-project/zones/us-central1-a/instanceGroups/example-instance-group
  healthChecks:
  - projects/my-project/global/healthChecks/example-health-check
  timeoutSec: 30
  connectionDraining:
    drainingTimeoutSec: 300
---
apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeBackendBucket
metadata:
  name: example-backend-bucket
spec:
  bucketName: example-static-content-bucket
  enableCdn: true
  cdnPolicy:
    cacheMode: CACHE_ALL_STATIC
    defaultTtl: 3600
    maxTtl: 86400
    clientTtl: 3600

This file defines two resources:

  • ComputeBackendService: Connects a load balancer to a group of VM instances. It includes protocol, backend instance group, health checks, and connection draining settings.
  • ComputeBackendBucket: Connects a load balancer to a Cloud Storage bucket to serve static content. It enables CDN with caching policies for faster delivery.
Commands
This command creates a backend service named 'example-backend-service' using HTTP protocol and links it to a health check. The --global flag means it is for a global load balancer.
Terminal
gcloud compute backend-services create example-backend-service --protocol=HTTP --health-checks=example-health-check --global
Expected OutputExpected
Created [https://www.googleapis.com/compute/v1/projects/my-project/global/backendServices/example-backend-service].
--protocol - Specifies the protocol used by the backend service.
--health-checks - Associates health checks to monitor backend health.
--global - Creates a global backend service for global load balancing.
This command adds an instance group as a backend to the previously created backend service. It tells the load balancer where to send traffic.
Terminal
gcloud compute backend-services add-backend example-backend-service --instance-group=example-instance-group --instance-group-zone=us-central1-a --global
Expected OutputExpected
Updated [https://www.googleapis.com/compute/v1/projects/my-project/global/backendServices/example-backend-service].
--instance-group - Specifies the instance group to add as backend.
--instance-group-zone - Specifies the zone of the instance group.
--global - Indicates the backend service is global.
This command creates a backend bucket named 'example-backend-bucket' linked to a Cloud Storage bucket and enables CDN for faster content delivery.
Terminal
gcloud compute backend-buckets create example-backend-bucket --gcs-bucket-name=example-static-content-bucket --enable-cdn
Expected OutputExpected
Created [https://www.googleapis.com/compute/v1/projects/my-project/global/backendBuckets/example-backend-bucket].
--gcs-bucket-name - Specifies the Cloud Storage bucket to use.
--enable-cdn - Enables Cloud CDN for the backend bucket.
This command shows details of the backend service to verify its configuration and backends.
Terminal
gcloud compute backend-services describe example-backend-service --global
Expected OutputExpected
creationTimestamp: '2024-06-01T12:00:00.000-07:00' description: '' healthChecks: - https://www.googleapis.com/compute/v1/projects/my-project/global/healthChecks/example-health-check name: example-backend-service protocol: HTTP backends: - group: https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/instanceGroups/example-instance-group selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/backendServices/example-backend-service timeoutSec: 30 connectionDraining: drainingTimeoutSec: 300
--global - Specifies the backend service is global.
Key Concept

Backend services connect load balancers to compute resources, while backend buckets connect load balancers to storage buckets for serving static content.

Common Mistakes
Not specifying the correct zone when adding an instance group to a backend service.
The load balancer cannot find the instance group without the zone, so traffic routing fails.
Always include the --instance-group-zone flag with the correct zone when adding instance groups.
Creating a backend bucket without enabling CDN when fast content delivery is needed.
Without CDN, content delivery can be slower and less efficient for users far from the bucket location.
Use the --enable-cdn flag to enable Cloud CDN for backend buckets serving static content.
Forgetting to create or link a health check to the backend service.
Without health checks, the load balancer cannot detect unhealthy backends and may send traffic to them.
Create a health check and associate it with the backend service during creation.
Summary
Create backend services to connect load balancers to VM instance groups with health checks.
Add instance groups to backend services specifying the correct zone.
Create backend buckets to serve static content from Cloud Storage with optional CDN.
Use commands to verify backend service configurations and ensure proper traffic routing.