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:2
Siga 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:2
Anote 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.com
gcloud 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.proto
do 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_path
está 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_path
para que o compilador pesquise o diretório em que salvoubookstore.proto
.
- Salve uma cópia de
-
Crie um arquivo de texto chamado
api_config.yaml
no 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
name
precisa 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
address
na 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 env
source env/bin/activate
pip3 install -r requirements.txt
Envie uma solicitação à API de amostra:
python3 bookstore_client.py --host=DEFAULT_HOSTNAME --port 443 --use_tls true
Especifique a propriedade
defaultHostname
do 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.