Introdução ao API Gateway e ao App Engine
Esta página mostra como configurar o API Gateway para gerir e proteger um serviço de back-end do App Engine.
Lista de tarefas
Use a seguinte lista de tarefas enquanto segue o tutorial. Todas as tarefas são necessárias para implementar um gateway de API para o serviço de back-end do App Engine.
- Crie ou selecione um Google Cloud projeto.
- Se ainda não implementou o seu próprio App Engine, implemente uma app de exemplo. Consulte a secção Antes de começar.
- Ative os serviços de gateway da API necessários.
- Configure as CNAs para proteger a sua app. Consulte o artigo Configure as CNAs.
- Crie uma descrição OpenAPI que descreva a sua API e configure as rotas para o App Engine. Consulte o artigo Crie uma configuração de API.
- Implemente um gateway de API através da configuração da API. Consulte o artigo Implementar um gateway da API.
- Monitorize a atividade nas suas apps. Consulte o artigo Acompanhamento da atividade da API.
- Evite incorrer em cobranças na sua conta Google Cloud . Consulte Limpar.
Antes de começar
Na Google Cloud consola, aceda à página Painel de controlo e selecione ou crie um Google Cloud projeto.
Certifique-se de que a faturação está ativada para o seu projeto.
Tome nota do ID do projeto que quer usar para este tutorial. No resto desta página, este ID do projeto é designado por PROJECT_ID.
Transfira e instale a Google Cloud CLI.
Atualize os
gcloudcomponentes:gcloud components update
Defina o projeto predefinido. Substitua PROJECT_ID pelo seu Google Cloud ID do projeto:
gcloud config set project PROJECT_ID
Se não implementou a sua própria app do App Engine, siga os passos no Início rápido do App Engine para o seu idioma de modo a usar a CLI Google Cloud para selecionar ou criar um Google Cloud projeto e implementar uma app de exemplo. Tome nota do URL da app, bem como da região e do ID do projeto onde a sua app está implementada.
Ative os serviços necessários
O API Gateway requer que ative os seguintes serviços Google:
| Nome | Título |
|---|---|
apigateway.googleapis.com |
API do API Gateway |
servicemanagement.googleapis.com |
Service Management API |
servicecontrol.googleapis.com |
Service Control API |
Use os seguintes comandos para ativar estes 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 gcloud, consulte os
serviços gcloud.
Configure a IAP para proteger a sua app
Para proteger a sua app do App Engine, tem de usar o Identity Aware Proxy (IAP) para verificar se os pedidos estão autenticados. Este processo inclui a especificação dos membros aos quais deve ser atribuída a função IAP-secured Web App User necessária para o projeto.
Siga os passos para ativar as CAsI e verifique se consegue iniciar sessão na sua aplicação.
Crie uma configuração de API
Antes de poder usar o API Gateway para gerir o tráfego para o seu back-end do App Engine implementado, precisa de uma configuração da API.
Pode criar uma configuração da API através de uma descrição OpenAPI que contenha anotações especializadas para definir o comportamento escolhido do API Gateway. Tem de adicionar um campo específico da Google que contenha o URL de cada app do App Engine para que o API Gateway tenha as informações necessárias para invocar uma app.
Para mais detalhes sobre as extensões OpenAPI suportadas, consulte o seguinte:
Para criar a configuração da API:
- Crie um ficheiro de texto denominado
openapi-appengine.yaml. Para maior conveniência, esta página refere-se à descrição da OpenAPI por esse nome de ficheiro, mas pode atribuir-lhe outro nome, se preferir. - Copie o conteúdo do seguinte ficheiro para o ficheiro
openapi-run.yaml:OpenAPI 2.0
# openapi-appengine.yaml swagger: '2.0' info: title: API_ID optional-string description: Sample API on API Gateway with an App Engine backend version: 1.0.0 schemes: - https produces: - application/json paths: /hello: get: summary: Greet a user operationId: hello x-google-backend: address: APP_URL jwt_audience: IAP_CLIENT_ID responses: '200': description: A successful response schema: type: string
- No campo
title, substitua API_ID pelo nome da sua API e substitua optional-string por uma breve descrição à sua escolha. Se a API ainda não existir, o comando para criar a configuração da API também cria a API com o nome que especificar. O valor do campotitleé usado quando são geradas chaves de API que concedem acesso a esta API. Consulte os requisitos de ID da API para ver as diretrizes de nomenclatura da API. - No campo
addressda secçãox-google-backend, substitua APP_URL pelo URL real do seu serviço do App Engine (o caminho completo da API chamada). Por exemplo,https://myapp.an.r.appspot.com/hello.Substitua IAP_CLIENT_ID pelo ID de cliente OAuth que criou quando configurou a IAP.
OpenAPI 3.x
# openapi-appengine.yaml openapi: 3.0.4 info: title: API_ID optional-string description: Sample API on API Gateway with an App Engine backend version: 1.0.0 # Define reusable components in x-google-api-management x-google-api-management: backends: appengine_backend: address: APP_URL jwtAudience: IAP_CLIENT_ID deadline: 30.0 pathTranslation: APPEND_PATH_TO_ADDRESS protocol: "http/1.1" # Apply the backend configuration by referencing it by name. Set at the root so this applies to all operations unless overridden. x-google-backend: appengine_backend paths: /hello: get: summary: Greet a user operationId: hello responses: '200': description: A successful response schema: type: string
- No campo
title, substitua API_ID pelo nome da sua API e substitua optional-string por uma breve descrição à sua escolha. Se a API ainda não existir, o comando para criar a configuração da API também cria a API com o nome que especificar. O valor do campotitleé usado quando são geradas chaves de API que concedem acesso a esta API. Consulte os requisitos de ID da API para ver as diretrizes de nomenclatura da API. - No campo
address, substitua APP_URL pelo URL real do seu serviço do App Engine (o caminho completo da API chamada). Por exemplo,https://myapp.an.r.appspot.com/hello.Substitua IAP_CLIENT_ID pelo ID de cliente OAuth que criou quando configurou as CAs.
- No campo
- Introduza o seguinte comando, em que:
- CONFIG_ID especifica o nome da configuração da API.
- API_ID especifica o nome da sua API. Se a API ainda não existir, este comando cria-a.
- SERVICE_ACCOUNT_EMAIL especifica a conta de serviço usada para assinar tokens para back-ends com autenticação configurada.
gcloud api-gateway api-configs create CONFIG_ID \ --api=API_ID --openapi-spec=openapi2-appengine.yaml \ --backend-auth-service-account=SERVICE_ACCOUNT_EMAIL
Esta operação pode demorar vários minutos a ser concluída, uma vez que a configuração da API é propagada para sistemas a jusante. A criação de uma configuração de API complexa pode demorar até dez minutos a ser concluída com êxito.
- Depois de criar a configuração da API, pode ver os respetivos detalhes executando este comando:
gcloud api-gateway api-configs describe CONFIG_ID \ --api=API_ID
Implementar um gateway da API
Agora, pode implementar a sua API no API Gateway. A implementação de uma API no API Gateway também define um URL externo que os clientes API podem usar para aceder à sua API.
Execute o seguinte comando para implementar a configuração da API que acabou de criar no API Gateway:
gcloud api-gateway gateways create GATEWAY_ID \ --api=API_ID --api-config=CONFIG_ID \ --location=GCP_REGION
Onde:
- GATEWAY_ID especifica o nome da gateway.
- API_ID especifica o nome da API do gateway da API associada a este gateway.
- CONFIG_ID especifica o nome da configuração da API implementada no gateway.
GCP_REGION é a Google Cloud região para o gateway implementado.
Após a conclusão com êxito, pode usar o seguinte comando para ver detalhes sobre o gateway:
gcloud api-gateway gateways describe GATEWAY_ID \ --location=GCP_REGION
Anote o valor da propriedade defaultHostname no resultado deste comando. Esta é a parte do nome do anfitrião do URL do gateway que usa para testar a implementação no passo seguinte.
Testar a implementação da API
Agora, pode enviar pedidos para a sua API através do URL gerado após a implementação da gateway.
Introduza o seguinte comando curl, em que:
- DEFAULT_HOSTNAME especifica a parte do nome do anfitrião do URL da gateway implementada. Pode encontrar o valor de
defaultHostnameno resultado do comandogateways describeapresentado anteriormente. - DEFAULT_HOSTNAME especifica a parte do nome do anfitrião do URL da gateway implementada. Pode encontrar o valor de
defaultHostnameno resultado do comandogateways describeapresentado anteriormente. helloé o caminho especificado na configuração da API.
curl https://DEFAULT_HOSTNAME/hello
Por exemplo:
curl https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello
Deverá ver o seguinte resultado:
My-AppEngineApp: Access denied for user gateway-1a2b3c@04d5e6f35FgdsT73dFrty-tp.iam.gserviceaccount.com requesting https://my-project.appspot.com/helloGET. If you should have access, contact myldap@google.com and include the full text of this message.
Êxito! O gateway está a gerir o acesso ao serviço de back-end do App Engine. Para conceder acesso à sua app do App Engine, tem de configurar uma conta de serviço com as autorizações corretas para a sua entrada.
Acompanhamento da atividade da API
Veja os gráficos de atividade da sua API na página API Gateway na Google Cloud consola. Clique na sua API para ver os respetivos gráficos de atividade na página Vista geral. Os pedidos podem demorar alguns momentos a ser refletidos nos gráficos.
Consulte os registos de pedidos da sua API na página Explorador de registos. Pode encontrar um link para a página do Explorador de registos na página do API Gateway na Google Cloud consola.
Depois de aceder à página do API Gateway:- Selecione a API para ver.
- Clique no separador Detalhes.
- Clique no link em Registos.
Limpar
Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste início rápido, pode:
Em alternativa, também pode eliminar o Google Cloud projeto usado para este tutorial.