Este tutorial mostra como implementar um exemplo simples de um serviço gRPC com o Extensible Service Proxy V2 (ESPv2) num grupo de instâncias gerido.
Este tutorial usa a versão Python do exemplo bookstore-grpc. Consulte a secção O que se segue para ver exemplos de gRPC noutros idiomas.
Para uma vista geral do Cloud Endpoints, consulte os artigos Acerca dos Endpoints e Arquitetura dos Endpoints.
Objetivos
Use a seguinte lista de tarefas de alto nível à medida que avança no tutorial. Todas as tarefas são necessárias para enviar pedidos com êxito para a API.
- Configure um Google Cloud projeto e transfira o software necessário. Consulte a secção Antes de começar.
- Copie e configure ficheiros do exemplo
bookstore-grpc. Consulte o artigo Configurar pontos finais. - Implemente a configuração do Endpoints para criar um serviço do Endpoints. Consulte o artigo Implementar a configuração dos Endpoints.
- Implemente a API e o ESPv2 no back-end do grupo de instâncias geridas. Consulte o artigo Implementar o back-end da API.
- Envie um pedido para a API. Consulte o artigo Enviar um pedido para a API.
- Evite incorrer em cobranças na sua conta Google Cloud . Consulte a secção Limpar.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização prevista,
use a calculadora de preços.
Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Tome nota do ID do projeto, uma vez que é necessário mais tarde.
- Instale e inicialize a CLI Google Cloud.
- Atualize a CLI gcloud e instale os componentes do Endpoints:
gcloud components update
-
Certifique-se de que a CLI do Google Cloud (
gcloud) está autorizada a aceder aos seus dados e serviços em Google Cloud: No novo separador do navegador apresentado, selecione uma conta.gcloud auth login
-
Defina o projeto predefinido para o ID do seu projeto.
gcloud config set project YOUR_PROJECT_ID
Substitua YOUR_PROJECT_ID pelo ID do seu projeto. Se tiver outros Google Cloud projetos e quiser usar
gcloudpara os gerir, consulte o artigo Gerir configurações da CLI gcloud. - Siga os passos no guia de início rápido do gRPC Python para instalar o gRPC e as ferramentas gRPC.
Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.
Configurar pontos finais
Clone o bookstore-grpcrepositório de exemplo do GitHub.
Para configurar pontos finais:
- Crie um ficheiro de descritor protobuf autónomo a partir do ficheiro
.protodo seu serviço:- Guarde uma cópia de
bookstore.protodo repositório de exemplo. Este ficheiro define a API do serviço Bookstore. - Crie o seguinte diretório:
mkdir generated_pb2 - Crie o ficheiro de descritor,
api_descriptor.pb, usando o compilador de buffers de protocoloprotoc. Execute o seguinte comando no diretório onde guardoubookstore.proto:python -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 seu ambiente de compilação gRPC, se usar um diretório diferente para os ficheiros de entrada, altere--proto_pathpara que o compilador pesquise o diretório onde guardoubookstore.proto..proto
- Guarde uma cópia de
- Crie um ficheiro YAML de configuração da API gRPC:
- Guarde uma cópia do
api_config.yamlficheiro. Este ficheiro define a configuração da API gRPC para o serviço Bookstore. - Substitua MY_PROJECT_ID no ficheiro
api_config.yamlpelo seu ID do projeto. Google Cloud Por exemplo:# # Name of the service configuration. # name: bookstore.endpoints.example-project-12345.cloud.goog
Tenha em atenção que o valor do campo
apis.nameneste ficheiro corresponde exatamente ao nome da API totalmente qualificado do ficheiro.proto. Caso contrário, a implementação não funciona. O serviço Bookstore está definido embookstore.protono pacoteendpoints.examples.bookstore. O nome da API totalmente qualificado éendpoints.examples.bookstore.Bookstore, tal como aparece no ficheiroapi_config.yaml.apis: - name: endpoints.examples.bookstore.Bookstore
- Guarde uma cópia do
Consulte o artigo Configurar pontos finais para mais informações.
Implementação da configuração dos pontos finais
Para implementar a configuração do Endpoints, use o comando
gcloud endpoints services deploy. Este comando usa a
gestão de serviços
para criar um serviço gerido.
- Certifique-se de que está no diretório onde se encontram os ficheiros
api_descriptor.pbeapi_config.yaml. - Confirme que o projeto predefinido que a ferramenta de linha de comandos
gcloudestá a usar atualmente é o projeto Google Cloud no qual quer implementar a configuração do Endpoints. Valide o ID do projeto devolvido pelo seguinte comando para se certificar de que o serviço não é criado no projeto errado.gcloud config list project
Se precisar de alterar o projeto predefinido, execute o seguinte comando:
gcloud config set project YOUR_PROJECT_ID
- Implemente o ficheiro
proto descriptore o ficheiro de configuração através da CLI do Google Cloud:gcloud endpoints services deploy api_descriptor.pb api_config.yaml
À medida que cria e configura o serviço, o Service Management envia informações para o terminal. Quando a implementação estiver concluída, é apresentada uma mensagem semelhante à seguinte:
Service Configuration [CONFIG_ID] uploaded for service [bookstore.endpoints.example-project.cloud.goog]
CONFIG_ID é o ID exclusivo da configuração do serviço Endpoints criado pela implementação. Por exemplo:
Service Configuration [2017-02-13r0] uploaded for service [bookstore.endpoints.example-project.cloud.goog]
No exemplo anterior,
2017-02-13r0é o ID de configuração do serviço ebookstore.endpoints.example-project.cloud.googé o nome do serviço. O ID de configuração do serviço consiste numa indicação de data/hora seguida de um número de revisão. Se implementar novamente a configuração dos Endpoints no mesmo dia, o número de revisão é incrementado no ID de configuração do serviço.
A verificar os serviços necessários
No mínimo, os pontos finais e o ESP requerem a ativação dos seguintes serviços Google:| Nome | Título |
|---|---|
servicemanagement.googleapis.com |
Service Management API |
servicecontrol.googleapis.com |
Service Control API |
Na maioria dos casos, o comando gcloud endpoints services deploy ativa estes serviços obrigatórios. No entanto, o comando gcloud é concluído com êxito, mas não ativa os serviços necessários nas seguintes circunstâncias:
Se usou uma aplicação de terceiros, como o Terraform, e não incluiu estes serviços.
Implementou a configuração do Endpoints numGoogle Cloud projeto existente no qual estes serviços foram explicitamente desativados.
Use o seguinte comando para confirmar que os serviços necessários estão ativados:
gcloud services list
Se não vir os serviços necessários listados, ative-os:
gcloud services enable servicemanagement.googleapis.com
gcloud services enable servicecontrol.googleapis.comAtive também o serviço Endpoints:
gcloud services enable ENDPOINTS_SERVICE_NAME
Para determinar o ENDPOINTS_SERVICE_NAME, pode:
Após implementar a configuração do Endpoints, aceda à página Endpoints na Cloud Console. A lista de ENDPOINTS_SERVICE_NAME possíveis é apresentada na coluna Nome do serviço.
Para a OpenAPI, o ENDPOINTS_SERVICE_NAME é o que especificou no campo
hostda sua especificação OpenAPI. Para o gRPC, o ENDPOINTS_SERVICE_NAME é o que especificou no camponameda sua configuração de pontos finais gRPC.
Para mais informações sobre os comandos gcloud, consulte os
serviços gcloud.
Se receber uma mensagem de erro, consulte o artigo Resolução de problemas da implementação da configuração de endpoints. Consulte o artigo Implementar a configuração dos Endpoints para ver informações adicionais.
Implementar o back-end da API
Até agora, implementou a configuração da API no Service Management, mas ainda não implementou o código que serve o back-end da API. Esta secção explica como configurar o Docker no seu grupo de instâncias gerido e executar o código de back-end da API e o ESPv2 num contentor Docker.
Crie um modelo de instância
Crie um modelo que vai usar para criar um grupo de instâncias de VM. Cada instância criada a partir do modelo inicia um ESPv2 e um servidor de aplicações de back-end.
Na Google Cloud consola, aceda à página Modelos de instâncias.
Clique em Criar modelo de instância.
Em Nome, introduza
load-balancing-espv2-template.Em Configuração da máquina, defina o Tipo de máquina como
e2-micro.Em Disco de arranque, defina a Imagem como
Container Optimized OS stable version.Em Firewall, selecione Permitir tráfego HTTP.
Clique em Gestão, segurança, discos, trabalhar em rede, arrendamento único para revelar as definições avançadas.
Clique no separador Gestão. Em Automatização, introduza o seguinte Script de arranque. Lembre-se de atualizar o ENDPOINTS_SERVICE_NAME.
sudo docker network create --driver bridge esp_net sudo docker run \ --detach \ --name=bookstore \ --net=esp_net \ gcr.io/endpointsv2/python-grpc-bookstore-server:1 sudo docker run \ --detach \ --name=esp \ --publish=80:9000 \ --net=esp_net \ gcr.io/endpoints-release/endpoints-runtime:2 \ --service=ENDPOINTS_SERVICE_NAME \ --rollout_strategy=managed \ --listener_port=9000 \ --healthz=/healthz \ --backend=grpc://bookstore:8000
O script obtém, instala e inicia o servidor de aplicações de eco e o servidor proxy ESPv2 no arranque da instância.
Clique em Criar.
Aguarde até que o modelo seja criado antes de continuar.
Crie um grupo de instâncias gerido regional
Para executar a aplicação, use o modelo de instância para criar um grupo de instâncias gerido regional:
Na Google Cloud consola, aceda à página Grupos de instâncias.
Clique em Criar grupo de instâncias.
Em Nome, introduza
load-balancing-espv2-group.Em Localização, selecione Várias zonas.
Em Região, selecione us-central1.
Clique no menu pendente Configurar zonas para revelar Zonas. Selecione as seguintes zonas:
- us-central1-b
- us-central1-c
- us-central1-f
Em Modelo de instância, selecione
load-balancing-espv2-template.Em Ajuste de escala automático, selecione Não ajustar a escala automaticamente.
Defina o Número de instâncias como
3.Em Redistribuição de instâncias, selecione Ativada.
Em Reparação automática e Verificação de estado, selecione Sem verificação de estado.
Clique em Criar. Esta ação redireciona novamente para a página Grupos de instâncias.
Crie um balanceador de carga
Esta secção explica os passos necessários para criar um equilibrador de carga regional que direcione o tráfego TCP para o seu grupo de instâncias.
Na Google Cloud consola, aceda à página Criar um balanceador de carga.
Em Balanceamento de carga TCP, clique em Iniciar configuração.
Em Acessível pela Internet ou apenas interno, selecione Da Internet para as minhas VMs.
Em Várias regiões ou uma única região, selecione Apenas uma região.
Em Tipo de back-end, selecione Serviço de back-end.
Clique em Continuar.
Em Nome, introduza
espv2-load-balancer.Em Configuração de back-end, selecione a região us-central1.
Selecione o grupo de instâncias
load-balancing-espv2-group.Em Verificação de funcionamento, crie uma nova verificação de funcionamento.
- Em nome, introduza
espv2-load-balancer-check. - Confirme se o Protocolo é TCP e se a Porta é 80.
- Em nome, introduza
Em Configuração do front-end, introduza o número da porta 80.
Em Rever e finalizar, valide
- O grupo de instâncias está
load-balancing-espv2-group. - A região é
us-central1. - O Protocolo é
TCP. - O IP:Porta é
EPHEMERAL:80.
- O grupo de instâncias está
Depois de criar o balanceador de carga, encontre o endereço IP na página Balanceador de carga.
Enviar um pedido para a API
Se estiver a enviar o pedido a partir da mesma instância em que os contentores do Docker estão a ser executados, pode substituir SERVER_IP por localhost. Caso contrário,
substitua SERVER_IP pelo IP externo da instância.
Pode encontrar o endereço IP externo executando o seguinte comando:
gcloud compute instances list
Para enviar pedidos para a API de exemplo, pode usar um cliente gRPC de exemplo escrito em Python.
Clone o repositório Git onde o código do cliente gRPC está alojado:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Altere o diretório de trabalho:
cd python-docs-samples/endpoints/bookstore-grpc/
Instale dependências:
pip install virtualenvvirtualenv envsource env/bin/activatepython -m pip install -r requirements.txtEnvie um pedido para a API de exemplo:
python bookstore_client.py --host SERVER_IP --port 80
Consulte os gráficos de atividade da sua API na página Endpoints > Serviços.
Aceda à página Serviços de pontos finais
Pode demorar alguns momentos até que o pedido se reflita nos gráficos.
Consulte os registos de pedidos da sua API na página do explorador de registos.
Se não receber uma resposta bem-sucedida, consulte o artigo Resolução de problemas de erros de resposta.
Acabou de implementar e testar uma API no Endpoints!
Limpar
Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
Certifique-se de que a CLI gcloud (
gcloud) está autorizada a aceder aos seus dados e serviços em Google Cloud:gcloud auth loginIntroduza o seguinte para apresentar os IDs dos seus Google Cloud projetos:
gcloud projects listUsando o ID do projeto aplicável do passo anterior, defina o projeto predefinido Google Cloud para aquele em que a sua aplicação se encontra:
gcloud config set project [YOUR_PROJECT_ID]Obtenha o nome de todos os serviços geridos no seu Google Cloud projeto:
gcloud endpoints services listElimine o serviço na gestão de serviços. Substitua
SERVICE_NAMEpelo nome do serviço que quer remover.gcloud endpoints services delete SERVICE_NAME
A execução de
gcloud endpoints services deletenão elimina imediatamente o serviço gerido. A gestão de serviços desativa o serviço gerido durante 30 dias, o que lhe dá tempo para o restaurar, se precisar. Após 30 dias, a gestão de serviços elimina permanentemente o serviço gerido.Aceda à página Load Balancer.
Aceder ao balanceador de carga
Elimine o balanceador de carga
espv2-load-balancercom a verificação de funcionamentoespv2-load-balancer-check.Aceda à página Grupos de instâncias.
Eliminar
load-balancing-espv2-groupAceda à página Modelo de instância.
Eliminar
load-balancing-espv2-template.