jeffhollan / grpc-sample-dotnet

.NET application of a gRPC client and server, built for Azure Container Apps

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

gRPC Sample : .NET 6

View this sample in other languages

C# Go Java JavaScript Python

The following is a sample of a gRPC client calling another container running gRPC server to execute a SayHello call. The solution runs on Azure Container Apps.

Deploy the sample

Azure CLI

RESOURCE_GROUP="grpc-sample"
LOCATION="canadacentral"
LOG_ANALYTICS_WORKSPACE="aca-logs"
ACA_ENVIRONMENT="aca-env"

az extension add \
  --source https://workerappscliextension.blob.core.windows.net/azure-cli-extension/containerapp-0.2.0-py2.py3-none-any.whl
az provider register --namespace Microsoft.Web

az group create \
  --name $RESOURCE_GROUP \
  --location "$LOCATION"

az monitor log-analytics workspace create \
  --resource-group $RESOURCE_GROUP \
  --workspace-name $LOG_ANALYTICS_WORKSPACE

LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az monitor log-analytics workspace show --query customerId -g $RESOURCE_GROUP -n $LOG_ANALYTICS_WORKSPACE --out tsv`
LOG_ANALYTICS_WORKSPACE_CLIENT_SECRET=`az monitor log-analytics workspace get-shared-keys --query primarySharedKey -g $RESOURCE_GROUP -n $LOG_ANALYTICS_WORKSPACE --out tsv`

# Create the Container Apps Environment
az containerapp env create \
  --name $ACA_ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --logs-workspace-id $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
  --logs-workspace-key $LOG_ANALYTICS_WORKSPACE_CLIENT_SECRET \
  --location "$LOCATION"

# Create the gRPC backend internal service
az containerapp create \
  --name grpc-backend \
  --resource-group $RESOURCE_GROUP \
  --environment $ACA_ENVIRONMENT \
  --image ghcr.io/jeffhollan/grpc-sample-dotnet/grpc-backend:main \
  --ingress 'internal' \
  --target-port 8085 \
  --transport 'http2'

GRPC_SERVER_ADDRESS=$(az containerapp show \
  --resource-group $RESOURCE_GROUP \
  --name grpc-backend \
  --query configuration.ingress.fqdn -otsv)

# Create the HTTPS frontend gRPC client container
az containerapp create \
  --name https-frontend \
  --resource-group $RESOURCE_GROUP \
  --environment $ACA_ENVIRONMENT \
  --image ghcr.io/jeffhollan/grpc-sample-dotnet/https-frontend:main \
  --environment-variables GRPC_SERVER_ADDRESS=https://$GRPC_SERVER_ADDRESS \
  --target-port 80 \
  --ingress 'external' \
  --query configuration.ingress.fqdn

Try the solution

After deploying, get the FQDN of the https-frontend and call it and hit the /hello endpoint. It will call the gRPC backend (via gRPC) and return a message to the client.

About

.NET application of a gRPC client and server, built for Azure Container Apps


Languages

Language:C# 65.5%Language:Dockerfile 33.0%Language:Shell 1.5%