/cloudrunner-go

☁️🏃 Get up and running with Go on Google Cloud.

Primary LanguageGoMIT LicenseMIT

Cloud Runner

Get up and running with Go and gRPC on Google Cloud Platform, with this lightweight, opinionated, batteries-included service SDK.

Features

Run your application with cloudrunner.Run, and you get:

To help you build gRPC microservices, you also get:

Get up and running

Install the package:

$ go get go.einride.tech/cloudrunner

Try out a minimal example:

package main

import (
	"context"
	"log"

	"go.einride.tech/cloudrunner"
	"google.golang.org/grpc/health"
	"google.golang.org/grpc/health/grpc_health_v1"
)

func main() {
	if err := cloudrunner.Run(func(ctx context.Context) error {
		cloudrunner.Logger(ctx).Info("hello world")
		grpcServer := cloudrunner.NewGRPCServer(ctx)
		healthServer := health.NewServer()
		grpc_health_v1.RegisterHealthServer(grpcServer, healthServer)
		return cloudrunner.ListenGRPC(ctx, grpcServer)
	}); err != nil {
		log.Fatal(err)
	}
}

Configuration

The service is configured with environment variables.

When the service is running on GCE, all built-in integrations are turned on by default.

Service-specific config is supported out of the box.

Invoke your service with -help to show available configuration.

Usage of grpc-server:

  -config string
    	load environment from a YAML service specification
  -help
    	show help then exit
  -validate
    	validate config then exit

Runtime configuration of grpc-server:

CONFIG         ENV                                      TYPE                            DEFAULT                ON GCE
cloudrunner    PORT                                     int                             8080                   
cloudrunner    K_SERVICE                                string                                                 
cloudrunner    K_REVISION                               string                                                 
cloudrunner    K_CONFIGURATION                          string                                                 
cloudrunner    CLOUD_RUN_JOB                            string                                                 
cloudrunner    CLOUD_RUN_EXECUTION                      string                                                 
cloudrunner    CLOUD_RUN_TASK_INDEX                     int                                                    
cloudrunner    CLOUD_RUN_TASK_ATTEMPT                   int                                                    
cloudrunner    CLOUD_RUN_TASK_COUNT                     int                                                    
cloudrunner    GOOGLE_CLOUD_PROJECT                     string                                                 
cloudrunner    RUNTIME_SERVICEACCOUNT                   string                                                 
cloudrunner    SERVICE_VERSION                          string                                                 
cloudrunner    LOGGER_DEVELOPMENT                       bool                            true                   false
cloudrunner    LOGGER_LEVEL                             zapcore.Level                   debug                  info
cloudrunner    LOGGER_REPORTERRORS                      bool                                                   true
cloudrunner    PROFILER_ENABLED                         bool                                                   true
cloudrunner    PROFILER_MUTEXPROFILING                  bool                                                   
cloudrunner    PROFILER_ALLOCFORCEGC                    bool                            true                   
cloudrunner    TRACEEXPORTER_ENABLED                    bool                                                   true
cloudrunner    TRACEEXPORTER_TIMEOUT                    time.Duration                   10s                    
cloudrunner    TRACEEXPORTER_SAMPLEPROBABILITY          float64                         0.01                   
cloudrunner    METRICEXPORTER_ENABLED                   bool                                                   false
cloudrunner    METRICEXPORTER_INTERVAL                  time.Duration                   60s                    
cloudrunner    METRICEXPORTER_RUNTIMEINSTRUMENTATION    bool                                                   true
cloudrunner    METRICEXPORTER_HOSTINSTRUMENTATION       bool                                                   true
cloudrunner    METRICEXPORTER_OPENCENSUSPRODUCER        bool                            false                  
cloudrunner    SERVER_TIMEOUT                           time.Duration                   290s                   
cloudrunner    CLIENT_TIMEOUT                           time.Duration                   10s                    
cloudrunner    CLIENT_RETRY_ENABLED                     bool                            true                   
cloudrunner    CLIENT_RETRY_INITIALBACKOFF              time.Duration                   200ms                  
cloudrunner    CLIENT_RETRY_MAXBACKOFF                  time.Duration                   60s                    
cloudrunner    CLIENT_RETRY_MAXATTEMPTS                 int                             5                      
cloudrunner    CLIENT_RETRY_BACKOFFMULTIPLIER           float64                         2                      
cloudrunner    CLIENT_RETRY_RETRYABLESTATUSCODES        []codes.Code                    Unavailable,Unknown    
cloudrunner    REQUESTLOGGER_MESSAGESIZELIMIT           int                                                    1024
cloudrunner    REQUESTLOGGER_CODETOLEVEL                map[codes.Code]zapcore.Level                           
cloudrunner    REQUESTLOGGER_STATUSTOLEVEL              map[int]zapcore.Level                                  
cloudrunner    SHUTDOWNDELAY                            time.Duration                                          

Build-time configuration of grpc-server:

LDFLAG                                                     TYPE      VALUE
go.einride.tech/cloudrunner/cloudruntime.serviceVersion    string