Primeiros passos com o gateway de API e o Cloud Run para gRPC
Nesta página, mostramos como configurar o gateway de API para gerenciar e proteger um serviço de back-end do Cloud Run com gRPC.
Lista de tarefas
Ao seguir o tutorial, use a lista de tarefas abaixo. Todas as tarefas são necessárias para implantar um gateway de API no serviço de back-end do Cloud Run com gRPC.
- Crie ou selecione um Google Cloud projeto.
- Se você não implantou seu próprio Cloud Run, implante um serviço gRPC de back-end de amostra. Consulte a etapa 7 em Antes de começar.
- Ative os serviços de gateway de API obrigatórios.
- Crie um documento de configuração da API gRPC que descreva sua API e configure as rotas para o Cloud Run. Consulte Como configurar uma configuração de API com gRPC.
- Implante um gateway de API usando a configuração de API. Consulte Como implantar um gateway de API.
- Teste a implantação da API enviando uma solicitação. Consulte Como enviar uma solicitação à API.
- Rastreie a atividade para seus serviços. Consulte Como rastrear a atividade da API.
- Evite cobranças na sua conta do Google Cloud . Consulte Limpeza.
Antes de começar
No Google Cloud console, acesse a página Painel e selecione ou crie um Google Cloud projeto.
Verifique se o faturamento foi ativado para o projeto.
Anote o ID do projeto, porque ele será necessário mais tarde. No restante desta página, esse ID de projeto é chamado de PROJECT_ID.
Anote o número do projeto, porque ele será necessário mais tarde. No restante desta página, esse número de projeto é chamado de PROJECT_NUMBER.
Faça o download e instale a CLI do Google Cloud.
Siga as etapas no Guia de início rápido do gRPC para Python (em inglês) para instalar o gRPC e as ferramentas dele.
Implante o serviço de back-end gRPC do Cloud Run de python-grpc-bookstore-server para usar com este tutorial. O serviço gRPC usa a seguinte imagem de contêiner:
gcr.io/endpointsv2/python-grpc-bookstore-server:2Siga as etapas em Início rápido: implantação de um contêiner pré-agrupado de exemplo para implantar o serviço. Substitua a imagem do contêiner especificada nesse início rápido com
gcr.io/endpointsv2/python-grpc-bookstore-server:2Anote o URL do serviço, a região e o ID do projeto em que o serviço foi implantado.
Como ativar serviços obrigatórios
A API Gateway requer a ativação dos seguintes serviços do Google:
| Nome | Nome |
|---|---|
apigateway.googleapis.com |
API Gateway |
servicemanagement.googleapis.com |
Service Management API |
servicecontrol.googleapis.com |
API Service Control |
Para confirmar que os serviços obrigatórios estão ativados:
gcloud services list
Se você não encontrar os serviços necessários listados, ative-os:
gcloud services enable apigateway.googleapis.comgcloud services enable servicemanagement.googleapis.comgcloud services enable servicecontrol.googleapis.com
Para mais informações sobre os serviços do gcloud, consulte
serviços gcloud.
Como criar uma configuração de API com gRPC
A amostra bookstore-grpc
contém os arquivos necessários para fazer cópias locais e configurações.
- Crie um arquivo descritor protobuf autocontido a partir do seu arquivo de serviço
.proto:- Salve uma cópia de
bookstore.protodo repositório de exemplo no seu diretório de trabalho atual. Esse arquivo define a API do serviço Bookstore. - Crie o seguinte diretório no diretório de trabalho:
mkdir generated_pb2 - Crie o arquivo de descritor,
api_descriptor.pb, usando o compilador de buffers de protocoloprotoc. Execute o seguinte comando no diretório onde você salvoubookstore.proto:python3 -m grpc_tools.protoc \ --include_imports \ --include_source_info \ --proto_path=. \ --descriptor_set_out=api_descriptor.pb \ --python_out=generated_pb2 \ --grpc_python_out=generated_pb2 \ bookstore.proto
No comando anterior,
--proto_pathestá definido como o diretório de trabalho atual. No ambiente da versão do gRPC, caso você use um diretório diferente para arquivos de entrada.proto, mude--proto_pathpara que o compilador pesquise o diretório em que salvoubookstore.proto.
- Salve uma cópia de
-
Crie um arquivo de texto chamado
api_config.yamlno diretório de trabalho atual (o mesmo diretório que contémbookstore.proto). Por conveniência, esta página refere-se ao documento de configuração da API gRPC pelo nome do arquivo, mas você pode nomear algo diferente, se preferir. Adicione o seguinte conteúdo ao arquivo: O recuo é importante para o formato yaml. Por exemplo, o campo# The configuration schema is defined by the service.proto file. # https://github.com/googleapis/googleapis/blob/master/google/api/service.proto type: google.api.Service config_version: 3 name: "*.apigateway.PROJECT_ID.cloud.goog" title: API Gateway + Cloud Run gRPC apis: - name: endpoints.examples.bookstore.Bookstore usage: rules: # ListShelves methods can be called without an API Key. - selector: endpoints.examples.bookstore.Bookstore.ListShelves allow_unregistered_calls: true backend: rules: - selector: "*" address: grpcs://python-grpc-bookstore-server-HASH-uc.a.run.app
nameprecisa estar no mesmo nível detype. - No campo
name, um serviço chamado*.apigateway.PROJECT_ID.cloud.goog, em que PROJECT_ID é o nome do ID do projeto Google Cloud . No campo
addressna seçãobackend.rules, substitua grpcs://python-grpc-bookstore-server-HASH-uc.a.run.app pelo URL real do serviço de back-end gRPC Cloud Run python-grpc-bookstore-server, em que HASH é o código hash exclusivo gerado quando você criou o serviço.Neste exemplo, presumimos que você esteja usando o serviço de back-end gRPC Bookstore criado em Antes de começar. Se necessário, substitua esse valor pelo URL do serviço Cloud Run.
- Salve o documento de configuração da API gRPC.
- Crie a configuração da API:
em que:gcloud api-gateway api-configs create CONFIG_ID \ --api=API_ID --project=PROJECT_ID \ --grpc-files=api_descriptor.pb,api_config.yaml
- CONFIG_ID especifica o nome da configuração da API;
- API_ID especifica o nome da sua API;
- PROJECT_ID especifica o nome do projeto Google Cloud .
gcloud api-gateway api-configs create grpc-config \ --api=grpc-test --project=my-test-project \ --grpc-files=api_descriptor.pb,api_config.yaml
Como implantar um gateway de API
Para implantar a configuração da API gRPC em um gateway, execute o seguinte comando:
gcloud api-gateway gateways create GATEWAY_ID \ --api=API_ID --api-config=CONFIG_ID \ --location=GCP_REGION --project=PROJECT_ID
onde:
- GATEWAY_ID especifica o nome do gateway.
- API_ID especifica o nome da API Gateway associada à API.
- CONFIG_ID especifica o nome da configuração da API implantada no gateway;
GCP_REGION é a regiãoGoogle Cloud do gateway implantado.
PROJECT_ID especifica o nome do projeto Google Cloud .
Exemplo:
gcloud api-gateway gateways create bookstore-grpc \ --api=grpc-test --api-config=grpc-config \ --location=us-central1 --project=my-project
Após a conclusão, o comando a seguir pode exibir detalhes sobre o gateway:
gcloud api-gateway gateways describe GATEWAY_ID \ --location=GCP_REGION --project=PROJECT_ID
Observe o valor da propriedade defaultHostname na saída deste comando. Esta é a parte do nome do host do URL do gateway que você usará para testar a implantação na próxima etapa.
Exemplo:
https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev
Como enviar uma solicitação à API
Para enviar solicitações à API de amostra, use um cliente gRPC de amostra escrito em Python.
Clone o repositório do Git em que o código do cliente gRPC está hospedado:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Altere o diretório de trabalho:
cd python-docs-samples/endpoints/bookstore-grpc/
Instale as dependências:
pip3 install virtualenv
virtualenv envsource env/bin/activatepip3 install -r requirements.txtEnvie uma solicitação à API de amostra:
python3 bookstore_client.py --host=DEFAULT_HOSTNAME --port 443 --use_tls true
Especifique a propriedade
defaultHostnamedo seu gateway em DEFAULT_HOSTNAME, sem o identificador de protocolo. Exemplo:python3 bookstore_client.py --host=my-gateway-a12bcd345e67f89g0h.uc.gateway.dev --port 443 --use_tls true
Rastrear a atividade da API
Confira os gráficos de atividade da API na página Gateway de API no consoleGoogle Cloud . Clique na sua API para conferir os gráficos de atividade na página Visão geral. Talvez leve alguns instantes para a solicitação aparecer nos gráficos.
Verifique os registros de solicitações da API na página "Visualizador de registros". O link para a página do Explorador de registros pode ser encontrado na página do Gateway de API no consoleGoogle Cloud .
Na página "API Gateway", faça o seguinte
- Selecione a API a ser visualizada.
- Clique na guia Details.
- Clique no link em Registros.
Você acabou de implantar e testar uma API no gateway de API com o gRPC.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste guia de início rápido, faça o seguinte:
Como alternativa, você também pode excluir o projeto Google Cloud usado neste tutorial.