Este tutorial mostra como configurar e implementar uma amostra de API e o proxy de serviço extensível (ESP) em execução em contentores Docker pré-criados no Compute Engine. A API REST do exemplo de código é descrita através da especificação OpenAPI. O tutorial também mostra como criar uma chave da API e usá-la em pedidos à API.
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. Consulte a secção Antes de começar.
- Crie uma instância de VM do Compute Engine. Consulte o artigo Criar uma instância do Compute Engine.
- Transfira o exemplo de código. Consulte o artigo Obter o exemplo de código.
- Configure o ficheiro
openapi.yaml
, que é usado para configurar pontos finais. 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 ESP na VM do Compute Engine. Consulte o artigo Implementar o back-end da API.
- Envie um pedido para a API através de um endereço IP. Consulte Enviar um pedido através do endereço IP.
- Configure um registo de DNS para a API de exemplo. Consulte o artigo Configurar o DNS para pontos finais.
- Envie um pedido para a API através do nome de domínio totalmente qualificado. Consulte Enviar um pedido através do FQDN.
- Acompanhe a atividade da API. Consulte o artigo Acompanhamento da atividade da 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 projetada,
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. 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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. 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.
-
Precisa de uma aplicação para enviar pedidos para a API de exemplo.
- Utilizadores do Linux e macOS: este tutorial oferece um exemplo de utilização do
curl
, que normalmente vem pré-instalado no seu sistema operativo. Se não tiver ocurl
, pode transferi-lo nacurl
página de lançamentos e transferências. - Utilizadores do Windows: este tutorial fornece um exemplo com
Invoke-WebRequest
, que é suportado no PowerShell 3.0 e posterior.
- Utilizadores do Linux e macOS: este tutorial oferece um exemplo de utilização do
- Transfira a CLI do 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
gcloud
para os gerir, consulte Gerir configurações da CLI gcloud.
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.
Criar uma instância do Compute Engine
- In the Google Cloud console, go to the Create an instance page.
- Na secção Firewall, selecione Permitir tráfego HTTP e permitir tráfego HTTPS.
- Para criar a VM, clique em Criar.
- Certifique-se de que consegue estabelecer ligação à instância de VM.
- In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.
- Agora, pode usar o terminal para executar comandos do Linux na sua instância do Debian.
- Introduza
exit
para desassociar da instância.
- Tome nota do nome da instância, da zona e do endereço IP externo, uma vez que são necessários mais tarde.
Para criar uma instância do Compute Engine:
Aguarde algum tempo para que a instância seja iniciada. Quando estiver pronta, é apresentada na página Instâncias de VM com um ícone de estado verde.
Transferir o exemplo de código
Transfira o exemplo de código para a sua máquina local.
Para clonar ou transferir a API de exemplo:
- Clone o repositório da app de exemplo para a sua máquina local:
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
Em alternativa, transfira o exemplo como um ficheiro ZIP e extraia-o.
- Altere para o diretório que contém o código de exemplo:
cd java-docs-samples/endpoints/getting-started
Para clonar ou transferir a API de exemplo:
- Clone o repositório da app de exemplo para a sua máquina local:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples
Em alternativa, transfira o exemplo como um ficheiro ZIP e extraia-o.
- Altere para o diretório que contém o código de exemplo:
cd python-docs-samples/endpoints/getting-started
Para clonar ou transferir a API de exemplo:
- Certifique-se de que a
GOPATH
variável de ambiente está definida. - Clone o repositório da app de exemplo para a sua máquina local:
go get -d github.com/GoogleCloudPlatform/golang-samples/endpoints/getting-started
- Altere para o diretório que contém o código de exemplo:
cd $GOPATH/src/github.com/GoogleCloudPlatform/golang-samples/endpoints/getting-started
Para clonar ou transferir a API de exemplo:
- Clone o repositório da app de exemplo para a sua máquina local:
git clone https://github.com/GoogleCloudPlatform/php-docs-samples
Em alternativa, transfira o exemplo como um ficheiro ZIP e extraia-o.
- Altere para o diretório que contém o código de exemplo:
cd php-docs-samples/endpoints/getting-started
Para clonar ou transferir a API de exemplo:
- Clone o repositório da app de exemplo para a sua máquina local:
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples
Em alternativa, transfira o exemplo como um ficheiro ZIP e extraia-o.
- Altere para o diretório que contém o código de exemplo:
cd ruby-docs-samples/endpoints/getting-started
Para clonar ou transferir a API de exemplo:
- Clone o repositório da app de exemplo para a sua máquina local:
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples
Em alternativa, transfira o exemplo como um ficheiro ZIP e extraia-o.
- Altere para o diretório que contém o código de exemplo:
cd nodejs-docs-samples/endpoints/getting-started
Configurar pontos finais
O exemplo de código inclui o ficheiro de configuração da OpenAPI, openapi.yaml
, que se baseia na especificação da OpenAPI v2.0.
Configura e implementa o openapi.yaml
na sua máquina local.
Para configurar pontos finais:
- No diretório de código de exemplo, abra o ficheiro de configuração
openapi.yaml
.Java Python Ir PHP Ruby NodeJS Tenha em conta o seguinte:
- O exemplo de configuração apresenta as linhas junto ao campo
host
que tem de modificar. Para implementar o ficheiroopenapi.yaml
nos Endpoints, é necessário o documento OpenAPI completo. - O ficheiro de exemplo
openapi.yaml
contém uma secção para configurar a autenticação que não é necessária para este tutorial. Não precisa de configurar as linhas com YOUR-SERVICE-ACCOUNT-EMAIL e YOUR-CLIENT-ID. - A OpenAPI é uma especificação independente do idioma. O mesmo ficheiro
openapi.yaml
encontra-se no exemplogetting-started
em cada repositório do GitHub para sua conveniência.
- O exemplo de configuração apresenta as linhas junto ao campo
- No campo
host
, substitua o texto pelo nome do serviço Endpoints, que deve estar no seguinte formato:host: "echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog"
Substitua YOUR_PROJECT_ID pelo ID do seu Google Cloud projeto. Por exemplo:
host: "echo-api.endpoints.example-project-12345.cloud.goog"
Tenha em atenção que echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog
é o nome do serviço Endpoints. Não é o nome do domínio totalmente qualificado (FQDN) que usa para enviar pedidos à API.
Para obter informações sobre os campos no documento OpenAPI que o Endpoints requer, consulte o artigo Configurar o Endpoints.
Depois de concluir todos os passos de configuração seguintes para poder enviar pedidos com êxito para a API de exemplo através de um endereço IP, consulte o artigo Configurar o DNS dos pontos finais para ver informações sobre como configurar echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog
para ser o FQDN.
Implementar a 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.
Para implementar a configuração dos Endpoints:
- Certifique-se de que está no diretório
endpoints/getting-started
. - Carregue a configuração e crie um serviço gerido:
gcloud endpoints services deploy openapi.yaml
Em seguida, o comando gcloud
chama a API Service Management para criar um serviço gerido com o nome que especificou no campo host
do ficheiro openapi.yaml
.
A gestão de serviços configura o serviço de acordo com as definições no ficheiro openapi.yaml
. Quando faz alterações ao
openapi.yaml
, tem de voltar a implementar o ficheiro para atualizar o serviço
Endpoints.
À medida que cria e configura o serviço, o Service Management
envia informações para o terminal. Pode ignorar com segurança os avisos sobre os caminhos no ficheiro openapi.yaml
que não requerem uma chave da API.
Quando terminar de configurar o serviço, a gestão de serviços apresenta uma mensagem com o ID de configuração do serviço e o nome do serviço, semelhante ao seguinte:
Service Configuration [2017-02-13r0] uploaded for service [echo-api.endpoints.example-project-12345.cloud.goog]
No exemplo anterior, 2017-02-13r0
é o ID de configuração do serviço e echo-api.endpoints.example-project-12345.cloud.goog
é o serviço Endpoints. O ID de configuração do serviço consiste numa
data/hora seguida de um número de revisão. Se implementar o ficheiro
openapi.yaml
novamente no mesmo dia, o número
de revisão é incrementado no ID de configuração do serviço. Pode ver a configuração do serviço Endpoints na página Endpoints > Serviços na Google Cloud consola.
Se receber uma mensagem de erro, consulte o artigo Resolução de problemas da implementação da configuração de pontos finais.
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.com
Ative 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
host
da sua especificação OpenAPI. Para o gRPC, o ENDPOINTS_SERVICE_NAME é o que especificou no camponame
da sua configuração de pontos finais gRPC.
Para mais informações sobre os comandos gcloud
, consulte os
serviços gcloud
.
Implementar o back-end da API
Até agora, implementou o documento OpenAPI na gestão de serviços, mas ainda não implementou o código que publica o back-end da API. Esta secção explica como configurar o Docker na instância da VM e executar o código de back-end da API e o ESP num contentor Docker.
A verificar as autorizações necessárias
- Na Google Cloud consola, aceda à página de instâncias do Compute Engine.
- Selecione a sua instância na lista.
- Pode ver a conta de serviço associada e as autorizações que tem.
Conceda as autorizações necessárias à conta de serviço:
gcloud projects add-iam-policy-binding PROJECT_ID
--member "serviceAccount:SERVICE_ACCOUNT"
--role roles/servicemanagement.serviceControllerPara mais informações, consulte o artigo O que são funções e autorizações?
Instale o Docker na instância de VM
Para instalar o Docker na instância de VM:
- Defina a zona do seu projeto executando o comando:
gcloud config set compute/zone YOUR_INSTANCE_ZONE
Substitua YOUR_INSTANCE_ZONE pela zona onde a sua instância está a ser executada.
- Associe-se à sua instância através do seguinte comando:
gcloud compute ssh INSTANCE_NAME
Substitua INSTANCE_NAME pelo nome da instância de VM.
- Consulte a
documentação do Docker
para configurar o repositório do Docker. Certifique-se de que segue os passos que correspondem à versão e à arquitetura da sua instância de VM:
- Jessie ou mais recente
- x86_64 / amd64
Execute a API e o ESP num contentor do Docker
O ESP é um proxy baseado no nginx
que se encontra à frente do código de back-end. Processa o tráfego recebido para fornecer autenticação, gestão de chaves de API, registo e outras funcionalidades de gestão da API Endpoints.
Para instalar e executar a API de exemplo e o ESP num contentor Docker:
- Crie a sua própria rede de contentores denominada
esp_net
.sudo docker network create --driver bridge esp_net
- Execute o servidor Echo de exemplo que publica a API de exemplo:
Java sudo docker run --detach --name=echo --net=esp_net gcr.io/google-samples/echo-java:1.0
Python sudo docker run --detach --name=echo --net=esp_net gcr.io/google-samples/echo-python:1.0
Ir sudo docker run --detach --name=echo --net=esp_net gcr.io/google-samples/echo-go:1.0
PHP sudo docker run --detach --name=echo --net=esp_net gcr.io/google-samples/echo-php:1.0
Ruby sudo docker run --detach --name=echo --net=esp_net gcr.io/google-samples/echo-ruby:1.0
NodeJS sudo docker run --detach --name=echo --net=esp_net gcr.io/google-samples/echo-node:1.0
- Execute o contentor Docker de ESP público pré-embalado.
Nas opções de arranque do ESP, substitua
SERVICE_NAME pelo nome do seu serviço. Este é o mesmo nome que configurou no campo
host
do seu documento OpenAPI.sudo docker run \ --name=esp \ --detach \ --publish=80:8080 \ --net=esp_net \ gcr.io/endpoints-release/endpoints-runtime:1 \ --service=SERVICE_NAME \ --rollout_strategy=managed \ --backend=echo:8080
A opção
--rollout_strategy=managed
configura o ESP para usar a configuração do serviço implementada mais recente. Quando especifica esta opção, até 5 minutos após implementar uma nova configuração de serviço, o ESP deteta a alteração e começa a usá-la automaticamente. Recomendamos que especifique esta opção em vez de um ID de configuração específico para o ESP usar. Para ver informações sobre as outras opções de ESP usadas acima, consulte as opções de arranque do ESP.
Se receber uma mensagem de erro, consulte o artigo Resolução de problemas de pontos finais no Compute Engine.
Consulte o artigo Implementar o back-end da API para ver informações adicionais.
Enviar um pedido através de um endereço IP
Depois de a API de exemplo e o ESP estarem em execução na instância do Compute Engine, pode enviar pedidos para a API a partir da sua máquina local.
Crie uma chave da API e defina uma variável de ambiente
O código de exemplo requer uma chave da API. Para simplificar o pedido, defina uma variável de ambiente para a chave da API.
No mesmo Google Cloud projeto que usou para a sua API, crie uma chave da API na página de credenciais da API. Se quiser criar uma chave da API num Google Cloud projeto diferente, consulte o artigo Ativar uma API no seu Google Cloud projeto.
- Clique em Criar credenciais e, de seguida, selecione Chave de API.
- Copie a chave para a área de transferência.
- Clique em Fechar.
- No computador local, cole a chave da API para a atribuir a uma variável de ambiente:
- No Linux ou macOS:
export ENDPOINTS_KEY=AIza...
- No Windows PowerShell:
$Env:ENDPOINTS_KEY="AIza..."
- No Linux ou macOS:
Envie o pedido
Linux ou Mac OS
Use curl
para enviar um pedido HTTP através da variável de ambiente ENDPOINTS_KEY que definiu anteriormente. Substitua IP_ADDRESS pelo endereço IP externo da sua instância.
curl --request POST \ --header "content-type:application/json" \ --data '{"message":"hello world"}' \ "http://IP_ADDRESS:80/echo?key=${ENDPOINTS_KEY}"
Nos curl
anteriores:
- A opção
--data
especifica os dados a publicar na API. - A opção
--header
especifica que os dados estão no formato JSON.
PowerShell
Use Invoke-WebRequest
para enviar um pedido HTTP através da variável de ambiente ENDPOINTS_KEY
que definiu anteriormente. Substitua IP_ADDRESS pelo endereço IP externo da sua instância.
(Invoke-WebRequest -Method POST -Body '{"message": "hello world"}' ` -Headers @{"content-type"="application/json"} ` -URI "http://IP_ADDRESS:80/echo?key=$Env:ENDPOINTS_KEY").Content
No exemplo anterior, as duas primeiras linhas terminam com um acento grave. Quando colar o exemplo no PowerShell, certifique-se de que não existe um espaço após os acentos graves. Para obter informações sobre as opções usadas no pedido de exemplo, consulte Invoke-WebRequest na documentação da Microsoft.
App de terceiros
Pode usar uma aplicação de terceiros, como a extensão do navegador Chrome Postman, para enviar o pedido:
- Selecione
POST
como verbo HTTP. - Para o cabeçalho, selecione a chave
content-type
e o valorapplication/json
. - Para o corpo, introduza o seguinte:
{"message":"hello world"}
-
No URL, use a chave da API real em vez da variável de ambiente.
Por exemplo:
http://192.0.2.0:80/echo?key=AIza...
A API devolve a mensagem que envia e responde com o seguinte:
{
"message": "hello world"
}
Se não recebeu uma resposta bem-sucedida, consulte o artigo Resolução de problemas de erros de resposta.
Acabou de implementar e testar uma API no Endpoints!
Configurar o DNS para pontos finais
Uma vez que o nome do serviço Endpoints para a API está no domínio .endpoints.YOUR_PROJECT_ID.cloud.goog
, pode usá-lo como o nome de domínio totalmente qualificado (FQDN) fazendo uma pequena alteração de configuração no ficheiro openapi.yaml
. Desta forma, pode
enviar pedidos para a API de exemplo através de
echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog
em vez do endereço IP.
Para configurar o DNS dos Endpoints:
- Abra o ficheiro de configuração da OpenAPI,
openapi.yaml
, e adicione a propriedadex-google-endpoints
no nível superior do ficheiro (sem recuo nem aninhamento), conforme mostrado no seguinte fragmento:host: "echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog" x-google-endpoints: - name: "echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog" target: "IP_ADDRESS"
- Na propriedade
name
, substitua YOUR_PROJECT_ID pelo ID do seu projeto. - Na propriedade
target
, substitua IP_ADDRESS pelo endereço IP que usou quando enviou um pedido para a API de exemplo. - Implemente o ficheiro de configuração OpenAPI atualizado na gestão de serviços:
gcloud endpoints services deploy openapi.yaml
Por exemplo, suponha que o ficheiro openapi.yaml
tem a seguinte configuração:
host: "echo-api.endpoints.example-project-12345.cloud.goog" x-google-endpoints: - name: "echo-api.endpoints.example-project-12345.cloud.goog" target: "192.0.2.1"
Quando implementa o ficheiro openapi.yaml
através do comando
gcloud
anterior, a gestão de serviços cria um registo A de DNS,
echo-api.endpoints.my-project-id.cloud.goog
, que é resolvido para o
endereço IP de destino, 192.0.2.1
. A propagação da nova configuração de DNS pode demorar alguns minutos.
Configurar SSL
Para mais detalhes sobre como configurar o DNS e o SSL, consulte o artigo Ativar SSL para pontos finais.
Enviar um pedido através do FQDN
Agora que tem o registo DNS configurado para a API de exemplo, envie-lhe um pedido usando o FQDN (substitua YOUR_PROJECT_ID pelo ID do seu projeto) e a variável de ambiente ENDPOINTS_KEY definida anteriormente:- No Linux ou Mac OS:
curl --request POST \ --header "content-type:application/json" \ --data '{"message":"hello world"}' \ "http://echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog:80/echo?key=${ENDPOINTS_KEY}"
- No Windows PowerShell:
(Invoke-WebRequest -Method POST -Body '{"message": "hello world"}' -Headers @{"content-type"="application/json"} -URI "http://echo-api.endpoints.[YOUR_PROJECT_ID].cloud.goog:80/echo?key=$Env:ENDPOINTS_KEY").Content
Acompanhamento da atividade da API
Para acompanhar a atividade da API:
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.
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.
- Elimine a API:
gcloud endpoints services delete SERVICE_NAME
Substitua
SERVICE_NAME
pelo nome do seu serviço. - In the Google Cloud console, go to the VM instances page.
- Select the checkbox for the instance that you want to delete.
- To delete the instance, click More actions, click Delete, and then follow the instructions.