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.

  1. Crie ou selecione um Google Cloud projeto.
  2. Se ainda não implementou o seu próprio App Engine, implemente uma app de exemplo. Consulte a secção Antes de começar.
  3. Ative os serviços do gateway da API necessários.
  4. Configure as CNAs para proteger a sua app. Consulte o artigo Configure as CNAs.
  5. 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.
  6. Implemente um gateway de API através da configuração da API. Consulte o artigo Implementar um gateway da API.
  7. Monitorizar a atividade nas suas apps. Consulte o artigo Acompanhamento da atividade da API.
  8. Evite incorrer em cobranças na sua Google Cloud conta. Consulte Limpar.

Antes de começar

  1. Na Google Cloud consola, aceda à página Painel de controlo e selecione ou crie um Google Cloud projeto.

    Aceda à página Painel de controlo

  2. Certifique-se de que a faturação está ativada para o seu projeto.

    Ative a faturação

  3. 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.

  4. Transfira e instale a Google Cloud CLI.

    Transfira a CLI gcloud

  5. Atualize os gcloudcomponentes:

    gcloud components update
  6. Defina o projeto predefinido. Substitua PROJECT_ID pelo seu Google Cloud ID do projeto:

    gcloud config set project PROJECT_ID

  7. 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. Anote o URL da app, bem como a região e o 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.com
gcloud services enable servicemanagement.googleapis.com
gcloud services enable servicecontrol.googleapis.com

Para mais informações sobre os serviços gcloud, consulte o artigo 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 concedida 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 da 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:

  1. Crie um ficheiro de texto denominado openapi-appengine.yaml. Por conveniência, esta página refere-se à descrição da OpenAPI por esse nome de ficheiro, mas pode atribuir-lhe outro nome, se preferir.
  2. 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 campo title é 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 da secção x-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 as CAs.

    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 campo title é 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.

  3. Introduza o seguinte comando, onde:
    • 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.

  4. 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=