Skip to content

einride/cloudrunner-go

Repository files navigation

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