Configure GCP Regional Health Checks

The gcp:compute/regionHealthCheck:RegionHealthCheck resource, part of the Pulumi GCP provider, defines regional health checks that poll backend instances at specified intervals to determine whether they can handle traffic. This guide focuses on four capabilities: TCP and HTTP protocol checks, health check logging, threshold configuration, and gRPC service verification.

Health checks monitor backend instances and attach to load balancer backend services. The examples are intentionally small. Combine them with your own backend services and load balancer configuration.

Check TCP port availability with minimal configuration

Load balancers verify that backend instances accept TCP connections on specific ports without sending application-layer data.

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";

const tcp_region_health_check = new gcp.compute.RegionHealthCheck("tcp-region-health-check", {
    name: "tcp-region-health-check",
    timeoutSec: 1,
    checkIntervalSec: 1,
    tcpHealthCheck: {
        port: 80,
    },
});
import pulumi
import pulumi_gcp as gcp

tcp_region_health_check = gcp.compute.RegionHealthCheck("tcp-region-health-check",
    name="tcp-region-health-check",
    timeout_sec=1,
    check_interval_sec=1,
    tcp_health_check={
        "port": 80,
    })
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := compute.NewRegionHealthCheck(ctx, "tcp-region-health-check", &compute.RegionHealthCheckArgs{
			Name:             pulumi.String("tcp-region-health-check"),
			TimeoutSec:       pulumi.Int(1),
			CheckIntervalSec: pulumi.Int(1),
			TcpHealthCheck: &compute.RegionHealthCheckTcpHealthCheckArgs{
				Port: pulumi.Int(80),
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() => 
{
    var tcp_region_health_check = new Gcp.Compute.RegionHealthCheck("tcp-region-health-check", new()
    {
        Name = "tcp-region-health-check",
        TimeoutSec = 1,
        CheckIntervalSec = 1,
        TcpHealthCheck = new Gcp.Compute.Inputs.RegionHealthCheckTcpHealthCheckArgs
        {
            Port = 80,
        },
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.RegionHealthCheck;
import com.pulumi.gcp.compute.RegionHealthCheckArgs;
import com.pulumi.gcp.compute.inputs.RegionHealthCheckTcpHealthCheckArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var tcp_region_health_check = new RegionHealthCheck("tcp-region-health-check", RegionHealthCheckArgs.builder()
            .name("tcp-region-health-check")
            .timeoutSec(1)
            .checkIntervalSec(1)
            .tcpHealthCheck(RegionHealthCheckTcpHealthCheckArgs.builder()
                .port(80)
                .build())
            .build());

    }
}
resources:
  tcp-region-health-check:
    type: gcp:compute:RegionHealthCheck
    properties:
      name: tcp-region-health-check
      timeoutSec: 1
      checkIntervalSec: 1
      tcpHealthCheck:
        port: '80'

The tcpHealthCheck property configures port-based connectivity checks. The timeoutSec and checkIntervalSec properties control how long to wait for responses and how frequently to probe. Instances that don’t respond within the timeout are marked unhealthy after consecutive failures.

Probe HTTP endpoints for application health

Web applications expose HTTP endpoints that return status codes indicating readiness to serve traffic.

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";

const http_region_health_check = new gcp.compute.RegionHealthCheck("http-region-health-check", {
    name: "http-region-health-check",
    timeoutSec: 1,
    checkIntervalSec: 1,
    httpHealthCheck: {
        port: 80,
    },
});
import pulumi
import pulumi_gcp as gcp

http_region_health_check = gcp.compute.RegionHealthCheck("http-region-health-check",
    name="http-region-health-check",
    timeout_sec=1,
    check_interval_sec=1,
    http_health_check={
        "port": 80,
    })
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := compute.NewRegionHealthCheck(ctx, "http-region-health-check", &compute.RegionHealthCheckArgs{
			Name:             pulumi.String("http-region-health-check"),
			TimeoutSec:       pulumi.Int(1),
			CheckIntervalSec: pulumi.Int(1),
			HttpHealthCheck: &compute.RegionHealthCheckHttpHealthCheckArgs{
				Port: pulumi.Int(80),
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() => 
{
    var http_region_health_check = new Gcp.Compute.RegionHealthCheck("http-region-health-check", new()
    {
        Name = "http-region-health-check",
        TimeoutSec = 1,
        CheckIntervalSec = 1,
        HttpHealthCheck = new Gcp.Compute.Inputs.RegionHealthCheckHttpHealthCheckArgs
        {
            Port = 80,
        },
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.RegionHealthCheck;
import com.pulumi.gcp.compute.RegionHealthCheckArgs;
import com.pulumi.gcp.compute.inputs.RegionHealthCheckHttpHealthCheckArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var http_region_health_check = new RegionHealthCheck("http-region-health-check", RegionHealthCheckArgs.builder()
            .name("http-region-health-check")
            .timeoutSec(1)
            .checkIntervalSec(1)
            .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()
                .port(80)
                .build())
            .build());

    }
}
resources:
  http-region-health-check:
    type: gcp:compute:RegionHealthCheck
    properties:
      name: http-region-health-check
      timeoutSec: 1
      checkIntervalSec: 1
      httpHealthCheck:
        port: '80'

The httpHealthCheck property sends HTTP GET requests to the specified port. By default, it requests the root path ("/") and expects a 200 response. Instances returning error codes are marked unhealthy.

Enable health check logging for diagnostics

When troubleshooting backend failures, teams need visibility into probe results.

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";

const http_region_health_check = new gcp.compute.RegionHealthCheck("http-region-health-check", {
    name: "http-region-health-check",
    timeoutSec: 1,
    checkIntervalSec: 1,
    httpHealthCheck: {
        port: 80,
    },
    logConfig: {
        enable: true,
    },
});
import pulumi
import pulumi_gcp as gcp

http_region_health_check = gcp.compute.RegionHealthCheck("http-region-health-check",
    name="http-region-health-check",
    timeout_sec=1,
    check_interval_sec=1,
    http_health_check={
        "port": 80,
    },
    log_config={
        "enable": True,
    })
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := compute.NewRegionHealthCheck(ctx, "http-region-health-check", &compute.RegionHealthCheckArgs{
			Name:             pulumi.String("http-region-health-check"),
			TimeoutSec:       pulumi.Int(1),
			CheckIntervalSec: pulumi.Int(1),
			HttpHealthCheck: &compute.RegionHealthCheckHttpHealthCheckArgs{
				Port: pulumi.Int(80),
			},
			LogConfig: &compute.RegionHealthCheckLogConfigArgs{
				Enable: pulumi.Bool(true),
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() => 
{
    var http_region_health_check = new Gcp.Compute.RegionHealthCheck("http-region-health-check", new()
    {
        Name = "http-region-health-check",
        TimeoutSec = 1,
        CheckIntervalSec = 1,
        HttpHealthCheck = new Gcp.Compute.Inputs.RegionHealthCheckHttpHealthCheckArgs
        {
            Port = 80,
        },
        LogConfig = new Gcp.Compute.Inputs.RegionHealthCheckLogConfigArgs
        {
            Enable = true,
        },
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.RegionHealthCheck;
import com.pulumi.gcp.compute.RegionHealthCheckArgs;
import com.pulumi.gcp.compute.inputs.RegionHealthCheckHttpHealthCheckArgs;
import com.pulumi.gcp.compute.inputs.RegionHealthCheckLogConfigArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var http_region_health_check = new RegionHealthCheck("http-region-health-check", RegionHealthCheckArgs.builder()
            .name("http-region-health-check")
            .timeoutSec(1)
            .checkIntervalSec(1)
            .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()
                .port(80)
                .build())
            .logConfig(RegionHealthCheckLogConfigArgs.builder()
                .enable(true)
                .build())
            .build());

    }
}
resources:
  http-region-health-check:
    type: gcp:compute:RegionHealthCheck
    properties:
      name: http-region-health-check
      timeoutSec: 1
      checkIntervalSec: 1
      httpHealthCheck:
        port: '80'
      logConfig:
        enable: true

The logConfig property with enable set to true sends health check results to Cloud Logging. Each probe generates a log entry showing whether the instance responded successfully, helping diagnose intermittent failures or configuration issues.

Configure HTTP checks with custom paths and thresholds

Production health checks often need custom request paths, host headers, and threshold tuning.

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";

const http_region_health_check = new gcp.compute.RegionHealthCheck("http-region-health-check", {
    name: "http-region-health-check",
    description: "Health check via http",
    timeoutSec: 1,
    checkIntervalSec: 1,
    healthyThreshold: 4,
    unhealthyThreshold: 5,
    httpHealthCheck: {
        portName: "health-check-port",
        portSpecification: "USE_NAMED_PORT",
        host: "1.2.3.4",
        requestPath: "/mypath",
        proxyHeader: "NONE",
        response: "I AM HEALTHY",
    },
});
import pulumi
import pulumi_gcp as gcp

http_region_health_check = gcp.compute.RegionHealthCheck("http-region-health-check",
    name="http-region-health-check",
    description="Health check via http",
    timeout_sec=1,
    check_interval_sec=1,
    healthy_threshold=4,
    unhealthy_threshold=5,
    http_health_check={
        "port_name": "health-check-port",
        "port_specification": "USE_NAMED_PORT",
        "host": "1.2.3.4",
        "request_path": "/mypath",
        "proxy_header": "NONE",
        "response": "I AM HEALTHY",
    })
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := compute.NewRegionHealthCheck(ctx, "http-region-health-check", &compute.RegionHealthCheckArgs{
			Name:               pulumi.String("http-region-health-check"),
			Description:        pulumi.String("Health check via http"),
			TimeoutSec:         pulumi.Int(1),
			CheckIntervalSec:   pulumi.Int(1),
			HealthyThreshold:   pulumi.Int(4),
			UnhealthyThreshold: pulumi.Int(5),
			HttpHealthCheck: &compute.RegionHealthCheckHttpHealthCheckArgs{
				PortName:          pulumi.String("health-check-port"),
				PortSpecification: pulumi.String("USE_NAMED_PORT"),
				Host:              pulumi.String("1.2.3.4"),
				RequestPath:       pulumi.String("/mypath"),
				ProxyHeader:       pulumi.String("NONE"),
				Response:          pulumi.String("I AM HEALTHY"),
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() => 
{
    var http_region_health_check = new Gcp.Compute.RegionHealthCheck("http-region-health-check", new()
    {
        Name = "http-region-health-check",
        Description = "Health check via http",
        TimeoutSec = 1,
        CheckIntervalSec = 1,
        HealthyThreshold = 4,
        UnhealthyThreshold = 5,
        HttpHealthCheck = new Gcp.Compute.Inputs.RegionHealthCheckHttpHealthCheckArgs
        {
            PortName = "health-check-port",
            PortSpecification = "USE_NAMED_PORT",
            Host = "1.2.3.4",
            RequestPath = "/mypath",
            ProxyHeader = "NONE",
            Response = "I AM HEALTHY",
        },
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.RegionHealthCheck;
import com.pulumi.gcp.compute.RegionHealthCheckArgs;
import com.pulumi.gcp.compute.inputs.RegionHealthCheckHttpHealthCheckArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var http_region_health_check = new RegionHealthCheck("http-region-health-check", RegionHealthCheckArgs.builder()
            .name("http-region-health-check")
            .description("Health check via http")
            .timeoutSec(1)
            .checkIntervalSec(1)
            .healthyThreshold(4)
            .unhealthyThreshold(5)
            .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()
                .portName("health-check-port")
                .portSpecification("USE_NAMED_PORT")
                .host("1.2.3.4")
                .requestPath("/mypath")
                .proxyHeader("NONE")
                .response("I AM HEALTHY")
                .build())
            .build());

    }
}
resources:
  http-region-health-check:
    type: gcp:compute:RegionHealthCheck
    properties:
      name: http-region-health-check
      description: Health check via http
      timeoutSec: 1
      checkIntervalSec: 1
      healthyThreshold: 4
      unhealthyThreshold: 5
      httpHealthCheck:
        portName: health-check-port
        portSpecification: USE_NAMED_PORT
        host: 1.2.3.4
        requestPath: /mypath
        proxyHeader: NONE
        response: I AM HEALTHY

The requestPath property specifies which endpoint to probe (e.g., “/health” or “/ready”). The host property sets the HTTP Host header. The healthyThreshold and unhealthyThreshold properties control how many consecutive successes or failures trigger state changes. The portSpecification set to “USE_NAMED_PORT” allows referencing ports by name rather than number, useful when port assignments vary across instance groups.

Check gRPC service health with native protocol

Microservices using gRPC expose health check endpoints through the gRPC Health Checking Protocol.

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";

const grpc_region_health_check = new gcp.compute.RegionHealthCheck("grpc-region-health-check", {
    name: "grpc-region-health-check",
    timeoutSec: 1,
    checkIntervalSec: 1,
    grpcHealthCheck: {
        port: 443,
    },
});
import pulumi
import pulumi_gcp as gcp

grpc_region_health_check = gcp.compute.RegionHealthCheck("grpc-region-health-check",
    name="grpc-region-health-check",
    timeout_sec=1,
    check_interval_sec=1,
    grpc_health_check={
        "port": 443,
    })
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := compute.NewRegionHealthCheck(ctx, "grpc-region-health-check", &compute.RegionHealthCheckArgs{
			Name:             pulumi.String("grpc-region-health-check"),
			TimeoutSec:       pulumi.Int(1),
			CheckIntervalSec: pulumi.Int(1),
			GrpcHealthCheck: &compute.RegionHealthCheckGrpcHealthCheckArgs{
				Port: pulumi.Int(443),
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() => 
{
    var grpc_region_health_check = new Gcp.Compute.RegionHealthCheck("grpc-region-health-check", new()
    {
        Name = "grpc-region-health-check",
        TimeoutSec = 1,
        CheckIntervalSec = 1,
        GrpcHealthCheck = new Gcp.Compute.Inputs.RegionHealthCheckGrpcHealthCheckArgs
        {
            Port = 443,
        },
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.RegionHealthCheck;
import com.pulumi.gcp.compute.RegionHealthCheckArgs;
import com.pulumi.gcp.compute.inputs.RegionHealthCheckGrpcHealthCheckArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var grpc_region_health_check = new RegionHealthCheck("grpc-region-health-check", RegionHealthCheckArgs.builder()
            .name("grpc-region-health-check")
            .timeoutSec(1)
            .checkIntervalSec(1)
            .grpcHealthCheck(RegionHealthCheckGrpcHealthCheckArgs.builder()
                .port(443)
                .build())
            .build());

    }
}
resources:
  grpc-region-health-check:
    type: gcp:compute:RegionHealthCheck
    properties:
      name: grpc-region-health-check
      timeoutSec: 1
      checkIntervalSec: 1
      grpcHealthCheck:
        port: '443'

The grpcHealthCheck property sends gRPC health check RPCs to the specified port. This uses the standard gRPC health checking service, allowing load balancers to verify service readiness without HTTP translation.

Target specific gRPC services by name

When multiple gRPC services run on the same port, health checks can target specific services.

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";

const grpc_region_health_check = new gcp.compute.RegionHealthCheck("grpc-region-health-check", {
    name: "grpc-region-health-check",
    timeoutSec: 1,
    checkIntervalSec: 1,
    grpcHealthCheck: {
        portName: "health-check-port",
        portSpecification: "USE_NAMED_PORT",
        grpcServiceName: "testservice",
    },
});
import pulumi
import pulumi_gcp as gcp

grpc_region_health_check = gcp.compute.RegionHealthCheck("grpc-region-health-check",
    name="grpc-region-health-check",
    timeout_sec=1,
    check_interval_sec=1,
    grpc_health_check={
        "port_name": "health-check-port",
        "port_specification": "USE_NAMED_PORT",
        "grpc_service_name": "testservice",
    })
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := compute.NewRegionHealthCheck(ctx, "grpc-region-health-check", &compute.RegionHealthCheckArgs{
			Name:             pulumi.String("grpc-region-health-check"),
			TimeoutSec:       pulumi.Int(1),
			CheckIntervalSec: pulumi.Int(1),
			GrpcHealthCheck: &compute.RegionHealthCheckGrpcHealthCheckArgs{
				PortName:          pulumi.String("health-check-port"),
				PortSpecification: pulumi.String("USE_NAMED_PORT"),
				GrpcServiceName:   pulumi.String("testservice"),
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() => 
{
    var grpc_region_health_check = new Gcp.Compute.RegionHealthCheck("grpc-region-health-check", new()
    {
        Name = "grpc-region-health-check",
        TimeoutSec = 1,
        CheckIntervalSec = 1,
        GrpcHealthCheck = new Gcp.Compute.Inputs.RegionHealthCheckGrpcHealthCheckArgs
        {
            PortName = "health-check-port",
            PortSpecification = "USE_NAMED_PORT",
            GrpcServiceName = "testservice",
        },
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.RegionHealthCheck;
import com.pulumi.gcp.compute.RegionHealthCheckArgs;
import com.pulumi.gcp.compute.inputs.RegionHealthCheckGrpcHealthCheckArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var grpc_region_health_check = new RegionHealthCheck("grpc-region-health-check", RegionHealthCheckArgs.builder()
            .name("grpc-region-health-check")
            .timeoutSec(1)
            .checkIntervalSec(1)
            .grpcHealthCheck(RegionHealthCheckGrpcHealthCheckArgs.builder()
                .portName("health-check-port")
                .portSpecification("USE_NAMED_PORT")
                .grpcServiceName("testservice")
                .build())
            .build());

    }
}
resources:
  grpc-region-health-check:
    type: gcp:compute:RegionHealthCheck
    properties:
      name: grpc-region-health-check
      timeoutSec: 1
      checkIntervalSec: 1
      grpcHealthCheck:
        portName: health-check-port
        portSpecification: USE_NAMED_PORT
        grpcServiceName: testservice

The grpcServiceName property specifies which service to check when multiple services share a port. This allows fine-grained health monitoring of individual microservices in a multi-service deployment.

Beyond these examples

These snippets focus on specific health check features: protocol-specific health checks (TCP, HTTP, HTTPS, HTTP/2, gRPC), threshold tuning and timing configuration, and named ports and custom request/response validation. They’re intentionally minimal rather than full load balancing configurations.

The examples assume pre-existing infrastructure such as a GCP project and region, backend instances or instance groups to monitor, and load balancer configuration (health checks attach to backend services). They focus on configuring the health check rather than provisioning the complete load balancing stack.

To keep things focused, common health check patterns are omitted, including:

  • SSL/TLS health checks (sslHealthCheck, grpcTlsHealthCheck)
  • Proxy header configuration for client IP preservation
  • Response validation with custom strings
  • Integration with backend services and load balancers

These omissions are intentional: the goal is to illustrate how each health check protocol is wired, not provide drop-in load balancing modules. See the RegionHealthCheck resource reference for all available configuration options.

Let's configure GCP Regional Health Checks

Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.

Try Pulumi Cloud for FREE

Frequently Asked Questions

Configuration & Validation
Why am I getting an error that timeoutSec is invalid?
The timeoutSec value cannot be greater than checkIntervalSec. Ensure your timeout is less than or equal to the check interval.
What are the default values for health check timing?
Both timeoutSec and checkIntervalSec default to 5 seconds. The healthyThreshold and unhealthyThreshold both default to 2 consecutive checks.
What naming rules must I follow for health checks?
Names must be 1-63 characters, start with a lowercase letter, and contain only lowercase letters, digits, and hyphens. The last character cannot be a dash.
Health Check Types & Protocols
What health check protocols are supported?
You can use TCP, SSL, HTTP, HTTPS, HTTP/2, gRPC, or gRPC with TLS. Configure the corresponding health check property (tcpHealthCheck, httpHealthCheck, etc.).
Can I customize the health check request and response?
Yes. For TCP and SSL checks, use request and response fields. For HTTP-based checks, configure requestPath, host, and response fields.
How do I configure gRPC health checks?
Use grpcHealthCheck for standard gRPC or grpcTlsHealthCheck for gRPC with TLS. Optionally specify grpcServiceName to check a specific service.
Port Configuration
What's the difference between port and portName?
Use port for fixed port numbers (e.g., 80, 443). Use portName with portSpecification: USE_NAMED_PORT to reference a named port defined on your backend service.
Immutability & Updates
What properties can't I change after creating a health check?
The name, project, and region properties are immutable. Changing any of these requires replacing the resource.
Advanced Features
How do I enable logging for health checks?
Configure logConfig with enable: true to log health check probe results.

Using a different cloud?

Explore networking guides for other cloud providers: