It is assumed that you have a working gRPC, ProtoBuf and Java environment, a Google Cloud account and SDK configured.
-
Build the code:
./gradlew build
-
Test running the code, optional:
# In the background or another terminal run the server: java -jar server/build/libs/server.jar # Check the client parameters: java -jar client/build/libs/client.jar --help # Run the client java -jar client/build/libs/client.jar --greetee 'Endpoints!'
-
Generate the
out.pbfrom the proto file.protoc --include_imports --include_source_info api/src/main/proto/helloworld.proto --descriptor_set_out out.pb
-
Edit,
api_config.yaml. ReplaceMY_PROJECT_IDwith your project id. -
Deploy your service config to Service Management:
gcloud service-management 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 GCLOUD_PROJECT=<Your Project ID> # Print out your Config ID again, in case you missed it gcloud service-management configs list --service hellogrpc.endpoints.${GCLOUD_PROJECT}.cloud.goog
-
Also get an API key from the Console's API Manager for use in the client later. (https://console.cloud.google.com/apis/credentials)
-
Build a docker image for your gRPC server, store in your Registry
gcloud container builds submit --tag gcr.io/${GCLOUD_PROJECT}/java-grpc-hello:1.0 .
-
Either deploy to GCE (below) or GKE (further down)
-
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
-
Set some variables to make commands easier
GCLOUD_PROJECT=$(curl -s "http://metadata.google.internal/computeMetadata/v1/project/project-id" -H "Metadata-Flavor: Google") SERVICE_NAME=hellogrpc.endpoints.${GCLOUD_PROJECT}.cloud.goog SERVICE_CONFIG_ID=<Your Config ID>
-
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/${GCLOUD_PROJECT}/java-grpc-hello:1.0 -
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} \ -v ${SERVICE_CONFIG_ID} \ -P 9000 \ -a grpc://grpc-hello:50051 -
Back on your local machine, get the external IP of your GCE instance.
gcloud compute instances list
-
Run the client
java -jar client/build/libs/client.jar --host <IP of GCE Instance>:80 --api_key <API Key from Console>
-
Create a cluster
gcloud container clusters create my-cluster
-
Edit
container-engine.yaml. ReplaceSERVICE_NAME,SERVICE_CONFIG_ID, andGCLOUD_PROJECTwith your values. -
Deploy to GKE
kubectl create -f ./container-engine.yaml
-
Get IP of load balancer, run until you see an External IP.
kubectl get svc grpc-hello
-
Run the client
java -jar client/build/libs/client.jar --host <IP of GKE LoadBalancer>:80 --api_key <API Key from Console>