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 projeto do Google Cloud .
- 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.
- Para evitar cobranças na sua conta do Google Cloud . Consulte Limpeza.
Antes de começar
No console do Google Cloud , acesse a página Painel e selecione ou crie um projeto do Google Cloud .
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 Google Cloud CLI.
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 |
Use os seguintes comandos para ativar esses serviç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 se refere 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
namedeve estar no mesmo nível detype. - No campo
name, um serviço chamado*.apigateway.PROJECT_ID.cloud.googem que PROJECT_ID é o nome do ID do projeto do 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:
onde:gcloud api-gateway api-configs create CONFIG_ID \ --api=API_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;
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
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 Google Cloud região do gateway implantado.
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
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 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
Veja os gráficos de atividades da API na página Gateway de API no Google Cloud console. Clique na sua API para ver os respectivos 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 console doGoogle 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, também é possível excluir o projeto do Google Cloud usado neste tutorial.