Skip to content

Latest commit

 

History

History

getting-started-grpc

Endpoints Getting Started with gRPC & Ruby Quickstart

It is assumed that you have a working Ruby environment and a Google Cloud account and SDK configured.

  1. Install dependencies:

    bundle
    gem install grpc-tools
  2. Test running the code, optional:

    # In the background or another terminal run the server:
    bundle exec ruby greeter_server.rb
    
    # Check the client parameters:
    bundle exec ruby greeter_client.rb
    
    # Run the client
    bundle exec ruby greeter_client.rb localhost:50051 test
  3. The gRPC Services have already been generated in lib/. If you change the proto, or just wish to regenerate these files, run:

    grpc_tools_ruby_protoc -I protos --ruby_out=lib --grpc_out=lib protos/helloworld.proto
  4. Generate the file descriptor set out.pb from the proto file.

    grpc_tools_ruby_protoc --include_imports --include_source_info protos/helloworld.proto --descriptor_set_out out.pb
  5. Edit, api_config.yaml. Replace MY_PROJECT_ID with your project id.

  6. Deploy your service config to Service Management:

    gcloud endpoints services deploy out.pb api_config.yaml
    # The Config ID should be printed out, looks like: 2017-02-01r0, remember this
    
    # set your project to make commands easier
    GOOGLE_CLOUD_PROJECT=<Your Project ID>
    
    # Print out your Service name again, in case you missed it
    gcloud endpoints services configs list --service hellogrpc.endpoints.${GOOGLE_CLOUD_PROJECT}.cloud.goog
  7. Also get an API key from the Console's API Manager for use in the client later. (https://console.cloud.google.com/apis/credentials)

  8. Build a docker image for your gRPC server, store in your Registry

    gcloud container builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/ruby-grpc-hello:1.0 .
  9. Either deploy to Google Compute Engine (GCE) below or Google Container Engine (GKE) further down.

Google Compute Engine

  1. Create your instance and ssh in.

    gcloud compute instances create grpc-host --image-family gci-stable --image-project google-containers --tags=http-server
    gcloud compute ssh grpc-host
  2. Set some variables to make commands easier

    GOOGLE_CLOUD_PROJECT=$(curl -s "http://metadata.google.internal/computeMetadata/v1/project/project-id" -H "Metadata-Flavor: Google")
    SERVICE_NAME=hellogrpc.endpoints.${GOOGLE_CLOUD_PROJECT}.cloud.goog
  3. Pull your credentials to access Container Registry, and run your gRPC server container

    /usr/share/google/dockercfg_update.sh
    docker run -d --name=grpc-hello gcr.io/${GOOGLE_CLOUD_PROJECT}/ruby-grpc-hello:1.0
  4. Run the Endpoints proxy

    docker run --detach --name=esp \
        -p 80:9000 \
        --link=grpc-hello:grpc-hello \
        gcr.io/endpoints-release/endpoints-runtime:1 \
        -s ${SERVICE_NAME} \
        --rollout_strategy managed \
        -P 9000 \
        -a grpc://grpc-hello:50051
  5. Back on your local machine, get the external IP of your GCE instance.

    gcloud compute instances list
  6. Run the client

    bundle exec ruby greeter_client.rb <IP of GCE Instance>:80 <API Key from Console>
  7. Cleanup

    gcloud compute instances delete grpc-host

Google Container Engine

  1. Create a cluster

    gcloud container clusters create my-cluster
  2. Edit deployment.yaml. Replace SERVICE_NAME and GOOGLE_CLOUD_PROJECT with your values.

  3. Deploy to GKE

    kubectl create -f ./deployment.yaml
  4. Get IP of load balancer, run until you see an External IP.

    kubectl get svc grpc-hello
  5. Run the client

    bundle exec ruby greeter_client.rb <IP of GKE LoadBalancer>:80 <API Key from Console>
  6. Cleanup

    gcloud container clusters delete my-cluster